11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
90b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
100b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkTagList.h"
110b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
120b15698a8c76bb8abc1b555c1d91892669b4118fDerek SollenbergerSkTagList::~SkTagList()
130b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger{
140b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger}
150b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
160b15698a8c76bb8abc1b555c1d91892669b4118fDerek SollenbergerSkTagList* SkTagList::Find(SkTagList* rec, U8CPU tag)
170b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger{
180b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    SkASSERT(tag < kSkTagListCount);
190b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
200b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    while (rec != NULL)
210b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    {
220b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        if (rec->fTag == tag)
230b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            break;
240b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        rec = rec->fNext;
250b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    }
260b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    return rec;
270b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger}
280b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
290b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergervoid SkTagList::DeleteTag(SkTagList** head, U8CPU tag)
300b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger{
310b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    SkASSERT(tag < kSkTagListCount);
320b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
330b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    SkTagList* rec = *head;
340b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    SkTagList* prev = NULL;
350b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
360b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    while (rec != NULL)
370b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    {
380b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        SkTagList* next = rec->fNext;
390b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
400b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        if (rec->fTag == tag)
410b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        {
420b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            if (prev)
430b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger                prev->fNext = next;
440b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            else
450b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger                *head = next;
460b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            delete rec;
470b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            break;
480b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        }
490b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        prev = rec;
500b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        rec = next;
510b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    }
520b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger}
530b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
540b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergervoid SkTagList::DeleteAll(SkTagList* rec)
550b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger{
560b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    while (rec)
570b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    {
580b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        SkTagList* next = rec->fNext;
590b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        delete rec;
600b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        rec = next;
610b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    }
620b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger}
630b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
64