/*
 * Copyright 2006 The Android Open Source Project
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */


#include "SkTagList.h"

SkTagList::~SkTagList()
{
}

SkTagList* SkTagList::Find(SkTagList* rec, U8CPU tag)
{
    SkASSERT(tag < kSkTagListCount);

    while (rec != nullptr)
    {
        if (rec->fTag == tag)
            break;
        rec = rec->fNext;
    }
    return rec;
}

void SkTagList::DeleteTag(SkTagList** head, U8CPU tag)
{
    SkASSERT(tag < kSkTagListCount);

    SkTagList* rec = *head;
    SkTagList* prev = nullptr;

    while (rec != nullptr)
    {
        SkTagList* next = rec->fNext;

        if (rec->fTag == tag)
        {
            if (prev)
                prev->fNext = next;
            else
                *head = next;
            delete rec;
            break;
        }
        prev = rec;
        rec = next;
    }
}

void SkTagList::DeleteAll(SkTagList* rec)
{
    while (rec)
    {
        SkTagList* next = rec->fNext;
        delete rec;
        rec = next;
    }
}
