| /* { dg-do compile } */ |
| /* { dg-options "-O2 -Wno-return-type" } */ |
| |
| namespace Gambit |
| { |
| template < class T > class Array |
| { |
| protected:int mindex, maxdex; |
| T *data; |
| int InsertAt (const T & t, int n) |
| { |
| T *new_data = new T[++this->maxdex - this->mindex + 1] - this->mindex; |
| int i; |
| for (i = this->mindex; i <= n - 1; i++) |
| new_data[i] = this->data[i]; |
| } |
| public: Array (unsigned int len = 0):mindex (1), maxdex (len), |
| data ((len) ? new T[len] - |
| 1 : 0) |
| { |
| } |
| virtual ~ Array () |
| { |
| if (maxdex >= mindex) |
| delete[](data + mindex); |
| } |
| const T & operator[] (int index) const |
| { |
| } |
| int Append (const T & t) |
| { |
| return InsertAt (t, this->maxdex + 1); |
| } |
| }; |
| } |
| class gIndexOdometer |
| { |
| private:Gambit::Array < int >MinIndices; |
| Gambit::Array < int >CurIndices; |
| gIndexOdometer (const Gambit::Array < int >, const Gambit::Array < int >); |
| void SetIndex (const int &, const int &); |
| int NoIndices () const; |
| gIndexOdometer AfterExcisionOf (int &) const; |
| }; |
| gIndexOdometer |
| gIndexOdometer::AfterExcisionOf (int &to_be_zapped) const |
| { |
| Gambit::Array < int >NewMins, NewMaxs; |
| int i; |
| for (i = 1; i <= NoIndices (); i++) |
| { |
| NewMins.Append (MinIndices[i]); |
| } |
| gIndexOdometer NewOdo (NewMins, NewMaxs); |
| NewOdo.SetIndex (i, CurIndices[i]); |
| } |
| |