Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

mrefarray.h

Go to the documentation of this file.
00001 
00025 #ifndef __REFARRAY_H__
00026 #define __REFARRAY_H__
00027 
00028 BEGIN_NAMESPACE (MagiC);
00029 
00030 
00032 //                                                                          //
00033 //           ----              _                         /    \             //
00034 //           |   )  ___   __  / \           ___         /      \            //
00035 //           |---  /   ) /   /   \ |/\ |/\  ___| \   | <        >           //
00036 //           | \   |---  +-- |---| |   |   (   |  \  |  \      /            //
00037 //           |  \   \__  |   |   | |   |    \__|   \_/   \    /             //
00038 //                       |                        \_/                       //
00040 
00041 template <class TYPE>
00042 // Sisältää viittauksia, ei oikeita objekteja. Tämän merkitys on lähinnä
00043 // siinä, ettei objekteja destruktoida vektorin tuhoutuessa
00044 class RefArray {
00045     TYPE**  mpRep;
00046     int     mSize;
00047   public:
00048 
00049     RefArray    () {
00050         mSize   = 0,
00051         mpRep   = NULL;
00052     }
00053 
00054     // Create the reference array to refer to a real container array
00055     RefArray    (const Array<TYPE>& orig) {
00056         mSize   = 0;
00057         mpRep   = NULL;
00058         *this   = orig;
00059     }
00060 
00061     // Copy constructor
00062     RefArray    (const RefArray<TYPE>& orig) {
00063         mSize   = 0;
00064         mpRep   = NULL;
00065         *this   = orig;
00066     }
00067     
00068     RefArray    (int size) {
00069         mSize   = 0;
00070         mpRep   = NULL;
00071         make (size);
00072     }
00073 
00074     void    make    (int size) {
00075         delete mpRep;
00076         mpRep   = new TYPE* [size];
00077         mSize   = size;
00078 
00079         for (int i=0; i<size; i++)
00080             mpRep [i] = NULL;
00081     }
00082 
00083     int     size    () const {return mSize;}
00084 
00085     void    operator=   (const Array<TYPE>& orig) {
00086         make (orig.size());
00087         for (int i=0; i<mSize; i++)
00088             mpRep[i] = (TYPE*) orig.getp (i);
00089     }
00090 
00091     void    operator=   (const RefArray<TYPE>& orig) {
00092         make (orig.size());
00093         for (int i=0; i<mSize; i++)
00094             mpRep [i] = orig.mpRep[i];
00095     }
00096 
00097     virtual ~RefArray () {
00098         delete mpRep;
00099     }
00100 
00102     void    empty   () {
00103         delete mpRep;
00104         mpRep = NULL;
00105         mSize = 0;
00106     }
00107 
00109     void    add (TYPE* pItem) {
00110         resize (mSize + 1);
00111         mpRep[mSize-1] = pItem;
00112     }
00113 
00115     void    put (TYPE* pItem, int loc) {
00116         PRE (pItem != NULL && loc >= 0 && loc < mSize);
00117         delete mpRep [loc];
00118         mpRep [loc] = pItem;
00119     }
00120 
00121     // Palauttaa viittauksen taulukon haluttuun alkioon
00122     TYPE&   operator[]  (int loc) {
00123         PRE (loc >= 0 && loc < mSize);
00124         return *mpRep [loc];
00125     }
00126 
00127     // Edellisen const-versio
00128     const TYPE& operator[]  (int loc) const {
00129         PRE (loc >= 0 && loc < mSize);
00130         return *mpRep [loc];
00131     }
00132 
00133     void    resize  (int newsize) {
00134         /* Muuttaa taulukon kokoa, old[lower] = new[lower] */
00135         PRE (newsize > 0);
00136         if (newsize < mSize) { /* Pienennetään */
00137             mpRep = (TYPE**) renew (mpRep, sizeof (TYPE*)*(newsize));
00138         } else { /* Suurennetaan */
00139             mpRep = (TYPE**) renew (mpRep, sizeof (TYPE*)*(newsize));
00140             for (int i=mSize; i < newsize; i++)
00141                 mpRep[i] = NULL;
00142         }
00143         mSize = newsize;
00144     }
00145 
00150     void    quicksort   () {
00151         qsort (mpRep, mSize, sizeof (TYPE*), compareComparable);
00152     }
00153 };
00154 
00155 #define CRefArray RefArray
00156 
00157 END_NAMESPACE;
00158 
00159 #endif
00160 

Generated on Thu Feb 10 20:06:42 2005 for LibMagiC by doxygen1.2.18