1// { dg-do assemble } 2// { dg-options "-w -O3" } 3// GROUPS passed incdec 4typedef void* Pix; 5class ndbArtPtrVec 6{ 7public: 8 ndbArtPtrVec (ndbArtPtrVec&); 9}; 10class intndbArtPtrVecMap 11{ 12protected: 13 int count; 14 ndbArtPtrVec def; 15 intndbArtPtrVecMap(ndbArtPtrVec& dflt); 16 virtual ndbArtPtrVec& operator [] (int key) = 0; 17 virtual void del(int key) = 0; 18public: 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}; 24struct intndbArtPtrVecAVLNode 25{ 26 ndbArtPtrVec cont; 27 intndbArtPtrVecAVLNode(int h, ndbArtPtrVec& c, 28 intndbArtPtrVecAVLNode* l=0, intndbArtPtrVecAVLNode* r=0); 29}; 30class intndbArtPtrVecAVLMap : intndbArtPtrVecMap 31{ 32protected: 33 intndbArtPtrVecAVLNode* root; 34public: 35 ndbArtPtrVec& operator [] (int key); 36 intndbArtPtrVecAVLMap(intndbArtPtrVecAVLMap&); 37}; 38ndbArtPtrVec& intndbArtPtrVecAVLMap::operator [] (int item) 39{ 40 ++count; 41 root = new intndbArtPtrVecAVLNode(item, def); 42} 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