class EIdent { }; class Cstring { }; template < class KEY, class VALUE, class HASHER > class HashMapIterator { public: virtual ~ HashMapIterator () { } }; class ECell; class ECell_ptr { ECell *mp_element; public: ECell * operator -> () const { return (mp_element); } } sicat_cmd_status; class CellListIterator; class ECellList { public: virtual CellListIterator * createIterator () const = 0; virtual ECell_ptr Find (const EIdent & anIdent) = 0; }; class Foobar_Out { virtual int get_channel () { } public: Foobar_Out & operator << (const char *str); Foobar_Out & operator << (const Cstring & cstring); }; class Foobar_Log:public Foobar_Out { }; extern Foobar_Log Foobar_LOG; template < class KEY > class BagIterator { public: inline const KEY & operator * () const; inline int atEnd () const; }; class EMaskView; class ECell { public: virtual const EMaskView & getMaskView () const = 0; }; class FoobarDatabase { public: const Cstring & getName (const EIdent & id) const; ECellList *getCellList (); }; inline FoobarDatabase & DB () { } class EMaskView { public: inline BagIterator < EIdent > getCallerIterator () const; }; struct DBHashFunctions { }; class CellListIterator:public HashMapIterator < EIdent, ECell *, DBHashFunctions > { }; class IdentSet { public: unsigned int getSize () const { } int isEmpty () const { } }; class IdentSetIterator { public: IdentSetIterator (const IdentSet * p_source) { } int atEnd () const { } EIdent operator* () const { } }; void validate () { IdentSet complete_cell_ids; IdentSet incomplete_cell_ids; CellListIterator *p_cl_it = DB ().getCellList ()->createIterator (); delete p_cl_it; while (!incomplete_cell_ids.isEmpty ()) { if (incomplete_cell_ids.getSize () < complete_cell_ids.getSize ()) { IdentSetIterator complete_cell_it (&complete_cell_ids); while (!complete_cell_it.atEnd ()) { BagIterator < EIdent > caller_it = DB ().getCellList ()->Find (*complete_cell_it)-> getMaskView ().getCallerIterator (); while (!caller_it.atEnd ()) { Foobar_LOG << DB ().getName (*caller_it) << " "; } } } } }