00001 // ColHash.h 00002 00003 #ifndef _COLHASH_H__ 00004 #define _COLHASH_H__ 00005 00006 #include "Array.h" 00007 #include "IntArrayList.h" 00008 00009 DSS_NAMESPASE_BEGIN 00010 00011 class ColHash 00012 { 00013 public: 00014 IntArrayList** buckets; 00015 IntArrayList occupied_buckets; 00016 int n; 00017 00018 ColHash() 00019 { 00020 buckets = NULL; 00021 } 00022 00023 ColHash(long n) 00024 { 00025 buckets = new IntArrayList*[n]; 00026 memset(buckets,0,n*sizeof(IntArrayList*)); 00027 this->n = n; 00028 //for (long i=0; i<n; i++) 00029 // buckets[i] = new IntArrayList(); 00030 } 00031 00032 void Init(long n) 00033 { 00034 if (buckets) delete [] buckets; 00035 buckets = new IntArrayList*[n]; 00036 memset(buckets,0,n*sizeof(IntArrayList*)); 00037 this->n = n; 00038 } 00039 00040 ~ColHash() 00041 { 00042 for (int i=0; i<n; i++) 00043 if (buckets[i]) {delete buckets[i];buckets[i] = NULL;} 00044 if (buckets) delete [] buckets; 00045 buckets = NULL; 00046 } 00047 00048 void AddValue(long bucket,long obj) 00049 { 00050 if (buckets[bucket]==NULL) 00051 buckets[bucket] = new IntArrayList(); 00052 //buckets[bucket].Add(obj); 00053 00054 long i = buckets[bucket]->Add(obj); 00055 if (i==0) 00056 occupied_buckets.Add(bucket); 00057 } 00058 00059 void Clear() 00060 { 00061 long*pI = occupied_buckets.Items; 00062 for(long* p = pI+occupied_buckets.Count-1; p>=pI; p--) 00063 buckets[*p]->Clear(); 00064 occupied_buckets.Clear(); 00065 } 00066 }; 00067 00068 DSS_NAMESPASE_END 00069 00070 #endif //_COLHASH_H__