mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-01 07:46:11 +00:00
Added some new HashMap methods: lookupAndCreateIfMissing (internal only), setVal and getVal (which actually is just the old queryVal renamed for consistency)
svn-id: r25135
This commit is contained in:
parent
cd8a5f3a98
commit
12476efb58
@ -110,6 +110,7 @@ public:
|
||||
|
||||
void assign(const HM_t& map);
|
||||
int lookup(const Key &key) const;
|
||||
int lookupAndCreateIfMissing(const Key &key);
|
||||
void expand_array(uint newsize);
|
||||
|
||||
public:
|
||||
@ -164,7 +165,9 @@ public:
|
||||
|
||||
Val &operator [](const Key &key);
|
||||
const Val &operator [](const Key &key) const;
|
||||
const Val &queryVal(const Key &key) const;
|
||||
|
||||
const Val &getVal(const Key &key) const;
|
||||
void setVal(const Key &key, const Val &val);
|
||||
|
||||
void clear(bool shrinkArray = 0);
|
||||
|
||||
@ -352,13 +355,7 @@ int HashMap<Key, Val, HashFunc, EqualFunc>::lookup(const Key &key) const {
|
||||
}
|
||||
|
||||
template <class Key, class Val, class HashFunc, class EqualFunc>
|
||||
bool HashMap<Key, Val, HashFunc, EqualFunc>::contains(const Key &key) const {
|
||||
uint ctr = lookup(key);
|
||||
return (_arr[ctr] != NULL);
|
||||
}
|
||||
|
||||
template <class Key, class Val, class HashFunc, class EqualFunc>
|
||||
Val &HashMap<Key, Val, HashFunc, EqualFunc>::operator [](const Key &key) {
|
||||
int HashMap<Key, Val, HashFunc, EqualFunc>::lookupAndCreateIfMissing(const Key &key) {
|
||||
uint ctr = lookup(key);
|
||||
|
||||
if (_arr[ctr] == NULL) {
|
||||
@ -372,21 +369,42 @@ Val &HashMap<Key, Val, HashFunc, EqualFunc>::operator [](const Key &key) {
|
||||
}
|
||||
}
|
||||
|
||||
return ctr;
|
||||
}
|
||||
|
||||
|
||||
template <class Key, class Val, class HashFunc, class EqualFunc>
|
||||
bool HashMap<Key, Val, HashFunc, EqualFunc>::contains(const Key &key) const {
|
||||
uint ctr = lookup(key);
|
||||
return (_arr[ctr] != NULL);
|
||||
}
|
||||
|
||||
template <class Key, class Val, class HashFunc, class EqualFunc>
|
||||
Val &HashMap<Key, Val, HashFunc, EqualFunc>::operator [](const Key &key) {
|
||||
uint ctr = lookupAndCreateIfMissing(key);
|
||||
assert(_arr[ctr] != NULL);
|
||||
return _arr[ctr]->_value;
|
||||
}
|
||||
|
||||
template <class Key, class Val, class HashFunc, class EqualFunc>
|
||||
const Val &HashMap<Key, Val, HashFunc, EqualFunc>::operator [](const Key &key) const {
|
||||
return queryVal(key);
|
||||
return getVal(key);
|
||||
}
|
||||
|
||||
template <class Key, class Val, class HashFunc, class EqualFunc>
|
||||
const Val &HashMap<Key, Val, HashFunc, EqualFunc>::queryVal(const Key &key) const {
|
||||
const Val &HashMap<Key, Val, HashFunc, EqualFunc>::getVal(const Key &key) const {
|
||||
uint ctr = lookup(key);
|
||||
assert(_arr[ctr] != NULL);
|
||||
return _arr[ctr]->_value;
|
||||
}
|
||||
|
||||
template <class Key, class Val, class HashFunc, class EqualFunc>
|
||||
void HashMap<Key, Val, HashFunc, EqualFunc>::setVal(const Key &key, const Val &val) {
|
||||
uint ctr = lookupAndCreateIfMissing(key);
|
||||
assert(_arr[ctr] != NULL);
|
||||
_arr[ctr]->_value = val;
|
||||
}
|
||||
|
||||
template <class Key, class Val, class HashFunc, class EqualFunc>
|
||||
size_t HashMap<Key, Val, HashFunc, EqualFunc>::erase(const Key &key) {
|
||||
// This is based on code in the Wikipedia article on Hash tables.
|
||||
|
Loading…
x
Reference in New Issue
Block a user