LIB_ITEMS_CONTAINER code formatting
This commit is contained in:
parent
0be357ec3e
commit
55bc8da726
|
@ -580,18 +580,16 @@ void LIB_PART::AddDrawItem( LIB_ITEM* aItem )
|
||||||
|
|
||||||
LIB_ITEM* LIB_PART::GetNextDrawItem( LIB_ITEM* aItem, KICAD_T aType )
|
LIB_ITEM* LIB_PART::GetNextDrawItem( LIB_ITEM* aItem, KICAD_T aType )
|
||||||
{
|
{
|
||||||
/* Return the next draw object pointer.
|
|
||||||
* If item is NULL return the first item of type in the list.
|
|
||||||
*/
|
|
||||||
if( m_drawings.empty( aType ) )
|
if( m_drawings.empty( aType ) )
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if( aItem == NULL )
|
if( aItem == NULL )
|
||||||
return &( *( m_drawings.begin( aType ) ) );
|
return &( *( m_drawings.begin( aType ) ) );
|
||||||
|
|
||||||
// Search for last item, assume aItem is of type aType
|
// Search for the last item, assume aItem is of type aType
|
||||||
wxASSERT( ( aType == TYPE_NOT_INIT ) || ( aType == aItem->Type() ) );
|
wxASSERT( ( aType == TYPE_NOT_INIT ) || ( aType == aItem->Type() ) );
|
||||||
LIB_ITEMS_CONTAINER::ITERATOR it = m_drawings.begin( aType );
|
LIB_ITEMS_CONTAINER::ITERATOR it = m_drawings.begin( aType );
|
||||||
|
|
||||||
while( ( it != m_drawings.end( aType ) ) && ( aItem != &( *it ) ) )
|
while( ( it != m_drawings.end( aType ) ) && ( aItem != &( *it ) ) )
|
||||||
++it;
|
++it;
|
||||||
|
|
||||||
|
@ -599,6 +597,7 @@ LIB_ITEM* LIB_PART::GetNextDrawItem( LIB_ITEM* aItem, KICAD_T aType )
|
||||||
if( it != m_drawings.end( aType ) )
|
if( it != m_drawings.end( aType ) )
|
||||||
{
|
{
|
||||||
++it;
|
++it;
|
||||||
|
|
||||||
if( it != m_drawings.end( aType ) )
|
if( it != m_drawings.end( aType ) )
|
||||||
return &( *it );
|
return &( *it );
|
||||||
}
|
}
|
||||||
|
@ -1598,7 +1597,11 @@ void LIB_PART::SetUnitCount( int aCount )
|
||||||
{
|
{
|
||||||
int prevCount = m_unitCount;
|
int prevCount = m_unitCount;
|
||||||
|
|
||||||
|
// Temporary storage for new items, as adding new items directly to
|
||||||
|
// m_drawings may cause the buffer reallocation which invalidates the
|
||||||
|
// iterators
|
||||||
std::vector< LIB_ITEM* > tmp;
|
std::vector< LIB_ITEM* > tmp;
|
||||||
|
|
||||||
for( LIB_ITEM& item : m_drawings )
|
for( LIB_ITEM& item : m_drawings )
|
||||||
{
|
{
|
||||||
if( item.m_Unit != 1 )
|
if( item.m_Unit != 1 )
|
||||||
|
@ -1608,13 +1611,10 @@ void LIB_PART::SetUnitCount( int aCount )
|
||||||
{
|
{
|
||||||
LIB_ITEM* newItem = (LIB_ITEM*) item.Clone();
|
LIB_ITEM* newItem = (LIB_ITEM*) item.Clone();
|
||||||
newItem->m_Unit = j;
|
newItem->m_Unit = j;
|
||||||
|
|
||||||
// We cannot use push_back here, because when adding items in vector
|
|
||||||
// the buffer can be reallocated, that change the previous value of
|
|
||||||
// .begin() and .end() iterators and invalidate others iterators
|
|
||||||
tmp.push_back( newItem );
|
tmp.push_back( newItem );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for( auto item : tmp )
|
for( auto item : tmp )
|
||||||
m_drawings.push_back( item );
|
m_drawings.push_back( item );
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,6 +125,8 @@ void LIB_COLLECTOR::Collect( LIB_ITEMS_CONTAINER& aItems, const KICAD_T aFilterL
|
||||||
m_data.m_convert = aConvert;
|
m_data.m_convert = aConvert;
|
||||||
|
|
||||||
for( LIB_ITEM& item : aItems )
|
for( LIB_ITEM& item : aItems )
|
||||||
|
{
|
||||||
if( SEARCH_QUIT == item.Visit( m_inspector, NULL, m_ScanTypes ) )
|
if( SEARCH_QUIT == item.Visit( m_inspector, NULL, m_ScanTypes ) )
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -34,7 +34,9 @@ void LIB_ITEMS_CONTAINER::push_back( LIB_ITEM *aItem )
|
||||||
operator[]( aItem->Type() ).push_back( aItem );
|
operator[]( aItem->Type() ).push_back( aItem );
|
||||||
}
|
}
|
||||||
|
|
||||||
LIB_ITEMS_CONTAINER::ITERATOR LIB_ITEMS_CONTAINER::erase(const LIB_ITEMS_CONTAINER::ITERATOR &aIterator)
|
|
||||||
|
LIB_ITEMS_CONTAINER::ITERATOR LIB_ITEMS_CONTAINER::erase(
|
||||||
|
const LIB_ITEMS_CONTAINER::ITERATOR& aIterator )
|
||||||
{
|
{
|
||||||
LIB_ITEMS_CONTAINER::ITERATOR it( aIterator );
|
LIB_ITEMS_CONTAINER::ITERATOR it( aIterator );
|
||||||
it.m_it = (*aIterator.m_parent)[ aIterator.m_curType ].erase( aIterator.m_it );
|
it.m_it = (*aIterator.m_parent)[ aIterator.m_curType ].erase( aIterator.m_it );
|
||||||
|
@ -43,30 +45,35 @@ LIB_ITEMS_CONTAINER::ITERATOR LIB_ITEMS_CONTAINER::erase(const LIB_ITEMS_CONTAIN
|
||||||
return it;
|
return it;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LIB_ITEMS_CONTAINER::ITERATOR LIB_ITEMS_CONTAINER::begin( int aType )
|
LIB_ITEMS_CONTAINER::ITERATOR LIB_ITEMS_CONTAINER::begin( int aType )
|
||||||
{
|
{
|
||||||
size_t bucket = ( aType != TYPE_NOT_INIT ) ? aType : first();
|
size_t bucket = ( aType != TYPE_NOT_INIT ) ? aType : first();
|
||||||
return ITERATOR( this, operator[]( bucket ).begin(), bucket, aType );
|
return ITERATOR( this, operator[]( bucket ).begin(), bucket, aType );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LIB_ITEMS_CONTAINER::ITERATOR LIB_ITEMS_CONTAINER::end( int aType )
|
LIB_ITEMS_CONTAINER::ITERATOR LIB_ITEMS_CONTAINER::end( int aType )
|
||||||
{
|
{
|
||||||
size_t bucket = ( aType != TYPE_NOT_INIT ) ? aType : last();
|
size_t bucket = ( aType != TYPE_NOT_INIT ) ? aType : last();
|
||||||
return ITERATOR( this, operator[]( bucket ).end(), bucket, aType );
|
return ITERATOR( this, operator[]( bucket ).end(), bucket, aType );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LIB_ITEMS_CONTAINER::CONST_ITERATOR LIB_ITEMS_CONTAINER::begin( int aType ) const
|
LIB_ITEMS_CONTAINER::CONST_ITERATOR LIB_ITEMS_CONTAINER::begin( int aType ) const
|
||||||
{
|
{
|
||||||
size_t bucket = ( aType != TYPE_NOT_INIT ) ? aType : first();
|
size_t bucket = ( aType != TYPE_NOT_INIT ) ? aType : first();
|
||||||
return CONST_ITERATOR( this, operator[]( bucket ).begin(), bucket, aType );
|
return CONST_ITERATOR( this, operator[]( bucket ).begin(), bucket, aType );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LIB_ITEMS_CONTAINER::CONST_ITERATOR LIB_ITEMS_CONTAINER::end( int aType ) const
|
LIB_ITEMS_CONTAINER::CONST_ITERATOR LIB_ITEMS_CONTAINER::end( int aType ) const
|
||||||
{
|
{
|
||||||
size_t bucket = ( aType != TYPE_NOT_INIT ) ? aType : last();
|
size_t bucket = ( aType != TYPE_NOT_INIT ) ? aType : last();
|
||||||
return CONST_ITERATOR( this, operator[]( bucket ).end(), bucket, aType );
|
return CONST_ITERATOR( this, operator[]( bucket ).end(), bucket, aType );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
size_t LIB_ITEMS_CONTAINER::size( int aType ) const
|
size_t LIB_ITEMS_CONTAINER::size( int aType ) const
|
||||||
{
|
{
|
||||||
if( aType != TYPE_NOT_INIT )
|
if( aType != TYPE_NOT_INIT )
|
||||||
|
@ -76,6 +83,7 @@ size_t LIB_ITEMS_CONTAINER::size( int aType ) const
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
size_t cnt = 0;
|
size_t cnt = 0;
|
||||||
|
|
||||||
for( int i = 0; i < TYPES_COUNT; ++i)
|
for( int i = 0; i < TYPES_COUNT; ++i)
|
||||||
cnt += m_data[ i ].size();
|
cnt += m_data[ i ].size();
|
||||||
|
|
||||||
|
@ -83,23 +91,27 @@ size_t LIB_ITEMS_CONTAINER::size( int aType ) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool LIB_ITEMS_CONTAINER::empty( int aType ) const
|
bool LIB_ITEMS_CONTAINER::empty( int aType ) const
|
||||||
{
|
{
|
||||||
return ( size( aType ) == 0 );
|
return ( size( aType ) == 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LIB_ITEMS_CONTAINER::sort()
|
void LIB_ITEMS_CONTAINER::sort()
|
||||||
{
|
{
|
||||||
for( int i = 0; i < TYPES_COUNT; ++i )
|
for( int i = 0; i < TYPES_COUNT; ++i )
|
||||||
m_data[ i ].sort();
|
m_data[ i ].sort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LIB_ITEMS_CONTAINER::unique()
|
void LIB_ITEMS_CONTAINER::unique()
|
||||||
{
|
{
|
||||||
for( int i = 0; i < TYPES_COUNT; ++i )
|
for( int i = 0; i < TYPES_COUNT; ++i )
|
||||||
m_data[ i ].unique();
|
m_data[ i ].unique();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LIB_ITEMS& LIB_ITEMS_CONTAINER::operator[]( int aType )
|
LIB_ITEMS& LIB_ITEMS_CONTAINER::operator[]( int aType )
|
||||||
{
|
{
|
||||||
if( ( aType < FIRST_TYPE ) || ( aType > LAST_TYPE ) )
|
if( ( aType < FIRST_TYPE ) || ( aType > LAST_TYPE ) )
|
||||||
|
@ -108,6 +120,7 @@ LIB_ITEMS &LIB_ITEMS_CONTAINER::operator[]( int aType )
|
||||||
return m_data[ aType - FIRST_TYPE ];
|
return m_data[ aType - FIRST_TYPE ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const LIB_ITEMS& LIB_ITEMS_CONTAINER::operator[]( int aType ) const
|
const LIB_ITEMS& LIB_ITEMS_CONTAINER::operator[]( int aType ) const
|
||||||
{
|
{
|
||||||
if( ( aType < FIRST_TYPE ) || ( aType > LAST_TYPE ) )
|
if( ( aType < FIRST_TYPE ) || ( aType > LAST_TYPE ) )
|
||||||
|
@ -116,57 +129,69 @@ const LIB_ITEMS &LIB_ITEMS_CONTAINER::operator[]( int aType ) const
|
||||||
return m_data[ aType - FIRST_TYPE ];
|
return m_data[ aType - FIRST_TYPE ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
size_t LIB_ITEMS_CONTAINER::first() const
|
size_t LIB_ITEMS_CONTAINER::first() const
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
while( ( i < TYPES_COUNT ) && ( m_data[ i ].empty() ) )
|
while( ( i < TYPES_COUNT ) && ( m_data[ i ].empty() ) )
|
||||||
++i;
|
++i;
|
||||||
|
|
||||||
return ( i == TYPES_COUNT ) ? FIRST_TYPE : FIRST_TYPE + i;
|
return ( i == TYPES_COUNT ) ? FIRST_TYPE : FIRST_TYPE + i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
size_t LIB_ITEMS_CONTAINER::last() const
|
size_t LIB_ITEMS_CONTAINER::last() const
|
||||||
{
|
{
|
||||||
int i = TYPES_COUNT - 1;
|
int i = TYPES_COUNT - 1;
|
||||||
|
|
||||||
while( ( i >= 0 ) && ( m_data[ i ].empty() ) )
|
while( ( i >= 0 ) && ( m_data[ i ].empty() ) )
|
||||||
--i;
|
--i;
|
||||||
|
|
||||||
return ( i < 0 ) ? FIRST_TYPE : FIRST_TYPE + i;
|
return ( i < 0 ) ? FIRST_TYPE : FIRST_TYPE + i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template< typename ITEM_TYPE >
|
template< typename ITEM_TYPE >
|
||||||
LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE>& LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE>::operator++()
|
LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE>& LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE>::operator++()
|
||||||
{
|
{
|
||||||
if( m_it != (*m_parent)[ m_curType ].end() )
|
if( m_it != (*m_parent)[ m_curType ].end() )
|
||||||
++m_it;
|
++m_it;
|
||||||
|
|
||||||
validate();
|
validate();
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template< typename ITEM_TYPE >
|
template< typename ITEM_TYPE >
|
||||||
bool LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE>::operator!=(const LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE> &aOther) const
|
bool LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE>::operator!=(
|
||||||
|
const LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE>& aOther ) const
|
||||||
{
|
{
|
||||||
if( aOther.m_parent != m_parent )
|
if( aOther.m_parent != m_parent )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if( aOther.m_filter != m_filter )
|
if( aOther.m_filter != m_filter )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if( aOther.m_curType != m_curType )
|
if( aOther.m_curType != m_curType )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return aOther.m_it != m_it;
|
return aOther.m_it != m_it;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template< typename ITEM_TYPE >
|
template< typename ITEM_TYPE >
|
||||||
LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE>::ITERATOR_BASE( typename LIB_ITEMS_CONTAINER::ITERATOR_ADAPTER< ITEM_TYPE >::CONTAINER* aItems,
|
LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE>::ITERATOR_BASE(
|
||||||
|
typename LIB_ITEMS_CONTAINER::ITERATOR_ADAPTER< ITEM_TYPE >::CONTAINER* aItems,
|
||||||
typename LIB_ITEMS_CONTAINER::ITERATOR_ADAPTER< ITEM_TYPE >::ITERATOR aIt,
|
typename LIB_ITEMS_CONTAINER::ITERATOR_ADAPTER< ITEM_TYPE >::ITERATOR aIt,
|
||||||
int aBucket, int aType )
|
int aBucket, int aType )
|
||||||
: m_parent( aItems )
|
: m_parent( aItems ), m_it( aIt ), m_curType( aBucket )
|
||||||
, m_it( aIt )
|
|
||||||
, m_curType( aBucket )
|
|
||||||
{
|
{
|
||||||
m_filter = ( aType != TYPE_NOT_INIT );
|
m_filter = ( aType != TYPE_NOT_INIT );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template< typename ITEM_TYPE >
|
template< typename ITEM_TYPE >
|
||||||
void LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE>::validate()
|
void LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE>::validate()
|
||||||
{
|
{
|
||||||
|
@ -176,6 +201,7 @@ void LIB_ITEMS_CONTAINER::ITERATOR_BASE<ITEM_TYPE>::validate()
|
||||||
{
|
{
|
||||||
// switch to the next type (look for a not empty container)
|
// switch to the next type (look for a not empty container)
|
||||||
int nextType = m_curType;
|
int nextType = m_curType;
|
||||||
|
|
||||||
do
|
do
|
||||||
++nextType;
|
++nextType;
|
||||||
while( ( nextType <= LAST_TYPE ) && (*m_parent)[ nextType ].empty() );
|
while( ( nextType <= LAST_TYPE ) && (*m_parent)[ nextType ].empty() );
|
||||||
|
|
Loading…
Reference in New Issue