00001 /* 00002 * Copyright (c) 2002, University of Amsterdam, The Netherlands. 00003 * All rights reserved. 00004 * 00005 * 00006 * Author(s): 00007 * Dennis Koelma (koelma@science.uva.nl) 00008 */ 00009 00010 #ifndef HxBlob2dRelation_h 00011 #define HxBlob2dRelation_h 00012 00013 #include "HxBlob2d.h" 00014 #include "HxBlob2dList.h" 00015 00016 00021 class HxBlob2dRelation 00022 { 00023 public: 00025 HxBlob2dRelation(); 00026 00028 ~HxBlob2dRelation(); 00029 00031 int ident() const; 00032 00034 void add(HxBlob2d* blob, HxBlob2dList rels); 00035 00037 HxBlob2dListConstIter getBlobBegin() const; 00038 00040 HxBlob2dListConstIter getBlobEnd() const; 00041 00043 HxBlob2dList findRelatedBlobs(HxBlob2d* blob); 00044 00046 HxBlob2dListConstIter findRelatedBlobsBegin(HxBlob2d* blob) const; 00047 00049 HxBlob2dListConstIter findRelatedBlobsEnd(HxBlob2d* blob) const; 00050 00052 HxBlob2dListBackInserter findRelatedBlobsInserter(HxBlob2d* blob); 00053 00054 00056 STD_OSTREAM& put(STD_OSTREAM& os) const; 00057 00058 private: 00059 // forbid copy construction until it is implemented 00060 HxBlob2dRelation(const HxBlob2dRelation&) {} 00061 00062 typedef std::vector<HxBlob2dList> RelatedList; 00063 00064 HxBlob2dList _head; 00065 RelatedList _tail; 00066 00067 int _ident; // unique identifier 00068 00069 static int _nr; 00070 }; 00071 00072 inline STD_OSTREAM& 00073 operator<<(STD_OSTREAM& os, const HxBlob2dRelation& rel) 00074 { 00075 return rel.put(os); 00076 } 00077 00078 inline HxString 00079 makeString(const HxBlob2dRelation& b) 00080 { 00081 return HxString("HxBlob2dRelation") + makeString(b.ident()); 00082 } 00083 00084 #endif