55 lines
1.5 KiB
C++
55 lines
1.5 KiB
C++
// © 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 <utility>
|
|
#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) U_NOEXCEPT : map(other.map) {
|
|
other.map = nullptr;
|
|
}
|
|
CharStringMap(const CharStringMap &other) = delete;
|
|
~CharStringMap() {
|
|
uhash_close(map);
|
|
}
|
|
|
|
CharStringMap &operator=(CharStringMap &&other) U_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<const char *>(uhash_get(map, key)); }
|
|
void put(const char *key, const char *value, UErrorCode &errorCode) {
|
|
uhash_put(map, const_cast<char *>(key), const_cast<char *>(value), &errorCode);
|
|
}
|
|
|
|
private:
|
|
UHashtable *map;
|
|
};
|
|
|
|
U_NAMESPACE_END
|
|
|
|
#endif // __CHARSTRMAP_H__
|