From 20ebacf489333933ce752d66ffb6068434a846f5 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 2 Dec 2013 12:46:48 +0100 Subject: Tag: add methods RemoveAll(), RemoveType() --- src/tag/Tag.cxx | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/tag/Tag.cxx') diff --git a/src/tag/Tag.cxx b/src/tag/Tag.cxx index 6bf070429..0fb7ea93b 100644 --- a/src/tag/Tag.cxx +++ b/src/tag/Tag.cxx @@ -223,3 +223,23 @@ Tag::AddItem(TagType type, const char *value) { AddItem(type, value, strlen(value)); } + +void +Tag::RemoveType(TagType type) +{ + auto dest = items, src = items, end = items + num_items; + + tag_pool_lock.lock(); + while (src != end) { + TagItem *item = *src++; + if (item->type == type) + /* remove it */ + tag_pool_put_item(item); + else + /* keep it */ + *dest++ = item; + } + tag_pool_lock.unlock(); + + num_items = dest - items; +} -- cgit v1.2.3