summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CGALCache.cc17
-rw-r--r--src/CGALCache.h28
2 files changed, 45 insertions, 0 deletions
diff --git a/src/CGALCache.cc b/src/CGALCache.cc
new file mode 100644
index 0000000..6bdad41
--- /dev/null
+++ b/src/CGALCache.cc
@@ -0,0 +1,17 @@
+#include "CGALCache.h"
+#include "printutils.h"
+#include "CGAL_Nef_polyhedron.h"
+
+CGALCache *CGALCache::inst = NULL;
+
+void CGALCache::insert(const std::string &id, const CGAL_Nef_polyhedron &N)
+{
+ this->cache.insert(id, new CGAL_Nef_polyhedron(N), N.weight());
+ PRINTF("CGAL Cache insert: %s (%d verts)", id.substr(0, 40).c_str(), N.weight());
+}
+
+void CGALCache::print()
+{
+ PRINTF("CGAL Polyhedrons in cache: %d", this->cache.size());
+ PRINTF("Vertices in cache: %d", this->cache.totalCost());
+}
diff --git a/src/CGALCache.h b/src/CGALCache.h
new file mode 100644
index 0000000..7d3a2d9
--- /dev/null
+++ b/src/CGALCache.h
@@ -0,0 +1,28 @@
+#ifndef CGALCACHE_H_
+#define CGALCACHE_H_
+
+#include "myqhash.h"
+#include <QCache>
+
+/*!
+*/
+class CGALCache
+{
+public:
+ CGALCache(size_t limit = 100000) : cache(limit) {}
+
+ static CGALCache *instance() { if (!inst) inst = new CGALCache; return inst; }
+
+ bool contains(const std::string &id) const { return this->cache.contains(id); }
+ const class CGAL_Nef_polyhedron &get(const std::string &id) const { return *this->cache[id]; }
+ void insert(const std::string &id, const CGAL_Nef_polyhedron &N);
+ void clear() { cache.clear(); }
+ void print();
+
+private:
+ static CGALCache *inst;
+
+ QCache<std::string, CGAL_Nef_polyhedron> cache;
+};
+
+#endif
contact: Jan Huwald // Impressum