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)43 intndbArtPtrVecAVLMap::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