00001
00007 #ifndef __ARRAY_H__
00008 #define __ARRAY_H__
00009
00010 template<class T> class Array
00011 {
00012 public:
00013
00014 Array();
00015 ~Array();
00016
00017
00018
00019 __forceinline Array& Add(T entry)
00020 {
00021 if(mCurNbEntries==mMaxNbEntries) Resize();
00022 mEntries[mCurNbEntries++] = entry;
00023 return *this;
00024 }
00025
00026
00027
00028 __forceinline Array& Insert(T entry, int location)
00029 {
00030 if(mCurNbEntries==mMaxNbEntries) Resize();
00031
00032 for(int j=mCurNbEntries; j>location; j--) mEntries[j] = mEntries[j-1];
00033 mEntries[location] = entry;
00034
00035 mCurNbEntries++;
00036
00037 return *this;
00038 }
00039
00040
00041
00042 Array& AddUnique(T entry)
00043 {
00044 if(!Contains(entry)) Add(entry);
00045 return *this;
00046 }
00047
00048
00049
00050 __forceinline Array& Empty()
00051 {
00052 DELETEARRAY(mEntries);
00053 mCurNbEntries = mMaxNbEntries = 0;
00054 return *this;
00055 }
00056
00057
00058
00059 __forceinline Array& Clear()
00060 {
00061 mCurNbEntries = 0;
00062 return *this;
00063 }
00064
00065
00066
00068
00069
00070 bool Contains(T entry, int* location=NULL) const;
00071
00072 bool Delete(T entry);
00073 __forceinline void DeleteLastEntry() { if(mCurNbEntries) mCurNbEntries--; }
00074 __forceinline void DeleteIndex(int index) { mEntries[index] = mEntries[--mCurNbEntries]; }
00075
00076 int GetUsedRam() const;
00077 __forceinline int Size() const { return mCurNbEntries; }
00078 __forceinline int SizeMax() const { return mMaxNbEntries; }
00079 __forceinline T& GetEntry(int i) const { return mEntries[i]; }
00080 __forceinline T* GetEntries() const { return mEntries; }
00081 __forceinline T& operator[](int i) const { ASSERT(i>=0 && i<mCurNbEntries); return mEntries[i]; }
00082
00083
00084
00085 private:
00086
00087 bool Resize();
00088
00089 int mMaxNbEntries;
00090 int mCurNbEntries;
00091 T* mEntries;
00092 };
00093
00094
00095 #include "Array.inl"
00096
00097
00098 #endif