22 #ifndef __PNS_ITEMSET_H 23 #define __PNS_ITEMSET_H 44 ENTRY(
ITEM* aItem,
bool aOwned =
false ) :
54 item = aOther.item->
Clone();
65 bool operator== (
const ENTRY& b )
const 67 return item == b.item;
70 bool operator< (
const ENTRY& b )
const 80 item = aOther.item->
Clone();
87 operator ITEM* ()
const 96 typedef std::vector<ENTRY> ENTRIES;
98 ITEM_SET(
ITEM* aInitialItem = NULL,
bool aBecomeOwner =
false )
102 m_items.push_back(
ENTRY( aInitialItem, aBecomeOwner ) );
108 m_items = aOther.m_items;
115 m_items = aOther.m_items;
119 int Count(
int aKindMask = -1 )
const 123 for(
ITEM* item : m_items )
125 if( item->
Kind() & aKindMask )
134 return m_items.empty();
137 ENTRIES& Items() {
return m_items; }
138 const ENTRIES& CItems()
const {
return m_items; }
140 ITEM_SET& FilterLayers(
int aStart,
int aEnd = -1,
bool aInvert =
false );
141 ITEM_SET& FilterKinds(
int aKindMask,
bool aInvert =
false );
142 ITEM_SET& FilterNet(
int aNet,
bool aInvert =
false );
143 ITEM_SET& FilterMarker(
int aMarker,
bool aInvert =
false );
145 ITEM_SET& ExcludeLayers(
int aStart,
int aEnd = -1 )
147 return FilterLayers( aStart, aEnd,
true );
150 ITEM_SET& ExcludeKinds(
int aKindMask )
152 return FilterKinds( aKindMask,
true );
157 return FilterNet( aNet,
true );
164 return m_items.size();
167 void Add(
const LINE& aLine );
168 void Prepend(
const LINE& aLine );
170 ITEM* operator[] (
int index )
const 172 return m_items[index].item;
175 void Add(
ITEM* aItem,
bool aBecomeOwner =
false )
177 m_items.push_back(
ENTRY( aItem, aBecomeOwner ) );
180 void Prepend(
ITEM* aItem,
bool aBecomeOwner =
false )
182 m_items.insert( m_items.begin(),
ENTRY( aItem, aBecomeOwner ) );
190 bool Contains(
ITEM* aItem )
const 192 const ENTRY ent( aItem );
193 return std::find( m_items.begin(), m_items.end(), ent ) != m_items.end();
196 void Erase(
ITEM* aItem )
199 ENTRIES::iterator f = std::find( m_items.begin(), m_items.end(), ent );
201 if( f != m_items.end() )
210 for(
const ITEM* item : m_items )
212 if( item->
OfKind( kind ) )
215 return static_cast<T*
>( item );
Class ITEM.
Definition: pns_item.h:54
virtual ITEM * Clone() const =0
Function Clone()
Definition: pns_itemset.h:39
Definition: pns_line.h:60
PnsKind
Supported item types
Definition: pns_item.h:60
bool OfKind(int aKindMask) const
Function OfKind()
Definition: pns_item.h:131
PnsKind Kind() const
Function Kind()
Definition: pns_item.h:121
Definition: pns_algo_base.cpp:26
Definition: pns_itemset.h:42