summaryrefslogtreecommitdiff
path: root/utils/nvtristriplib/vertexcache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/nvtristriplib/vertexcache.cpp')
-rw-r--r--utils/nvtristriplib/vertexcache.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/utils/nvtristriplib/vertexcache.cpp b/utils/nvtristriplib/vertexcache.cpp
new file mode 100644
index 0000000..56899b6
--- /dev/null
+++ b/utils/nvtristriplib/vertexcache.cpp
@@ -0,0 +1,88 @@
+
+
+#include "VertexCache.h"
+
+VertexCache::VertexCache()
+{
+ VertexCache(16);
+}
+
+
+VertexCache::VertexCache(int size)
+{
+ numEntries = size;
+
+ entries = new unsigned short[numEntries];
+
+ for(int i = 0; i < numEntries; i++)
+ entries[i] = -1;
+}
+
+
+VertexCache::~VertexCache()
+{
+ delete[] entries;
+}
+
+
+int VertexCache::At(int index)
+{
+ return entries[index];
+}
+
+
+void VertexCache::Set(int index, int value)
+{
+ entries[index] = value;
+}
+
+
+void VertexCache::Clear()
+{
+ for(int i = 0; i < numEntries; i++)
+ entries[i] = -1;
+}
+
+void VertexCache::Copy(VertexCache* inVcache)
+{
+ for(int i = 0; i < numEntries; i++)
+ {
+ inVcache->Set(i, entries[i]);
+ }
+}
+
+bool VertexCache::InCache(int entry)
+{
+ bool returnVal = false;
+
+ for(int i = 0; i < numEntries; i++)
+ {
+ if(entries[i] == entry)
+ {
+ returnVal = true;
+ break;
+ }
+ }
+
+ return returnVal;
+}
+
+
+int VertexCache::AddEntry(int entry)
+{
+ int removed;
+
+ removed = entries[numEntries - 1];
+
+ //push everything right one
+ for(int i = numEntries - 2; i >= 0; i--)
+ {
+ entries[i + 1] = entries[i];
+ }
+
+ entries[0] = entry;
+
+ return removed;
+}
+
+ \ No newline at end of file