28#include <boost/ptr_container/ptr_vector.hpp>
41template<
typename T,
int FIRST_TYPE_VAL,
int LAST_TYPE_VAL>
51 "FIRST_TYPE_VAL must be greater than UNDEFINED_TYPE" );
52 static_assert( FIRST_TYPE_VAL < LAST_TYPE_VAL,
53 "FIRST_TYPE_VAL must be greater than LAST_TYPE_VAL" );
66 template<
typename ITEM_TYPE,
typename ITEM_CONTAINER,
typename ITEM_CONTAINER_IT>
163 typedef ITERATOR_BASE<const T, const MULTIVECTOR<T, FIRST_TYPE_VAL, LAST_TYPE_VAL>,
173 operator[]( aItem->Type() ).push_back( aItem );
179 it.m_it = (*aIterator.m_parent)[ aIterator.m_curType ].erase( aIterator.m_it );
188 return ITERATOR(
this,
operator[]( bucket ).
begin(), bucket, aType );
194 return ITERATOR(
this,
operator[]( bucket ).
end(), bucket, aType );
241 return (
size( aType ) == 0 );
266 wxFAIL_MSG( wxT(
"Attempted access to type not within MULTIVECTOR" ) );
279 wxFAIL_MSG( wxT(
"Attempted access to type not within MULTIVECTOR" ) );
Generic implementation of a flat const/non-const iterator over contained items.The non-const iterator...
ITERATOR_BASE(ITEM_CONTAINER *aItems, ITEM_CONTAINER_IT aIt, int aBucket, int aType=UNDEFINED_TYPE)
Assures the iterator is in a valid state.
typename ITEM_PTR_VECTOR::iterator m_it
void validate()
Wrapped container.
bool m_filter
Type of the currently iterated items.
bool operator!=(const ITERATOR_BASE &aOther) const
MULTIVECTOR< T, FIRST_TYPE_VAL, LAST_TYPE_VAL > * m_parent
ITERATOR_BASE & operator++()
size_t size(int aType=UNDEFINED_TYPE) const
CONST_ITERATOR begin(int aType=UNDEFINED_TYPE) const
bool empty(int aType=UNDEFINED_TYPE) const
static constexpr int FIRST_TYPE
ITERATOR_BASE< const SCH_ITEM, const MULTIVECTOR< SCH_ITEM, FIRST_TYPE_VAL, LAST_TYPE_VAL >, typename ITEM_PTR_VECTOR::const_iterator > CONST_ITERATOR
ITEM_PTR_VECTOR & operator[](int aType)
const ITEM_PTR_VECTOR & operator[](int aType) const
CONST_ITERATOR end(int aType=UNDEFINED_TYPE) const
void unique()
Remove duplicate elements in list.
ITERATOR_BASE< SCH_ITEM, MULTIVECTOR< SCH_ITEM, FIRST_TYPE_VAL, LAST_TYPE_VAL >, typename ITEM_PTR_VECTOR::iterator > ITERATOR
ITERATOR end(int aType=UNDEFINED_TYPE)
int last() const
Contained items by type.
int first() const
< Get first non-empty type or first type if all are empty.
ITEM_PTR_VECTOR m_data[TYPES_COUNT]
void clear(int aType=UNDEFINED_TYPE)
static constexpr int LAST_TYPE
static constexpr int UNDEFINED_TYPE
ITERATOR erase(const ITERATOR &aIterator)
boost::ptr_vector< SCH_ITEM > ITEM_PTR_VECTOR
ITERATOR begin(int aType=UNDEFINED_TYPE)
static constexpr int TYPES_COUNT