Loading...
Searching...
No Matches
reference_flat_multiset.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_MULTISET_INCLUDED
#define ETL_REFERENCE_FLAT_MULTISET_INCLUDED
#include "platform.h"
#include "algorithm.h"
#include "error_handler.h"
#include "exception.h"
#include "functional.h"
#include "iterator.h"
#include "nth_type.h"
#include "pool.h"
#include "type_traits.h"
#include "utility.h"
#include "vector.h"
#include "private/comparator_is_transparent.h"
#include <stddef.h>
namespace etl
{
//***************************************************************************
//***************************************************************************
class flat_multiset_exception : public exception
{
public:
flat_multiset_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
: exception(reason_, file_name_, line_number_)
{
}
};
//***************************************************************************
//***************************************************************************
class flat_multiset_full : public flat_multiset_exception
{
public:
flat_multiset_full(string_type file_name_, numeric_type line_number_)
: flat_multiset_exception(ETL_ERROR_TEXT("flat_multiset:full", ETL_REFERENCE_FLAT_MULTISET_FILE_ID"A"), file_name_, line_number_)
{
}
};
//***************************************************************************
//***************************************************************************
class flat_multiset_iterator : public flat_multiset_exception
{
public:
flat_multiset_iterator(string_type file_name_, numeric_type line_number_)
: flat_multiset_exception(ETL_ERROR_TEXT("flat_multiset:iterator", ETL_REFERENCE_FLAT_MULTISET_FILE_ID"B"), file_name_, line_number_)
{
}
};
//***************************************************************************
//***************************************************************************
template <typename T, typename TKeyCompare = etl::less<T> >
class ireference_flat_multiset
{
public:
typedef T key_type;
typedef T value_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;
protected:
typedef etl::ivector<value_type*> lookup_t;
public:
//*************************************************************************
class iterator : public etl::iterator<ETL_OR_STD::bidirectional_iterator_tag, value_type>
{
public:
friend class ireference_flat_multiset;
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_multiset;
const_iterator() {}
const_iterator(typename lookup_t::const_iterator ilookup_)
: ilookup(ilookup_)
{
}
const_iterator(const typename ireference_flat_multiset::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;
};
protected:
typedef typename etl::parameter_type<T>::type parameter_t;
public:
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;
//*********************************************************************
//*********************************************************************
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_multiset_full));
#endif
clear();
while (first != last)
{
insert(*first);
++first;
}
}
//*********************************************************************
//*********************************************************************
ETL_OR_STD::pair<iterator, bool> insert(value_type& value)
{
ETL_OR_STD::pair<iterator, bool> result(end(), false);
ETL_ASSERT(!lookup.full(), ETL_ERROR(flat_multiset_full));
iterator i_element = etl::upper_bound(begin(), end(), value, compare);
if (i_element == end())
{
// At the end. Doesn't exist.
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;
}
//*********************************************************************
//*********************************************************************
ETL_OR_STD::pair<iterator, bool> emplace(value_type& value)
{
return insert(value);
}
//*********************************************************************
//*********************************************************************
iterator insert(const_iterator /*position*/, 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(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(etl::forward<K>(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;
}
}
#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(parameter_t key)
{
iterator itr = etl::lower_bound(begin(), end(), key, compare);
if (itr != end())
{
if (!key_compare()(*itr, key) && !key_compare()(key, *itr))
{
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 = etl::lower_bound(begin(), end(), key, compare);
if (itr != end())
{
if (!key_compare()(*itr, key) && !key_compare()(key, *itr))
{
return itr;
}
else
{
return end();
}
}
return end();
}
#endif
//*********************************************************************
//*********************************************************************
const_iterator find(parameter_t key) const
{
const_iterator itr = etl::lower_bound(begin(), end(), key, compare);
if (itr != end())
{
if (!key_compare()(*itr, key) && !key_compare()(key, *itr))
{
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 = etl::lower_bound(begin(), end(), key, compare);
if (itr != end())
{
if (!key_compare()(*itr, key) && !key_compare()(key, *itr))
{
return itr;
}
else
{
return end();
}
}
return end();
}
#endif
//*********************************************************************
//*********************************************************************
size_t count(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(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(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(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(parameter_t key) const
{
return etl::upper_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 upper_bound(const K& key) const
{
return etl::upper_bound(cbegin(), cend(), key, compare);
}
#endif
//*********************************************************************
//*********************************************************************
ETL_OR_STD::pair<iterator, iterator> equal_range(parameter_t key)
{
return etl::equal_range(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>
ETL_OR_STD::pair<iterator, iterator> equal_range(const K& key)
{
return etl::equal_range(begin(), end(), key, compare);
}
#endif
//*************************************************************************
//*************************************************************************
bool contains(parameter_t 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
//*********************************************************************
//*********************************************************************
ETL_OR_STD::pair<const_iterator, const_iterator> equal_range(parameter_t key) const
{
return etl::equal_range(begin(), end(), key, compare);
}
//*************************************************************************
//*************************************************************************
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_multiset(lookup_t& lookup_)
: lookup(lookup_)
{
}
//*********************************************************************
//*********************************************************************
ETL_OR_STD::pair<iterator, bool> insert_at(iterator i_element, reference value)
{
ETL_OR_STD::pair<iterator, bool> result(end(), false);
if (i_element == end())
{
// At the end.
ETL_ASSERT(!lookup.full(), ETL_ERROR(flat_multiset_full));
lookup.push_back(&value);
result.first = --end();
result.second = true;
}
else
{
// Not at the end.
result.first = i_element;
// A new one.
ETL_ASSERT(!lookup.full(), ETL_ERROR(flat_multiset_full));
lookup.insert(i_element.ilookup, &value);
result.second = true;
}
return result;
}
private:
// Disable copy construction.
ireference_flat_multiset(const ireference_flat_multiset&);
ireference_flat_multiset& operator=(const ireference_flat_multiset&);
lookup_t& lookup;
TKeyCompare compare;
//*************************************************************************
//*************************************************************************
#if defined(ETL_POLYMORPHIC_REFERENCE_FLAT_MULTISET) || defined(ETL_POLYMORPHIC_CONTAINERS)
public:
virtual ~ireference_flat_multiset() {}
#else
protected:
~ireference_flat_multiset() {}
#endif
};
//***************************************************************************
//***************************************************************************
template <typename TKey, const size_t MAX_SIZE_, typename TKeyCompare = etl::less<TKey> >
class reference_flat_multiset : public ireference_flat_multiset<TKey, TKeyCompare>
{
public:
static ETL_CONSTANT size_t MAX_SIZE = MAX_SIZE_;
using typename ireference_flat_multiset<TKey, TKeyCompare>::value_type;
//*************************************************************************
//*************************************************************************
reference_flat_multiset()
: ireference_flat_multiset<TKey, TKeyCompare>(lookup)
{
}
//*************************************************************************
//*************************************************************************
reference_flat_multiset(const reference_flat_multiset& other)
: ireference_flat_multiset<TKey, TKeyCompare>(lookup)
{
ireference_flat_multiset<TKey, TKeyCompare>::assign(other.cbegin(), other.cend());
}
//*************************************************************************
//*************************************************************************
template <typename TIterator>
reference_flat_multiset(TIterator first, TIterator last)
: ireference_flat_multiset<TKey, TKeyCompare>(lookup)
{
ireference_flat_multiset<TKey, TKeyCompare>::assign(first, last);
}
//*************************************************************************
//*************************************************************************
~reference_flat_multiset()
{
ireference_flat_multiset<TKey, TKeyCompare>::clear();
}
private:
// The vector that stores pointers to the nodes.
etl::vector<value_type*, MAX_SIZE> lookup;
};
template <typename TKey, const size_t MAX_SIZE_, typename TCompare>
ETL_CONSTANT size_t reference_flat_multiset<TKey, MAX_SIZE_, TCompare>::MAX_SIZE;
//*************************************************************************
//*************************************************************************
#if ETL_USING_CPP17 && ETL_HAS_INITIALIZER_LIST
template <typename... T>
reference_flat_multiset(T...) -> reference_flat_multiset<etl::nth_type_t<0, T...>, sizeof...(T)>;
#endif
//*************************************************************************
//*************************************************************************
#if ETL_USING_CPP11 && ETL_HAS_INITIALIZER_LIST
template <typename TKey, typename TKeyCompare = etl::less<TKey>, typename... T>
constexpr auto make_reference_flat_multiset(T&&... keys) -> etl::reference_flat_multiset<TKey, sizeof...(T), TKeyCompare>
{
return {etl::forward<T>(keys)...};
}
#endif
//***************************************************************************
//***************************************************************************
template <typename T, typename TKeyCompare>
bool operator==(const etl::ireference_flat_multiset<T, TKeyCompare>& lhs, const etl::ireference_flat_multiset<T, TKeyCompare>& rhs)
{
return (lhs.size() == rhs.size()) && etl::equal(lhs.begin(), lhs.end(), rhs.begin());
}
//***************************************************************************
//***************************************************************************
template <typename T, typename TKeyCompare>
bool operator!=(const etl::ireference_flat_multiset<T, TKeyCompare>& lhs, const etl::ireference_flat_multiset<T, TKeyCompare>& rhs)
{
return !(lhs == rhs);
}
} // namespace etl
#endif
algorithm.h
etl::flat_multiset_full
Definition reference_flat_multiset.h:71
etl::ireference_flat_multiset::iterator
Definition reference_flat_multiset.h:122
etl::ireference_flat_multiset
Definition reference_flat_multiset.h:102
etl::ireference_flat_multiset::upper_bound
iterator upper_bound(parameter_t key)
Definition reference_flat_multiset.h:762
etl::ireference_flat_multiset::erase
iterator erase(const_iterator first, const_iterator last)
Definition reference_flat_multiset.h:589
etl::ireference_flat_multiset::erase
iterator erase(iterator i_element)
Definition reference_flat_multiset.h:568
etl::ireference_flat_multiset::erase
iterator erase(const_iterator i_element)
Definition reference_flat_multiset.h:577
etl::ireference_flat_multiset::count
size_t count(parameter_t key) const
Definition reference_flat_multiset.h:701
etl::ireference_flat_multiset::begin
const_iterator begin() const
Definition reference_flat_multiset.h:317
etl::ireference_flat_multiset::insert_at
ETL_OR_STD::pair< iterator, bool > insert_at(iterator i_element, reference value)
Definition reference_flat_multiset.h:910
etl::ireference_flat_multiset::begin
iterator begin()
Definition reference_flat_multiset.h:307
etl::ireference_flat_multiset::find
const_iterator find(parameter_t key) const
Definition reference_flat_multiset.h:654
etl::ireference_flat_multiset::~ireference_flat_multiset
~ireference_flat_multiset()
Destructor.
Definition reference_flat_multiset.h:959
etl::ireference_flat_multiset::upper_bound
const_iterator upper_bound(parameter_t key) const
Definition reference_flat_multiset.h:781
etl::ireference_flat_multiset::ireference_flat_multiset
ireference_flat_multiset(lookup_t &lookup_)
Constructor.
Definition reference_flat_multiset.h:900
etl::ireference_flat_multiset::equal_range
ETL_OR_STD::pair< const_iterator, const_iterator > equal_range(parameter_t key) const
Definition reference_flat_multiset.h:836
etl::ireference_flat_multiset::rbegin
reverse_iterator rbegin()
Definition reference_flat_multiset.h:364
etl::ireference_flat_multiset::erase
size_t erase(parameter_t key)
Definition reference_flat_multiset.h:528
etl::ireference_flat_multiset::empty
bool empty() const
Definition reference_flat_multiset.h:854
etl::ireference_flat_multiset::end
const_iterator end() const
Definition reference_flat_multiset.h:335
etl::ireference_flat_multiset::rend
reverse_iterator rend()
Definition reference_flat_multiset.h:385
etl::ireference_flat_multiset::insert
iterator insert(const_iterator, value_type &value)
Definition reference_flat_multiset.h:500
etl::ireference_flat_multiset::insert
ETL_OR_STD::pair< iterator, bool > insert(value_type &value)
Definition reference_flat_multiset.h:455
etl::ireference_flat_multiset::available
size_t available() const
Definition reference_flat_multiset.h:890
etl::ireference_flat_multiset::insert
void insert(TIterator first, TIterator last)
Definition reference_flat_multiset.h:514
etl::ireference_flat_multiset::find
iterator find(parameter_t key)
Definition reference_flat_multiset.h:607
etl::ireference_flat_multiset::size
size_type size() const
Definition reference_flat_multiset.h:845
etl::ireference_flat_multiset::lower_bound
const_iterator lower_bound(parameter_t key) const
Definition reference_flat_multiset.h:743
etl::ireference_flat_multiset::emplace
ETL_OR_STD::pair< iterator, bool > emplace(value_type &value)
Definition reference_flat_multiset.h:488
etl::ireference_flat_multiset::contains
bool contains(parameter_t key) const
Check if the map contains the key.
Definition reference_flat_multiset.h:817
etl::ireference_flat_multiset::full
bool full() const
Definition reference_flat_multiset.h:863
etl::ireference_flat_multiset::clear
void clear()
Clears the reference_flat_multiset.
Definition reference_flat_multiset.h:597
etl::ireference_flat_multiset::end
iterator end()
Definition reference_flat_multiset.h:326
etl::ireference_flat_multiset::rbegin
const_reverse_iterator rbegin() const
Definition reference_flat_multiset.h:375
etl::ireference_flat_multiset::lower_bound
iterator lower_bound(parameter_t key)
Definition reference_flat_multiset.h:724
etl::ireference_flat_multiset::equal_range
ETL_OR_STD::pair< iterator, iterator > equal_range(parameter_t key)
Definition reference_flat_multiset.h:800
etl::ireference_flat_multiset::capacity
size_type capacity() const
Definition reference_flat_multiset.h:872
etl::ireference_flat_multiset::crbegin
const_reverse_iterator crbegin() const
Definition reference_flat_multiset.h:407
etl::ireference_flat_multiset::crend
const_reverse_iterator crend() const
Definition reference_flat_multiset.h:418
etl::ireference_flat_multiset::cend
const_iterator cend() const
Definition reference_flat_multiset.h:354
etl::ireference_flat_multiset::rend
const_reverse_iterator rend() const
Definition reference_flat_multiset.h:396
etl::ireference_flat_multiset::max_size
size_type max_size() const
Definition reference_flat_multiset.h:881
etl::ireference_flat_multiset::assign
void assign(TIterator first, TIterator last)
Definition reference_flat_multiset.h:433
etl::ireference_flat_multiset::cbegin
const_iterator cbegin() const
Definition reference_flat_multiset.h:345
etl::ivector
Definition vector.h:65
etl::reference_flat_multiset
Definition reference_flat_multiset.h:969
etl::reference_flat_multiset::reference_flat_multiset
reference_flat_multiset(const reference_flat_multiset &other)
Copy constructor.
Definition reference_flat_multiset.h:987
etl::reference_flat_multiset::~reference_flat_multiset
~reference_flat_multiset()
Destructor.
Definition reference_flat_multiset.h:1009
etl::reference_flat_multiset::reference_flat_multiset
reference_flat_multiset()
Constructor.
Definition reference_flat_multiset.h:979
etl::reference_flat_multiset::reference_flat_multiset
reference_flat_multiset(TIterator first, TIterator last)
Definition reference_flat_multiset.h:1000
comparator_is_transparent.h
error_handler.h
exception.h
functional.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
pool.h
etl::compare
Definition compare.h:51
etl::iterator
iterator
Definition iterator.h:482
etl::parameter_type::type
etl::conditional< etl::is_fundamental< T >::value||etl::is_pointer< T >::value, T, constT & >::type type
By default fundamental and pointer types are passed by value.
Definition parameter_type.h:46
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
utility.h
vector.h