1 // { dg-do assemble } 2 // { dg-options "-w -O3" } 3 // GROUPS passed incdec 4 typedef void* Pix; 5 class ndbArtPtrVec 6 { 7 public: 8 ndbArtPtrVec (ndbArtPtrVec&); 9 }; 10 class intndbArtPtrVecMap 11 { 12 protected: 13 int count; 14 ndbArtPtrVec def; 15 intndbArtPtrVecMap(ndbArtPtrVec& dflt); 16 virtual ndbArtPtrVec& operator [] (int key) = 0; 17 virtual void del(int key) = 0; 18 public: 19 virtual Pix first() = 0; 20 virtual void next(Pix& i) = 0; 21 virtual int& key(Pix i) = 0; 22 virtual ndbArtPtrVec& contents(Pix i) = 0; 23 }; 24 struct intndbArtPtrVecAVLNode 25 { 26 ndbArtPtrVec cont; 27 intndbArtPtrVecAVLNode(int h, ndbArtPtrVec& c, 28 intndbArtPtrVecAVLNode* l=0, intndbArtPtrVecAVLNode* r=0); 29 }; 30 class intndbArtPtrVecAVLMap : intndbArtPtrVecMap 31 { 32 protected: 33 intndbArtPtrVecAVLNode* root; 34 public: 35 ndbArtPtrVec& operator [] (int key); 36 intndbArtPtrVecAVLMap(intndbArtPtrVecAVLMap&); 37 }; 38 ndbArtPtrVec& intndbArtPtrVecAVLMap::operator [] (int item) 39 { 40 ++count; 41 root = new intndbArtPtrVecAVLNode(item, def); 42 } intndbArtPtrVecAVLMap(intndbArtPtrVecAVLMap & b)43intndbArtPtrVecAVLMap::intndbArtPtrVecAVLMap(intndbArtPtrVecAVLMap& b) :intndbArtPtrVecMap(b.def) 44 { 45 for (Pix i = b.first(); i != 0; b.next(i)) 46 (*this)[b.key(i)] = b.contents(i); 47 } 48