16#ifndef RANS_INTERNAL_CONTAINER_ORDEREDSET_H_
17#define RANS_INTERNAL_CONTAINER_ORDEREDSET_H_
26#include <fairlogger/Logger.h>
34class OrderedSetIterator;
39template <
class source_T,
class value_T>
62 return a.first < b.first;
67 if (!container.empty()) {
69 auto value = iter->first;
70 for (++iter; iter !=
mContainer.end(); ++iter) {
71 assert(value < iter->
first);
96 throw Exception(fmt::format(
"sourceSymbol {} is not contained in data-structure", sourceSymbol));
125 swap(
a.mContainer,
b.mContainer);
126 swap(
a.mNullElement,
b.mNullElement);
146 if (iter->first != sourceSymbol) {
157 if (iter->first != sourceSymbol) {
172 using pair_type = std::remove_cv_t<std::remove_pointer_t<P>>;
179 using value_type = std::pair<const source_type, std::add_lvalue_reference_t<std::conditional_t<std::is_const_v<std::remove_pointer_t<P>>,
180 std::add_const_t<typename pair_type::second_type>,
181 typename pair_type::second_type>>>;
248 return this->mPtr -
other.mPtr;
267 return {
val.first,
val.second};
284 value_type get() {
return {mPtr->first, mPtr->second}; };
common helper classes and functions
PtrHelper(value_type value)
value_type * operator->() const
value_type * operator->()
constexpr bool operator==(const OrderedSetIterator &other) const noexcept
std::random_access_iterator_tag iterator_category
constexpr bool operator>=(const OrderedSetIterator &other) const noexcept
constexpr OrderedSetIterator operator+(difference_type i) const noexcept
constexpr OrderedSetIterator & operator-=(difference_type i) noexcept
constexpr value_type operator*() const
typename pair_type::first_type source_type
~OrderedSetIterator() noexcept=default
constexpr bool operator<=(const OrderedSetIterator &other) const noexcept
constexpr value_type operator[](difference_type i) const
constexpr OrderedSetIterator operator-(difference_type i) const noexcept
constexpr bool operator!=(const OrderedSetIterator &other) const noexcept
constexpr OrderedSetIterator & operator+=(difference_type i) noexcept
constexpr OrderedSetIterator(OrderedSetIterator &&iter) noexcept=default
constexpr OrderedSetIterator operator--(int) noexcept
constexpr OrderedSetIterator operator++(int) noexcept
std::pair< const source_type, std::add_lvalue_reference_t< std::conditional_t< std::is_const_v< std::remove_pointer_t< P > >, std::add_const_t< typename pair_type::second_type >, typename pair_type::second_type > > > value_type
constexpr OrderedSetIterator(const OrderedSetIterator &iter) noexcept=default
constexpr bool operator>(const OrderedSetIterator &other) const noexcept
constexpr OrderedSetIterator & operator=(OrderedSetIterator &&other) noexcept=default
constexpr bool operator<(const OrderedSetIterator &other) const noexcept
constexpr OrderedSetIterator() noexcept=default
std::ptrdiff_t difference_type
constexpr difference_type operator-(const OrderedSetIterator &other) const noexcept
constexpr pointer operator->() const
constexpr OrderedSetIterator & operator=(const OrderedSetIterator &other) noexcept=default
constexpr OrderedSetIterator & operator--() noexcept
OrderedSet(container_type container, value_type nullElement, OrderedSetState state=OrderedSetState::unordered)
bool empty() const noexcept
const_iterator cbegin() const noexcept
container_type release() &&noexcept
const value_type * const_pointer
std::vector< tuple_type > container_type
const_iterator end() const noexcept
const_iterator begin() const noexcept
container_type mContainer
decltype(auto) findImpl(source_type sourceSymbol)
const value_type & const_reference
reference operator[](source_type sourceSymbol)
size_type size() const noexcept
decltype(auto) findImpl(source_type sourceSymbol) const
std::ptrdiff_t difference_type
const_reference getNullElement() const
iterator begin() noexcept
const_reference operator[](source_type sourceSymbol) const
const_iterator find(source_type sourceSymbol) const
std::pair< source_T, value_T > tuple_type
const_iterator cend() const noexcept
iterator find(source_type sourceSymbol)
friend void swap(OrderedSet &a, OrderedSet &b) noexcept
OrderedSet(value_type nullElement)
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * value
GLboolean GLboolean GLboolean GLboolean a
if constexpr(std::is_unsigned_v< source_T >)
Defining DataPointCompositeObject explicitly as copiable.
bool operator()(const source_type &a, const tuple_type &b) const
bool operator()(const tuple_type &a, const source_type &b) const
VectorOfTObjectPtrs other