// © 2020 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html // charstrmap.h // created: 2020sep01 Frank Yung-Fong Tang #ifndef __CHARSTRMAP_H__ #define __CHARSTRMAP_H__ #include #include "unicode/utypes.h" #include "unicode/uobject.h" #include "uhash.h" U_NAMESPACE_BEGIN /** * Map of const char * keys & values. * Stores pointers as is: Does not own/copy/adopt/release strings. */ class CharStringMap final : public UMemory { public: /** Constructs an unusable non-map. */ CharStringMap() : map(nullptr) {} CharStringMap(int32_t size, UErrorCode &errorCode) { map = uhash_openSize(uhash_hashChars, uhash_compareChars, uhash_compareChars, size, &errorCode); } CharStringMap(CharStringMap &&other) noexcept : map(other.map) { other.map = nullptr; } CharStringMap(const CharStringMap &other) = delete; ~CharStringMap() { uhash_close(map); } CharStringMap &operator=(CharStringMap &&other) noexcept { map = other.map; other.map = nullptr; return *this; } CharStringMap &operator=(const CharStringMap &other) = delete; const char *get(const char *key) const { return static_cast(uhash_get(map, key)); } void put(const char *key, const char *value, UErrorCode &errorCode) { uhash_put(map, const_cast(key), const_cast(value), &errorCode); } private: UHashtable *map; }; U_NAMESPACE_END #endif // __CHARSTRMAP_H__