00001
00008
00009
00010
00011
00012
00016
00017
00018 #include "SO3Std.h"
00019
00020 template<class T> SArray<T>::SArray() : mMaxNbEntries(0), mCurNbEntries(0), mEntries(NULL)
00021 {
00022 }
00023
00024
00025
00026 template<class T> SArray<T>::~SArray()
00027 {
00028 DELETEARRAY(mEntries);
00029 }
00030
00031
00032
00033 template<class T> bool SArray<T>::Resize()
00034 {
00035
00036 mMaxNbEntries = mMaxNbEntries ? (mMaxNbEntries<<1) : 2;
00037
00038
00039 T* NewEntries = new T[mMaxNbEntries];
00040 CHECKALLOC(NewEntries);
00041
00042
00043 if(mCurNbEntries)
00044 {
00045 for(int k=0; k<mCurNbEntries; k++) NewEntries[k] = mEntries[k];
00046 }
00047
00048
00049
00050 DELETEARRAY(mEntries);
00051
00052
00053 mEntries = NewEntries;
00054
00055 return true;
00056 }
00057
00058
00059
00060 template<class T> bool SArray<T>::Contains(T entry, int* location) const
00061 {
00062
00063 for(int i=0;i<mCurNbEntries;i++)
00064 {
00065 if(mEntries[i]==entry)
00066 {
00067 if(location) *location = i;
00068 return true;
00069 }
00070 }
00071 return false;
00072 }
00073
00074
00075
00076 template<class T> bool SArray<T>::Delete(T entry)
00077 {
00078
00079 for(int i=0;i<mCurNbEntries;i++)
00080 {
00081 if(mEntries[i]==entry)
00082 {
00083
00084 mEntries[i] = mEntries[--mCurNbEntries];
00085 return true;
00086 }
00087 }
00088 return false;
00089 }
00090
00091
00092
00093 template<class T> int SArray<T>::GetUsedRam() const
00094 {
00095 return sizeof(SArray) + mMaxNbEntries * sizeof(T);
00096 }
00097