#include "util/Taggable.hpp" #include #include #include #include namespace util::impl { UIntTagGenerator::TagType UIntTagGenerator::next() { static std::atomic_uint64_t kNum{0}; return kNum++; } UUIDTagGenerator::TagType UUIDTagGenerator::next() { static boost::uuids::random_generator kGen{}; static std::mutex kMtx{}; std::scoped_lock const lk(kMtx); return kGen(); } } // namespace util::impl namespace util { std::unique_ptr TagDecoratorFactory::make() const { switch (type_) { case Type::UINT: return std::make_unique>(parent_); case Type::UUID: return std::make_unique>(parent_); case Type::NONE: default: return std::make_unique>(); } } TagDecoratorFactory TagDecoratorFactory::with(ParentType parent) const noexcept { return TagDecoratorFactory(type_, parent); } } // namespace util