32#include <boost/ptr_container/ptr_vector.hpp>
45template<
typename T,
int FIRST_TYPE_VAL,
int LAST_TYPE_VAL>
55 "FIRST_TYPE_VAL must be greater than UNDEFINED_TYPE" );
56 static_assert( FIRST_TYPE_VAL < LAST_TYPE_VAL,
57 "FIRST_TYPE_VAL must be greater than LAST_TYPE_VAL" );
70 template<
typename ITEM_TYPE,
typename ITEM_CONTAINER,
typename ITEM_CONTAINER_IT>
167 typedef ITERATOR_BASE<const T, const MULTIVECTOR<T, FIRST_TYPE_VAL, LAST_TYPE_VAL>,
177 operator[]( aItem->Type() ).push_back( aItem );
183 it.m_it = (*aIterator.m_parent)[ aIterator.m_curType ].erase( aIterator.m_it );
192 return ITERATOR(
this,
operator[]( bucket ).
begin(), bucket, aType );
198 return ITERATOR(
this,
operator[]( bucket ).
end(), bucket, aType );
245 return (
size( aType ) == 0 );
270 wxFAIL_MSG( wxT(
"Attempted access to type not within MULTIVECTOR" ) );
283 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