14 #ifndef SIMPLEHASHMAP_H
15 #define SIMPLEHASHMAP_H
24 template<
class Key,
class Value>
33 ALWAYS_INLINE
const Value &get_data()
const {
36 ALWAYS_INLINE Value &modify_data() {
39 ALWAYS_INLINE
void set_data(
const Value &data) {
42 ALWAYS_INLINE
void set_data(Value &&data) {
43 _data = std::move(data);
62 ALWAYS_INLINE constexpr
static std::nullptr_t get_data() {
return nullptr; }
63 ALWAYS_INLINE constexpr
static std::nullptr_t modify_data() {
return nullptr; }
64 ALWAYS_INLINE
static void set_data(std::nullptr_t) {}
80 template<
class Key,
class Value,
class Compare = method_hash<Key, std::less<Key> > >
84 static const unsigned int sparsity = 2u;
98 int find(
const Key &key)
const;
99 int store(
const Key &key,
const Value &data);
100 INLINE
bool remove(
const Key &key);
104 constexpr
size_t size()
const;
106 INLINE
const Key &
get_key(
size_t n)
const;
107 INLINE
const Value &
get_data(
size_t n)
const;
109 INLINE
void set_data(
size_t n,
const Value &data);
110 INLINE
void set_data(
size_t n, Value &&data);
116 void output(std::ostream &out)
const;
117 void write(std::ostream &out)
const;
123 INLINE
size_t get_hash(
const Key &key)
const;
124 INLINE
size_t next_hash(
size_t hash)
const;
126 INLINE
int find_slot(
const Key &key)
const;
127 INLINE
bool has_slot(
size_t slot)
const;
128 INLINE
bool is_element(
size_t n,
const Key &key)
const;
129 INLINE
size_t store_new_element(
size_t n,
const Key &key,
const Value &data);
130 INLINE
int *get_index_array()
const;
133 INLINE
bool consider_expand_table();
134 void resize_table(
size_t new_size);
147 template<
class Key,
class Value,
class Compare>
This template class can be used to provide faster allocation/deallocation for many Panda objects.
This template class implements an unordered map of keys to data, implemented as a hashtable.
Value & modify_data(size_t n)
Returns a modifiable reference to the data in the nth entry of the table.
const Key & get_key(size_t n) const
Returns the key in the nth entry of the table.
int store(const Key &key, const Value &data)
Records the indicated key/data pair in the map.
bool validate() const
Returns true if the internal table appears to be consistent, false if there are some internal errors.
constexpr size_t size() const
Returns the total number of entries in the table.
void clear()
Completely empties the table.
const Value & get_data(size_t n) const
Returns the data in the nth entry of the table.
int find(const Key &key) const
Searches for the indicated key in the table.
bool remove(const Key &key)
Removes the indicated key and its associated data from the table.
bool consider_shrink_table()
Shrinks the table if the allocated storage is significantly larger than the number of elements in it.
void swap(SimpleHashMap &other)
Quickly exchanges the contents of this map and the other map.
void remove_element(size_t n)
Removes the nth entry from the table.
bool is_empty() const
Returns true if the table is empty; i.e.
void set_data(size_t n, const Value &data)
Changes the data for the nth entry of the table.
size_t get_num_entries() const
Returns the number of active entries in the table.
Value & operator[](const Key &key)
Returns a modifiable reference to the data associated with the indicated key, or creates a new data e...
Entry in the SimpleHashMap.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.