7    template <
class Key, 
class T>
 
   22    template <
class Allocator, 
class Key, 
class T>
 
   59                _iter(
std::move(a_rhs._iter)),
 
   60                _idx(
std::move(a_rhs._idx))
 
   63                a_rhs._iter = 
nullptr;
 
   64                a_rhs._idx = a_rhs._proxy->_capacity;
 
   73                _iter = _proxy->
_data[_idx];
 
   74                while (!_iter && _idx < _proxy->
_capacity) {
 
   76                    _iter = _proxy->
_data[_idx];
 
   94                assert(_proxy == a_rhs._proxy);
 
  101                assert(_proxy == a_rhs._proxy);
 
  103                _iter = std::move(a_rhs._iter);
 
  106                _idx = std::move(a_rhs._idx);
 
  107                a_rhs._idx = a_rhs._proxy->_capacity;
 
  112                assert(_proxy == a_rhs._proxy);
 
  113                std::swap(_iter, a_rhs._iter);
 
  114                std::swap(_idx, a_rhs._idx);
 
  133                assert(_proxy == a_rhs._proxy);
 
  135                if (_idx != a_rhs._idx) {
 
  140                    return _iter == a_rhs._iter;
 
  163                        _iter = _proxy->
_data[_idx];
 
  164                    } 
while (!_iter && _idx < _proxy->
_capacity);
 
  205            _data = malloc<value_type*>(memSize);
 
  206            std::memset(
_data, 0, memSize);
 
  258        [[nodiscard]] 
bool empty() const noexcept
 
  270            for (std::uint32_t i = 0; i < 
_capacity; i++) {
 
  272                    auto elem = 
_data[i];
 
  287            auto item = 
_data[index];
 
  291                if (
key_eq(a_key, item->key)) {
 
  293                    item->val = std::forward<M>(a_obj);
 
  303            assign_value(item, std::move(a_key), std::forward<M>(a_obj));
 
  304            item->next = 
_data[index];
 
  314            auto item = 
_data[index];
 
  318                if (
key_eq(a_key, item->key)) {
 
  335            auto result = do_find(a_key);
 
  336            return result ? 
iterator(
this, result->first, result->second) : 
end();
 
  341            auto result = do_find(a_key);
 
  353        std::optional<std::pair<value_type*, std::uint32_t>> do_find(
const Key& a_key)
 const 
  356            for (
auto iter = 
_data[idx]; iter; iter = iter->
next) {
 
  357                if (
key_eq(a_key, iter->first)) {
 
  358                    return std::make_optional(std::make_pair(iter, idx));
 
Definition: NiTMapBase.h:24
 
iterator_base< value_type > iterator
Definition: NiTMapBase.h:184
 
std::uint32_t size_type
Definition: NiTMapBase.h:33
 
std::uint32_t _capacity
Definition: NiTMapBase.h:367
 
bool insert_or_assign(key_type &&a_key, M &&a_obj)
Definition: NiTMapBase.h:283
 
const_iterator cend() const
Definition: NiTMapBase.h:253
 
virtual value_type * malloc_value()=0
 
virtual std::uint32_t hash_function(key_type a_key) const
 
T mapped_type
Definition: NiTMapBase.h:31
 
iterator_base< const value_type > const_iterator
Definition: NiTMapBase.h:185
 
const_iterator find(const Key &a_key) const
Definition: NiTMapBase.h:339
 
virtual ~NiTMapBase()
Definition: NiTMapBase.h:209
 
Key key_type
Definition: NiTMapBase.h:30
 
virtual void assign_value(value_type *a_value, key_type a_key, mapped_type a_mapped)
 
virtual void clear_value(value_type *a_value)
 
const_iterator cbegin() const
Definition: NiTMapBase.h:238
 
std::uint32_t _pad0C
Definition: NiTMapBase.h:368
 
size_type size() const noexcept
Definition: NiTMapBase.h:263
 
NiTMapBase(size_type a_capacity=37)
Definition: NiTMapBase.h:198
 
value_type ** _data
Definition: NiTMapBase.h:369
 
size_type erase(const key_type &a_key)
Definition: NiTMapBase.h:310
 
AntiBloatAllocator _allocator
Definition: NiTMapBase.h:370
 
iterator begin()
Definition: NiTMapBase.h:228
 
NiTMapItem< Key, T > value_type
Definition: NiTMapBase.h:32
 
const_iterator begin() const
Definition: NiTMapBase.h:233
 
virtual bool key_eq(key_type a_lhs, key_type a_rhs) const
 
bool empty() const noexcept
Definition: NiTMapBase.h:258
 
iterator end()
Definition: NiTMapBase.h:243
 
const_iterator end() const
Definition: NiTMapBase.h:248
 
void clear()
Definition: NiTMapBase.h:268
 
iterator find(const Key &a_key)
Definition: NiTMapBase.h:333
 
virtual void free_value(value_type *a_value)=0
 
Definition: NiTMapBase.h:9
 
Key key_type
Definition: NiTMapBase.h:11
 
key_type first
Definition: NiTMapBase.h:16
 
mapped_type second
Definition: NiTMapBase.h:17
 
NiTMapItem * next
Definition: NiTMapBase.h:15
 
T mapped_type
Definition: NiTMapBase.h:12
 
Definition: AbsorbEffect.h:6
 
void free(void *a_ptr)
Definition: MemoryManager.h:183
 
Definition: NiBinaryStream.h:94
 
Definition: NiTMapBase.h:188
 
AntiBloatAllocator()
Definition: NiTMapBase.h:189
 
size_type size
Definition: NiTMapBase.h:195
 
Definition: NiTMapBase.h:37
 
reference operator*() const
Definition: NiTMapBase.h:117
 
iterator_base()
Definition: NiTMapBase.h:45
 
iterator_base(iterator_base &&a_rhs)
Definition: NiTMapBase.h:57
 
iterator_base & operator++()
Definition: NiTMapBase.h:152
 
iterator_base(NiTMapBase *a_proxy, value_type *a_iter, std::uint32_t a_idx)
Definition: NiTMapBase.h:80
 
iterator_base & operator=(iterator_base &&a_rhs)
Definition: NiTMapBase.h:99
 
iterator_base(NiTMapBase *a_proxy, std::uint32_t a_idx)
Definition: NiTMapBase.h:67
 
pointer operator->() const
Definition: NiTMapBase.h:124
 
iterator_base(const iterator_base &a_rhs)
Definition: NiTMapBase.h:51
 
bool operator!=(const iterator_base &a_rhs) const
Definition: NiTMapBase.h:146
 
U value_type
Definition: NiTMapBase.h:40
 
iterator_base & operator=(const iterator_base &a_rhs)
Definition: NiTMapBase.h:92
 
std::ptrdiff_t difference_type
Definition: NiTMapBase.h:39
 
~iterator_base()
Definition: NiTMapBase.h:89
 
iterator_base operator++(int)
Definition: NiTMapBase.h:171
 
void swap(iterator_base &a_rhs)
Definition: NiTMapBase.h:110
 
U * pointer
Definition: NiTMapBase.h:41
 
U & reference
Definition: NiTMapBase.h:42
 
std::forward_iterator_tag iterator_category
Definition: NiTMapBase.h:43
 
bool operator==(const iterator_base &a_rhs) const
Definition: NiTMapBase.h:131