UMPIRE
Umpire: resource management and provision
umpire::util::MemoryMap< V > Class Template Reference

A fast replacement for std::map<void*,Value> for a generic Value. More...

#include </home/docs/checkouts/readthedocs.org/user_builds/umpire/checkouts/develop/src/umpire/util/MemoryMap.hpp>

Inheritance diagram for umpire::util::MemoryMap< V >:

Classes

class  Iterator_
 

Public Types

using Key = void *
 
using Value = V
 
using KeyValuePair = std::pair< Key, Value * >
 
using Iterator = Iterator_< false >
 
using ConstIterator = Iterator_< true >
 

Public Member Functions

 MemoryMap ()
 
 ~MemoryMap ()
 
 MemoryMap (const MemoryMap &)=delete
 
std::pair< Iterator, bool > insert (Key ptr, const Value &val) noexcept
 Insert Value at ptr in the map if ptr does not exist. Uses copy constructor on Value once. More...
 
template<typename P >
std::pair< Iterator, bool > insert (P &&pair) noexcept
 Insert a key-value pair if pair.first does not exist as a key. Must have first and second fields. Calls the first version. More...
 
template<typename... Args>
std::pair< Iterator, bool > insert (Key ptr, Args &&... args) noexcept
 Emplaces a new value at ptr in the map, forwarding args to the placement new constructor. More...
 
Iterator findOrBefore (Key ptr) noexcept
 Find a value at ptr. More...
 
ConstIterator findOrBefore (Key ptr) const noexcept
 
Iterator find (Key ptr) noexcept
 Find a value at ptr. More...
 
ConstIterator find (Key ptr) const noexcept
 
ConstIterator begin () const
 Iterator to first value or end() if empty. More...
 
Iterator begin ()
 
ConstIterator end () const
 Iterator to one-past-last value. More...
 
Iterator end ()
 
void erase (Key ptr)
 Remove an entry from the map. More...
 
void erase (Iterator iter)
 
void erase (ConstIterator oter)
 
void removeLast ()
 Remove/deallocate the last found entry. More...
 
void clear () noexcept
 Clear all entris from the map. More...
 
std::size_t size () const noexcept
 Return number of entries in the map. More...
 
std::size_t judyMemoryUsage () const noexcept
 
std::size_t poolMemoryUsage () const noexcept
 
template<typename... Args>
std::pair< typename MemoryMap< V >::Iterator, bool > doInsert (Key ptr, Args &&... args) noexcept
 
template<typename P >
std::pair< typename MemoryMap< V >::Iterator, bool > insert (P &&pair) noexcept
 
template<typename... Args>
std::pair< typename MemoryMap< V >::Iterator, bool > insert (Key ptr, Args &&... args) noexcept
 

Friends

template<bool Const>
class Iterator_
 

Detailed Description

template<typename V>
class umpire::util::MemoryMap< V >

A fast replacement for std::map<void*,Value> for a generic Value.

This uses FixedMallocPool and Judy arrays and provides forward const and non-const iterators.

Member Typedef Documentation

◆ Key

template<typename V >
using umpire::util::MemoryMap< V >::Key = void*

◆ Value

template<typename V >
using umpire::util::MemoryMap< V >::Value = V

◆ KeyValuePair

template<typename V >
using umpire::util::MemoryMap< V >::KeyValuePair = std::pair<Key, Value*>

◆ Iterator

template<typename V >
using umpire::util::MemoryMap< V >::Iterator = Iterator_<false>

◆ ConstIterator

template<typename V >
using umpire::util::MemoryMap< V >::ConstIterator = Iterator_<true>

Constructor & Destructor Documentation

◆ MemoryMap() [1/2]

template<typename V >
umpire::util::MemoryMap< V >::MemoryMap

◆ ~MemoryMap()

template<typename V >
umpire::util::MemoryMap< V >::~MemoryMap

◆ MemoryMap() [2/2]

template<typename V >
umpire::util::MemoryMap< V >::MemoryMap ( const MemoryMap< V > &  )
delete

Member Function Documentation

◆ insert() [1/5]

template<typename V >
std::pair< typename MemoryMap< V >::Iterator, bool > umpire::util::MemoryMap< V >::insert ( Key  ptr,
const Value val 
)
noexcept

Insert Value at ptr in the map if ptr does not exist. Uses copy constructor on Value once.

Returns
Pair of iterator position into map and boolean value whether entry was added. The iterator will be set to end() if no insertion was made.

References umpire::util::message::Debug, and UMPIRE_LOG.

Referenced by umpire::resource::FileMemoryResource::allocate(), umpire::resource::NullMemoryResource::allocate(), and umpire::util::AllocationMap::insert().

◆ insert() [2/5]

template<typename V >
template<typename P >
std::pair<Iterator, bool> umpire::util::MemoryMap< V >::insert ( P &&  pair)
noexcept

Insert a key-value pair if pair.first does not exist as a key. Must have first and second fields. Calls the first version.

Returns
See alternative version.

◆ insert() [3/5]

template<typename V >
template<typename... Args>
std::pair<Iterator, bool> umpire::util::MemoryMap< V >::insert ( Key  ptr,
Args &&...  args 
)
noexcept

Emplaces a new value at ptr in the map, forwarding args to the placement new constructor.

Returns
See alternative version.

◆ findOrBefore() [1/2]

template<typename V >
MemoryMap< V >::Iterator umpire::util::MemoryMap< V >::findOrBefore ( Key  ptr)
noexcept

Find a value at ptr.

Returns
iterator into map at ptr or preceeding position.

◆ findOrBefore() [2/2]

template<typename V >
MemoryMap< V >::ConstIterator umpire::util::MemoryMap< V >::findOrBefore ( Key  ptr) const
noexcept

◆ find() [1/2]

template<typename V >
MemoryMap< V >::Iterator umpire::util::MemoryMap< V >::find ( Key  ptr)
noexcept

Find a value at ptr.

Returns
iterator into map at ptr or end() if not found.

Referenced by umpire::resource::FileMemoryResource::deallocate(), umpire::resource::NullMemoryResource::deallocate(), and umpire::util::AllocationMap::remove().

◆ find() [2/2]

template<typename V >
MemoryMap< V >::ConstIterator umpire::util::MemoryMap< V >::find ( Key  ptr) const
noexcept

◆ begin() [1/2]

template<typename V >
MemoryMap< V >::ConstIterator umpire::util::MemoryMap< V >::begin

Iterator to first value or end() if empty.

◆ begin() [2/2]

template<typename V >
MemoryMap< V >::Iterator umpire::util::MemoryMap< V >::begin

◆ end() [1/2]

template<typename V >
MemoryMap< V >::ConstIterator umpire::util::MemoryMap< V >::end

Iterator to one-past-last value.

◆ end() [2/2]

template<typename V >
MemoryMap< V >::Iterator umpire::util::MemoryMap< V >::end

◆ erase() [1/3]

template<typename V >
void umpire::util::MemoryMap< V >::erase ( Key  ptr)

◆ erase() [2/3]

template<typename V >
void umpire::util::MemoryMap< V >::erase ( Iterator  iter)

◆ erase() [3/3]

template<typename V >
void umpire::util::MemoryMap< V >::erase ( ConstIterator  oter)

◆ removeLast()

template<typename V >
void umpire::util::MemoryMap< V >::removeLast

Remove/deallocate the last found entry.

WARNING: Use this with caution, only directly after using a method above. erase(Key) is safer, but requires an additional lookup.

References umpire::util::message::Debug, UMPIRE_ASSERT, and UMPIRE_LOG.

Referenced by umpire::util::AllocationMap::remove().

◆ clear()

template<typename V >
void umpire::util::MemoryMap< V >::clear
noexcept

Clear all entris from the map.

Referenced by umpire::util::AllocationMap::clear().

◆ size()

template<typename V >
std::size_t umpire::util::MemoryMap< V >::size
noexcept

Return number of entries in the map.

◆ judyMemoryUsage()

template<typename V >
std::size_t umpire::util::MemoryMap< V >::judyMemoryUsage
noexcept

◆ poolMemoryUsage()

template<typename V >
std::size_t umpire::util::MemoryMap< V >::poolMemoryUsage
noexcept

◆ doInsert()

template<typename V >
template<typename... Args>
std::pair<typename MemoryMap<V>::Iterator, bool> umpire::util::MemoryMap< V >::doInsert ( Key  ptr,
Args &&...  args 
)
noexcept

References UMPIRE_ASSERT.

◆ insert() [4/5]

template<typename V >
template<typename P >
std::pair<typename MemoryMap<V>::Iterator, bool> umpire::util::MemoryMap< V >::insert ( P &&  pair)
noexcept

◆ insert() [5/5]

template<typename V >
template<typename... Args>
std::pair<typename MemoryMap<V>::Iterator, bool> umpire::util::MemoryMap< V >::insert ( Key  ptr,
Args &&...  args 
)
noexcept

Friends And Related Function Documentation

◆ Iterator_

template<typename V >
template<bool Const>
friend class Iterator_
friend