Commit f1285a6d authored by Max Kellermann's avatar Max Kellermann

tag/TagPool: add constexpr MAX_REF

parent cf7c1afb
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
#include "util/Cast.hxx" #include "util/Cast.hxx"
#include "util/VarSize.hxx" #include "util/VarSize.hxx"
#include <limits>
#include <assert.h> #include <assert.h>
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
...@@ -36,6 +38,8 @@ struct TagPoolSlot { ...@@ -36,6 +38,8 @@ struct TagPoolSlot {
unsigned char ref; unsigned char ref;
TagItem item; TagItem item;
static constexpr unsigned MAX_REF = std::numeric_limits<decltype(ref)>::max();
TagPoolSlot(TagPoolSlot *_next, TagType type, TagPoolSlot(TagPoolSlot *_next, TagType type,
const char *value, size_t length) const char *value, size_t length)
:next(_next), ref(1) { :next(_next), ref(1) {
...@@ -116,7 +120,7 @@ tag_pool_get_item(TagType type, const char *value, size_t length) ...@@ -116,7 +120,7 @@ tag_pool_get_item(TagType type, const char *value, size_t length)
if (slot->item.type == type && if (slot->item.type == type &&
length == strlen(slot->item.value) && length == strlen(slot->item.value) &&
memcmp(value, slot->item.value, length) == 0 && memcmp(value, slot->item.value, length) == 0 &&
slot->ref < 0xff) { slot->ref < TagPoolSlot::MAX_REF) {
assert(slot->ref > 0); assert(slot->ref > 0);
++slot->ref; ++slot->ref;
return &slot->item; return &slot->item;
...@@ -135,11 +139,11 @@ tag_pool_dup_item(TagItem *item) ...@@ -135,11 +139,11 @@ tag_pool_dup_item(TagItem *item)
assert(slot->ref > 0); assert(slot->ref > 0);
if (slot->ref < 0xff) { if (slot->ref < TagPoolSlot::MAX_REF) {
++slot->ref; ++slot->ref;
return item; return item;
} else { } else {
/* the reference counter overflows above 0xff; /* the reference counter overflows above MAX_REF;
duplicate the item, and start with 1 */ duplicate the item, and start with 1 */
size_t length = strlen(item->value); size_t length = strlen(item->value);
auto slot_p = tag_value_slot_p(item->type, auto slot_p = tag_value_slot_p(item->type,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment