00001 00033 #ifndef VERTEX_CACHE_H 00034 00035 #define VERTEX_CACHE_H 00036 00037 class VertexCache 00038 { 00039 00040 public: 00041 00042 VertexCache(int size) 00043 { 00044 numEntries = size; 00045 00046 entries = new int[numEntries]; 00047 00048 for(int i = 0; i < numEntries; i++) 00049 entries[i] = -1; 00050 } 00051 00052 VertexCache() { VertexCache(16); } 00053 ~VertexCache() { delete[] entries; entries = 0; } 00054 00055 bool InCache(int entry) 00056 { 00057 bool returnVal = false; 00058 for(int i = 0; i < numEntries; i++) 00059 { 00060 if(entries[i] == entry) 00061 { 00062 returnVal = true; 00063 break; 00064 } 00065 } 00066 00067 return returnVal; 00068 } 00069 00070 int AddEntry(int entry) 00071 { 00072 int removed; 00073 00074 removed = entries[numEntries - 1]; 00075 00076 //push everything right one 00077 for(int i = numEntries - 2; i >= 0; i--) 00078 { 00079 entries[i + 1] = entries[i]; 00080 } 00081 00082 entries[0] = entry; 00083 00084 return removed; 00085 } 00086 00087 void Clear() 00088 { 00089 memset(entries, -1, sizeof(int) * numEntries); 00090 } 00091 00092 void Copy(VertexCache* inVcache) 00093 { 00094 for(int i = 0; i < numEntries; i++) 00095 { 00096 inVcache->Set(i, entries[i]); 00097 } 00098 } 00099 00100 int At(int index) { return entries[index]; } 00101 void Set(int index, int value) { entries[index] = value; } 00102 00103 private: 00104 00105 int *entries; 00106 int numEntries; 00107 00108 }; 00109 00110 #endif