132 throw std::bad_alloc();
139 auto strBuffer =
const_cast<char*
>(newItem->getKeyData());
140 memcpy(strBuffer, key.
data(), key.
size());
163 return reinterpret_cast<const char*
>(
this + 1);
170 auto ptr =
reinterpret_cast<char*
>(&v) -
171 (reinterpret_cast<char*>(&ePtr->
second) -
172 reinterpret_cast<char*
>(ePtr));
198 template<
typename T,
bool CASE_SENSITIVE = true>
231 int bucket = this->
findKey(key);
232 if (bucket == -1)
return end();
236 int bucket = this->
findKey(key);
237 if (bucket == -1)
return end();
254 return (
find(key) ==
end()) ? 0 : 1;
281 if (this->
empty())
return;
286 for (
unsigned i = 0; i != this->
numBuckets; ++i) {
336 if (i ==
end())
return false;
357 if (
advance) advancePastEmptyBuckets();
376 advancePastEmptyBuckets();
389 void advancePastEmptyBuckets() {
416 template<
typename T,
bool C>
418 template<
typename T,
bool C>
420 template<
typename T,
bool C>
422 template<
typename T,
bool C>
StringMapEntryBase ** ptr
static StringMapEntry * create(string_ref key, T v)
const char * getKeyData() const
T lookup(string_ref key) const
std::unique_ptr< openmsx::PolymorphicLoaderBase< Archive > > mapped_type
string_ref getKey() const
StringMap< T, C >::iterator begin(StringMap< T, C > &m)
const value_type * operator->() const
StringMap(unsigned initialSize=0)
unsigned * getHashTable() const
const_iterator find(string_ref key) const
This class implements a subset of the proposal for std::string_ref (proposed for the next c++ standar...
StringMapIterator< T > iterator
bool operator==(const StringMapConstIterator &rhs) const
StringMapConstIterator operator++(int)
StringMapImpl(unsigned itemSize, unsigned initSize)
StringMap< T, C >::iterator end(StringMap< T, C > &m)
static StringMapEntryBase * getTombstoneVal()
const char * data() const
void advance(octet_iterator &it, distance_type n, octet_iterator end)
bool insert(value_type *keyValue)
value_type * operator->() const
const T & getValue() const
unsigned lookupBucketFor(string_ref key)
StringMapEntryBase(unsigned len)
Non-templatized base class of StringMap.
const_iterator end() const
value_type & getOrCreateValue(string_ref key, T val=T())
const value_type & operator*() const
static StringMapEntry & GetStringMapEntryFromValue(T &v)
StringMapImpl2(unsigned itemSize, unsigned initSize)
static const StringMapEntry & GetStringMapEntryFromValue(const T &v)
static StringMapEntry & GetStringMapEntryFromKeyData(const char *keyData)
StringMapConstIterator(StringMapEntryBase **bucket, bool advance=false)
T & operator[](string_ref key)
unsigned getKeyLength() const
int findKey(string_ref key) const
size_type count(string_ref key) const
const_iterator begin() const
void setValue(const T &v)
iterator find(string_ref key)
StringMapIterator(StringMapEntryBase **bucket, bool advance=false)
void removeKey(StringMapEntryBase *V)
bool erase(string_ref key)
StringMapEntryBase ** theTable
value_type & operator*() const
bool operator!=(const StringMapConstIterator &rhs) const
StringMapConstIterator< T > const_iterator
unsigned getNumBuckets() const
StringMapConstIterator & operator++()