Loading...
Searching...
No Matches
reference_flat_multimap.h
Go to the documentation of this file.
/******************************************************************************
The MIT License(MIT)
Embedded Template Library.
https://github.com/ETLCPP/etl
https://www.etlcpp.com
Copyright(c) 2017 John Wellbelove
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files(the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
******************************************************************************/
#ifndef ETL_REFERENCE_FLAT_MULTIMAP_INCLUDED
#define ETL_REFERENCE_FLAT_MULTIMAP_INCLUDED
#include "platform.h"
#include "debug_count.h"
#include "error_handler.h"
#include "exception.h"
#include "iterator.h"
#include "nth_type.h"
#include "type_traits.h"
#include "vector.h"
#include "private/comparator_is_transparent.h"
#include <stddef.h>
namespace etl
{
//***************************************************************************
//***************************************************************************
class flat_multimap_exception : public exception
{
public:
flat_multimap_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
: exception(reason_, file_name_, line_number_)
{
}
};
//***************************************************************************
//***************************************************************************
class flat_multimap_full : public flat_multimap_exception
{
public:
flat_multimap_full(string_type file_name_, numeric_type line_number_)
: flat_multimap_exception(ETL_ERROR_TEXT("flat_multimap:full", ETL_REFERENCE_FLAT_MULTIMAP_FILE_ID"A"), file_name_, line_number_)
{
}
};
//***************************************************************************
//***************************************************************************
template <typename TKey, typename TMapped, typename TKeyCompare = etl::less<TKey> >
class ireference_flat_multimap
{
public:
typedef ETL_OR_STD::pair<const TKey, TMapped> value_type;
protected:
typedef etl::ivector<value_type*> lookup_t;
public:
typedef TKey key_type;
typedef TMapped mapped_type;
typedef TKeyCompare key_compare;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef value_type* pointer;
typedef const value_type* const_pointer;
typedef size_t size_type;
//*************************************************************************
class iterator : public etl::iterator<ETL_OR_STD::bidirectional_iterator_tag, value_type>
{
public:
friend class ireference_flat_multimap;
friend class const_iterator;
iterator() {}
iterator(typename lookup_t::iterator ilookup_)
: ilookup(ilookup_)
{
}
iterator(const iterator& other)
: ilookup(other.ilookup)
{
}
iterator& operator=(const iterator& other)
{
ilookup = other.ilookup;
return *this;
}
iterator& operator++()
{
++ilookup;
return *this;
}
iterator operator++(int)
{
iterator temp(*this);
++ilookup;
return temp;
}
iterator& operator--()
{
--ilookup;
return *this;
}
iterator operator--(int)
{
iterator temp(*this);
--ilookup;
return temp;
}
reference operator*() const
{
return *(*ilookup);
}
pointer operator&() const
{
return etl::addressof(*(*ilookup));
}
pointer operator->() const
{
return etl::addressof(*(*ilookup));
}
friend bool operator==(const iterator& lhs, const iterator& rhs)
{
return lhs.ilookup == rhs.ilookup;
}
friend bool operator!=(const iterator& lhs, const iterator& rhs)
{
return !(lhs == rhs);
}
private:
typename lookup_t::iterator ilookup;
};
//*************************************************************************
class const_iterator : public etl::iterator<ETL_OR_STD::bidirectional_iterator_tag, const value_type>
{
public:
friend class ireference_flat_multimap;
const_iterator() {}
const_iterator(typename lookup_t::const_iterator ilookup_)
: ilookup(ilookup_)
{
}
const_iterator(const typename ireference_flat_multimap::iterator& other)
: ilookup(other.ilookup)
{
}
const_iterator(const const_iterator& other)
: ilookup(other.ilookup)
{
}
const_iterator& operator=(const iterator& other)
{
ilookup = other.ilookup;
return *this;
}
const_iterator& operator=(const const_iterator& other)
{
ilookup = other.ilookup;
return *this;
}
const_iterator& operator++()
{
++ilookup;
return *this;
}
const_iterator operator++(int)
{
const_iterator temp(*this);
++ilookup;
return temp;
}
const_iterator& operator--()
{
--ilookup;
return *this;
}
const_iterator operator--(int)
{
const_iterator temp(*this);
--ilookup;
return temp;
}
const_reference operator*() const
{
return *(*ilookup);
}
const_pointer operator&() const
{
return etl::addressof(*(*ilookup));
}
const_pointer operator->() const
{
return etl::addressof(*(*ilookup));
}
friend bool operator==(const const_iterator& lhs, const const_iterator& rhs)
{
return lhs.ilookup == rhs.ilookup;
}
friend bool operator!=(const const_iterator& lhs, const const_iterator& rhs)
{
return !(lhs == rhs);
}
private:
typename lookup_t::const_iterator ilookup;
};
typedef ETL_OR_STD::reverse_iterator<iterator> reverse_iterator;
typedef ETL_OR_STD::reverse_iterator<const_iterator> const_reverse_iterator;
typedef typename etl::iterator_traits<iterator>::difference_type difference_type;
protected:
typedef const TKey& key_parameter_t;
private:
//*********************************************************************
//*********************************************************************
class Compare
{
public:
bool operator()(const value_type& element, key_type key) const
{
return comp(element.first, key);
}
bool operator()(key_type key, const value_type& element) const
{
return comp(key, element.first);
}
#if ETL_USING_CPP11
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
bool operator()(const value_type& element, const K& key) const
{
return comp(element.first, key);
}
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
bool operator()(const K& key, const value_type& element) const
{
return comp(key, element.first);
}
#endif
key_compare comp;
};
public:
//*********************************************************************
//*********************************************************************
iterator begin()
{
return iterator(lookup.begin());
}
//*********************************************************************
//*********************************************************************
const_iterator begin() const
{
return const_iterator(lookup.begin());
}
//*********************************************************************
//*********************************************************************
iterator end()
{
return iterator(lookup.end());
}
//*********************************************************************
//*********************************************************************
const_iterator end() const
{
return const_iterator(lookup.end());
}
//*********************************************************************
//*********************************************************************
const_iterator cbegin() const
{
return const_iterator(lookup.cbegin());
}
//*********************************************************************
//*********************************************************************
const_iterator cend() const
{
return const_iterator(lookup.cend());
}
//*********************************************************************
//*********************************************************************
reverse_iterator rbegin()
{
return reverse_iterator(lookup.rbegin());
}
//*********************************************************************
//*********************************************************************
const_reverse_iterator rbegin() const
{
return const_reverse_iterator(lookup.rbegin());
}
//*********************************************************************
//*********************************************************************
reverse_iterator rend()
{
return reverse_iterator(lookup.rend());
}
//*********************************************************************
//*********************************************************************
const_reverse_iterator rend() const
{
return const_reverse_iterator(lookup.rend());
}
//*********************************************************************
//*********************************************************************
const_reverse_iterator crbegin() const
{
return const_reverse_iterator(lookup.crbegin());
}
//*********************************************************************
//*********************************************************************
const_reverse_iterator crend() const
{
return const_reverse_iterator(lookup.crend());
}
//*********************************************************************
//*********************************************************************
template <typename TIterator>
void assign(TIterator first, TIterator last)
{
#if ETL_IS_DEBUG_BUILD
difference_type d = etl::distance(first, last);
ETL_ASSERT(d <= difference_type(capacity()), ETL_ERROR(flat_multimap_full));
#endif
clear();
while (first != last)
{
insert(*first);
++first;
}
}
//*********************************************************************
//*********************************************************************
ETL_OR_STD::pair<iterator, bool> insert(value_type& value)
{
ETL_ASSERT(!lookup.full(), ETL_ERROR(flat_multimap_full));
ETL_OR_STD::pair<iterator, bool> result(end(), false);
iterator i_element = upper_bound(value.first);
return insert_at(i_element, value);
}
//*********************************************************************
//*********************************************************************
ETL_OR_STD::pair<iterator, bool> emplace(value_type& value)
{
return insert(value);
}
//*********************************************************************
//*********************************************************************
iterator insert(const_iterator /*position*/, const value_type& value)
{
return insert(value).first;
}
//*********************************************************************
//*********************************************************************
template <class TIterator>
void insert(TIterator first, TIterator last)
{
while (first != last)
{
insert(*first);
++first;
}
}
//*********************************************************************
//*********************************************************************
size_t erase(key_parameter_t key)
{
ETL_OR_STD::pair<iterator, iterator> range = equal_range(key);
if (range.first == end())
{
return 0;
}
else
{
size_t d = static_cast<size_t>(etl::distance(range.first, range.second));
erase(range.first, range.second);
return d;
}
}
#if ETL_USING_CPP11
//*********************************************************************
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
size_t erase(K&& key)
{
ETL_OR_STD::pair<iterator, iterator> range = equal_range(key);
if (range.first == end())
{
return 0U;
}
else
{
size_t d = static_cast<size_t>(etl::distance(range.first, range.second));
erase(range.first, range.second);
return d;
}
}
#endif
//*********************************************************************
//*********************************************************************
iterator erase(iterator i_element)
{
return lookup.erase(i_element.ilookup);
}
//*********************************************************************
//*********************************************************************
iterator erase(const_iterator i_element)
{
return lookup.erase(i_element.ilookup);
}
//*********************************************************************
//*********************************************************************
iterator erase(const_iterator first, const_iterator last)
{
return lookup.erase(first.ilookup, last.ilookup);
}
//*************************************************************************
//*************************************************************************
void clear()
{
lookup.clear();
}
//*********************************************************************
//*********************************************************************
iterator find(key_parameter_t key)
{
iterator itr = lower_bound(key);
if (itr != end())
{
if (!key_compare()(itr->first, key) && !key_compare()(key, itr->first))
{
return itr;
}
else
{
return end();
}
}
return end();
}
#if ETL_USING_CPP11
//*********************************************************************
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
iterator find(const K& key)
{
iterator itr = lower_bound(key);
if (itr != end())
{
if (!key_compare()(itr->first, key) && !key_compare()(key, itr->first))
{
return itr;
}
else
{
return end();
}
}
return end();
}
#endif
//*********************************************************************
//*********************************************************************
const_iterator find(key_parameter_t key) const
{
const_iterator itr = lower_bound(key);
if (itr != end())
{
if (!key_compare()(itr->first, key) && !key_compare()(key, itr->first))
{
return itr;
}
else
{
return end();
}
}
return end();
}
#if ETL_USING_CPP11
//*********************************************************************
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
const_iterator find(const K& key) const
{
const_iterator itr = lower_bound(key);
if (itr != end())
{
if (!key_compare()(itr->first, key) && !key_compare()(key, itr->first))
{
return itr;
}
else
{
return end();
}
}
return end();
}
#endif
//*********************************************************************
//*********************************************************************
size_t count(key_parameter_t key) const
{
ETL_OR_STD::pair<const_iterator, const_iterator> range = equal_range(key);
return static_cast<size_t>(etl::distance(range.first, range.second));
}
#if ETL_USING_CPP11
//*********************************************************************
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
size_t count(const K& key) const
{
ETL_OR_STD::pair<const_iterator, const_iterator> range = equal_range(key);
return static_cast<size_t>(etl::distance(range.first, range.second));
}
#endif
//*********************************************************************
//*********************************************************************
iterator lower_bound(key_parameter_t key)
{
return etl::lower_bound(begin(), end(), key, compare);
}
#if ETL_USING_CPP11
//*********************************************************************
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
iterator lower_bound(const K& key)
{
return etl::lower_bound(begin(), end(), key, compare);
}
#endif
//*********************************************************************
//*********************************************************************
const_iterator lower_bound(key_parameter_t key) const
{
return etl::lower_bound(cbegin(), cend(), key, compare);
}
#if ETL_USING_CPP11
//*********************************************************************
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
const_iterator lower_bound(const K& key) const
{
return etl::lower_bound(cbegin(), cend(), key, compare);
}
#endif
//*********************************************************************
//*********************************************************************
iterator upper_bound(key_parameter_t key)
{
return etl::upper_bound(begin(), end(), key, compare);
}
#if ETL_USING_CPP11
//*********************************************************************
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
iterator upper_bound(const K& key)
{
return etl::upper_bound(begin(), end(), key, compare);
}
#endif
//*********************************************************************
//*********************************************************************
const_iterator upper_bound(key_parameter_t key) const
{
return etl::upper_bound(begin(), end(), key, compare);
}
#if ETL_USING_CPP11
//*********************************************************************
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
const_iterator upper_bound(const K& key) const
{
return etl::upper_bound(begin(), end(), key, compare);
}
#endif
//*********************************************************************
//*********************************************************************
ETL_OR_STD::pair<iterator, iterator> equal_range(key_parameter_t key)
{
iterator i_lower = etl::lower_bound(begin(), end(), key, compare);
return ETL_OR_STD::make_pair(i_lower, etl::upper_bound(i_lower, end(), key, compare));
}
#if ETL_USING_CPP11
//*********************************************************************
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
ETL_OR_STD::pair<iterator, iterator> equal_range(const K& key)
{
iterator i_lower = etl::lower_bound(begin(), end(), key, compare);
return ETL_OR_STD::make_pair(i_lower, etl::upper_bound(i_lower, end(), key, compare));
}
#endif
//*********************************************************************
//*********************************************************************
ETL_OR_STD::pair<const_iterator, const_iterator> equal_range(key_parameter_t key) const
{
const_iterator i_lower = etl::lower_bound(cbegin(), cend(), key, compare);
return ETL_OR_STD::make_pair(i_lower, etl::upper_bound(i_lower, cend(), key, compare));
}
#if ETL_USING_CPP11
//*********************************************************************
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
ETL_OR_STD::pair<const_iterator, const_iterator> equal_range(const K& key) const
{
const_iterator i_lower = etl::lower_bound(cbegin(), cend(), key, compare);
return ETL_OR_STD::make_pair(i_lower, etl::upper_bound(i_lower, cend(), key, compare));
}
#endif
//*************************************************************************
//*************************************************************************
bool contains(const TKey& key) const
{
return find(key) != end();
}
#if ETL_USING_CPP11
//*************************************************************************
template <typename K, typename KC = TKeyCompare, etl::enable_if_t<comparator_is_transparent<KC>::value, int> = 0>
bool contains(const K& k) const
{
return find(k) != end();
}
#endif
//*************************************************************************
//*************************************************************************
size_type size() const
{
return lookup.size();
}
//*************************************************************************
//*************************************************************************
bool empty() const
{
return lookup.empty();
}
//*************************************************************************
//*************************************************************************
bool full() const
{
return lookup.full();
}
//*************************************************************************
//*************************************************************************
size_type capacity() const
{
return lookup.capacity();
}
//*************************************************************************
//*************************************************************************
size_type max_size() const
{
return lookup.max_size();
}
//*************************************************************************
//*************************************************************************
size_t available() const
{
return lookup.available();
}
protected:
//*********************************************************************
//*********************************************************************
ireference_flat_multimap(lookup_t& lookup_)
: lookup(lookup_)
{
}
//*********************************************************************
//*********************************************************************
ETL_OR_STD::pair<iterator, bool> insert_at(iterator i_element, value_type& value)
{
ETL_OR_STD::pair<iterator, bool> result(end(), false);
if (i_element == end())
{
// At the end.
lookup.push_back(&value);
result.first = --end();
result.second = true;
}
else
{
// Not at the end.
lookup.insert(i_element.ilookup, &value);
result.first = i_element;
result.second = true;
}
return result;
}
private:
// Disable copy construction and assignment.
ireference_flat_multimap(const ireference_flat_multimap&);
ireference_flat_multimap& operator=(const ireference_flat_multimap&);
lookup_t& lookup;
Compare compare;
//*************************************************************************
//*************************************************************************
#if defined(ETL_POLYMORPHIC_REFERENCE_FLAT_MULTIMAP) || defined(ETL_POLYMORPHIC_CONTAINERS)
public:
virtual ~ireference_flat_multimap() {}
#else
protected:
~ireference_flat_multimap() {}
#endif
};
//***************************************************************************
//***************************************************************************
template <typename TKey, typename TMapped, typename TKeyCompare>
bool operator==(const etl::ireference_flat_multimap<TKey, TMapped, TKeyCompare>& lhs,
const etl::ireference_flat_multimap<TKey, TMapped, TKeyCompare>& rhs)
{
return (lhs.size() == rhs.size()) && etl::equal(lhs.begin(), lhs.end(), rhs.begin());
}
//***************************************************************************
//***************************************************************************
template <typename TKey, typename TMapped, typename TKeyCompare>
bool operator!=(const etl::ireference_flat_multimap<TKey, TMapped, TKeyCompare>& lhs,
const etl::ireference_flat_multimap<TKey, TMapped, TKeyCompare>& rhs)
{
return !(lhs == rhs);
}
//***************************************************************************
//***************************************************************************
template <typename TKey, typename TValue, const size_t MAX_SIZE_, typename TCompare = etl::less<TKey> >
class reference_flat_multimap : public ireference_flat_multimap<TKey, TValue, TCompare>
{
public:
static ETL_CONSTANT size_t MAX_SIZE = MAX_SIZE_;
//*************************************************************************
//*************************************************************************
reference_flat_multimap()
: ireference_flat_multimap<TKey, TValue, TCompare>(lookup)
{
}
//*************************************************************************
//*************************************************************************
reference_flat_multimap(const reference_flat_multimap& other)
: ireference_flat_multimap<TKey, TValue, TCompare>(lookup)
{
ireference_flat_multimap<TKey, TValue, TCompare>::assign(other.cbegin(), other.cend());
}
//*************************************************************************
//*************************************************************************
template <typename TIterator>
reference_flat_multimap(TIterator first, TIterator last)
: ireference_flat_multimap<TKey, TValue, TCompare>(lookup)
{
ireference_flat_multimap<TKey, TValue, TCompare>::assign(first, last);
}
//*************************************************************************
//*************************************************************************
~reference_flat_multimap()
{
ireference_flat_multimap<TKey, TValue, TCompare>::clear();
}
private:
typedef typename ireference_flat_multimap<TKey, TValue, TCompare>::value_type node_t;
// The vector that stores pointers to the nodes.
etl::vector<node_t*, MAX_SIZE> lookup;
};
template <typename TKey, typename TValue, const size_t MAX_SIZE_, typename TCompare>
ETL_CONSTANT size_t reference_flat_multimap< TKey, TValue, MAX_SIZE_, TCompare>::MAX_SIZE;
//*************************************************************************
//*************************************************************************
#if ETL_USING_CPP17 && ETL_HAS_INITIALIZER_LIST
template <typename... TPairs>
reference_flat_multimap(TPairs...) -> reference_flat_multimap< typename etl::nth_type_t<0, TPairs...>::first_type,
typename etl::nth_type_t<0, TPairs...>::second_type, sizeof...(TPairs)>;
#endif
//*************************************************************************
//*************************************************************************
#if ETL_USING_CPP11 && ETL_HAS_INITIALIZER_LIST
template <typename TKey, typename TMapped, typename TKeyCompare = etl::less<TKey>, typename... TPairs>
constexpr auto make_reference_flat_multimap(TPairs&&... pairs) -> etl::reference_flat_multimap<TKey, TMapped, sizeof...(TPairs), TKeyCompare>
{
return {etl::forward<TPairs>(pairs)...};
}
#endif
} // namespace etl
#endif
etl::flat_multimap_full
Definition reference_flat_multimap.h:68
etl::ireference_flat_multimap::iterator
Definition reference_flat_multimap.h:107
etl::ireference_flat_multimap
Definition reference_flat_multimap.h:85
etl::ireference_flat_multimap::crbegin
const_reverse_iterator crbegin() const
Definition reference_flat_multimap.h:429
etl::ireference_flat_multimap::erase
iterator erase(const_iterator i_element)
Definition reference_flat_multimap.h:584
etl::ireference_flat_multimap::count
size_t count(key_parameter_t key) const
Definition reference_flat_multimap.h:708
etl::ireference_flat_multimap::equal_range
ETL_OR_STD::pair< iterator, iterator > equal_range(key_parameter_t key)
Definition reference_flat_multimap.h:807
etl::ireference_flat_multimap::lower_bound
iterator lower_bound(key_parameter_t key)
Definition reference_flat_multimap.h:731
etl::ireference_flat_multimap::emplace
ETL_OR_STD::pair< iterator, bool > emplace(value_type &value)
Definition reference_flat_multimap.h:495
etl::ireference_flat_multimap::find
const_iterator find(key_parameter_t key) const
Definition reference_flat_multimap.h:661
etl::ireference_flat_multimap::rbegin
reverse_iterator rbegin()
Definition reference_flat_multimap.h:386
etl::ireference_flat_multimap::crend
const_reverse_iterator crend() const
Definition reference_flat_multimap.h:440
etl::ireference_flat_multimap::upper_bound
iterator upper_bound(key_parameter_t key)
Definition reference_flat_multimap.h:769
etl::ireference_flat_multimap::empty
bool empty() const
Definition reference_flat_multimap.h:878
etl::ireference_flat_multimap::rbegin
const_reverse_iterator rbegin() const
Definition reference_flat_multimap.h:397
etl::ireference_flat_multimap::cbegin
const_iterator cbegin() const
Definition reference_flat_multimap.h:367
etl::ireference_flat_multimap::size
size_type size() const
Definition reference_flat_multimap.h:869
etl::ireference_flat_multimap::insert_at
ETL_OR_STD::pair< iterator, bool > insert_at(iterator i_element, value_type &value)
Definition reference_flat_multimap.h:934
etl::ireference_flat_multimap::available
size_t available() const
Definition reference_flat_multimap.h:914
etl::ireference_flat_multimap::erase
iterator erase(const_iterator first, const_iterator last)
Definition reference_flat_multimap.h:596
etl::ireference_flat_multimap::insert
iterator insert(const_iterator, const value_type &value)
Definition reference_flat_multimap.h:507
etl::ireference_flat_multimap::full
bool full() const
Definition reference_flat_multimap.h:887
etl::ireference_flat_multimap::erase
size_t erase(key_parameter_t key)
Definition reference_flat_multimap.h:535
etl::ireference_flat_multimap::contains
bool contains(const TKey &key) const
Check if the map contains the key.
Definition reference_flat_multimap.h:851
etl::ireference_flat_multimap::~ireference_flat_multimap
~ireference_flat_multimap()
Destructor.
Definition reference_flat_multimap.h:978
etl::ireference_flat_multimap::end
const_iterator end() const
Definition reference_flat_multimap.h:357
etl::ireference_flat_multimap::upper_bound
const_iterator upper_bound(key_parameter_t key) const
Definition reference_flat_multimap.h:788
etl::ireference_flat_multimap::rend
const_reverse_iterator rend() const
Definition reference_flat_multimap.h:418
etl::ireference_flat_multimap::begin
iterator begin()
Definition reference_flat_multimap.h:329
etl::ireference_flat_multimap::insert
ETL_OR_STD::pair< iterator, bool > insert(value_type &value)
Definition reference_flat_multimap.h:477
etl::ireference_flat_multimap::end
iterator end()
Definition reference_flat_multimap.h:348
etl::ireference_flat_multimap::find
iterator find(key_parameter_t key)
Definition reference_flat_multimap.h:614
etl::ireference_flat_multimap::cend
const_iterator cend() const
Definition reference_flat_multimap.h:376
etl::ireference_flat_multimap::max_size
size_type max_size() const
Definition reference_flat_multimap.h:905
etl::ireference_flat_multimap::clear
void clear()
Clears the reference_flat_multimap.
Definition reference_flat_multimap.h:604
etl::ireference_flat_multimap::equal_range
ETL_OR_STD::pair< const_iterator, const_iterator > equal_range(key_parameter_t key) const
Definition reference_flat_multimap.h:830
etl::ireference_flat_multimap::insert
void insert(TIterator first, TIterator last)
Definition reference_flat_multimap.h:521
etl::ireference_flat_multimap::ireference_flat_multimap
ireference_flat_multimap(lookup_t &lookup_)
Constructor.
Definition reference_flat_multimap.h:924
etl::ireference_flat_multimap::assign
void assign(TIterator first, TIterator last)
Definition reference_flat_multimap.h:455
etl::ireference_flat_multimap::capacity
size_type capacity() const
Definition reference_flat_multimap.h:896
etl::ireference_flat_multimap::erase
iterator erase(iterator i_element)
Definition reference_flat_multimap.h:575
etl::ireference_flat_multimap::rend
reverse_iterator rend()
Definition reference_flat_multimap.h:407
etl::ireference_flat_multimap::lower_bound
const_iterator lower_bound(key_parameter_t key) const
Definition reference_flat_multimap.h:750
etl::ireference_flat_multimap::begin
const_iterator begin() const
Definition reference_flat_multimap.h:339
etl::ivector
Definition vector.h:65
etl::reference_flat_multimap
Definition reference_flat_multimap.h:1020
etl::reference_flat_multimap::~reference_flat_multimap
~reference_flat_multimap()
Destructor.
Definition reference_flat_multimap.h:1058
etl::reference_flat_multimap::reference_flat_multimap
reference_flat_multimap()
Constructor.
Definition reference_flat_multimap.h:1028
etl::reference_flat_multimap::reference_flat_multimap
reference_flat_multimap(const reference_flat_multimap &other)
Copy constructor.
Definition reference_flat_multimap.h:1036
etl::reference_flat_multimap::reference_flat_multimap
reference_flat_multimap(TIterator first, TIterator last)
Definition reference_flat_multimap.h:1049
comparator_is_transparent.h
debug_count.h
error_handler.h
exception.h
etl::const_iterator
ETL_ASSERT
#define ETL_ASSERT(b, e)
Definition error_handler.h:511
etl::exception::exception
ETL_EXCEPTION_CONSTEXPR exception(string_type reason_, string_type, numeric_type)
Constructor.
Definition exception.h:81
etl::addressof
ETL_CONSTEXPR17 etl::enable_if<!etl::is_same< T, etl::nullptr_t >::value, T >::type * addressof(T &t)
Definition addressof.h:52
etl::vector
Definition vector.h:1830
iterator.h
etl
Definition absolute.h:40
etl::operator==
ETL_CONSTEXPR14 bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1078
etl::operator!=
ETL_CONSTEXPR14 bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1090
etl::end
TContainer::iterator end(TContainer &container)
Definition iterator.h:1166
platform.h
etl::compare
Definition compare.h:51
etl::value_type
etl::iterator
iterator
Definition iterator.h:482
operator==
ETL_CONSTEXPR14 bool operator==(const etl::to_arithmetic_result< T > &lhs, const etl::to_arithmetic_result< T > &rhs)
Equality test for etl::to_arithmetic_result.
Definition to_arithmetic.h:903
operator!=
ETL_CONSTEXPR14 bool operator!=(const etl::to_arithmetic_result< T > &lhs, const etl::to_arithmetic_result< T > &rhs)
Inequality test for etl::to_arithmetic_result.
Definition to_arithmetic.h:937
type_traits.h
vector.h