| // { dg-do assemble } |
| // { dg-options "-w -O3" } |
| // GROUPS passed incdec |
| typedef void* Pix; |
| class ndbArtPtrVec |
| { |
| public: |
| ndbArtPtrVec (ndbArtPtrVec&); |
| }; |
| class intndbArtPtrVecMap |
| { |
| protected: |
| int count; |
| ndbArtPtrVec def; |
| intndbArtPtrVecMap(ndbArtPtrVec& dflt); |
| virtual ndbArtPtrVec& operator [] (int key) = 0; |
| virtual void del(int key) = 0; |
| public: |
| virtual Pix first() = 0; |
| virtual void next(Pix& i) = 0; |
| virtual int& key(Pix i) = 0; |
| virtual ndbArtPtrVec& contents(Pix i) = 0; |
| }; |
| struct intndbArtPtrVecAVLNode |
| { |
| ndbArtPtrVec cont; |
| intndbArtPtrVecAVLNode(int h, ndbArtPtrVec& c, |
| intndbArtPtrVecAVLNode* l=0, intndbArtPtrVecAVLNode* r=0); |
| }; |
| class intndbArtPtrVecAVLMap : intndbArtPtrVecMap |
| { |
| protected: |
| intndbArtPtrVecAVLNode* root; |
| public: |
| ndbArtPtrVec& operator [] (int key); |
| intndbArtPtrVecAVLMap(intndbArtPtrVecAVLMap&); |
| }; |
| ndbArtPtrVec& intndbArtPtrVecAVLMap::operator [] (int item) |
| { |
| ++count; |
| root = new intndbArtPtrVecAVLNode(item, def); |
| } |
| intndbArtPtrVecAVLMap::intndbArtPtrVecAVLMap(intndbArtPtrVecAVLMap& b) :intndbArtPtrVecMap(b.def) |
| { |
| for (Pix i = b.first(); i != 0; b.next(i)) |
| (*this)[b.key(i)] = b.contents(i); |
| } |