summaryrefslogtreecommitdiff
path: root/src/csgtermnormalizer.h
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2012-07-01 00:08:45 (GMT)
committerMarius Kintel <marius@kintel.net>2012-07-01 00:08:45 (GMT)
commit54067c635d1a6de4509930ed9d8593f5373f2ba1 (patch)
tree5f5a8cd6989a30dd021bcca99a56ed0c0587a0c2 /src/csgtermnormalizer.h
parent431a24b4973069c86728f28efa62930354f92f6d (diff)
Fixed normalization bug: node limit wasn't checked properly and some cases triggered exponential expansion of nodes during normalization. Fixes #127
Diffstat (limited to 'src/csgtermnormalizer.h')
-rw-r--r--src/csgtermnormalizer.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/csgtermnormalizer.h b/src/csgtermnormalizer.h
index e5a2eca..c331f11 100644
--- a/src/csgtermnormalizer.h
+++ b/src/csgtermnormalizer.h
@@ -6,15 +6,20 @@
class CSGTermNormalizer
{
public:
- CSGTermNormalizer() {}
+ CSGTermNormalizer(size_t limit) : limit(limit) {}
~CSGTermNormalizer() {}
- shared_ptr<class CSGTerm> normalize(const shared_ptr<CSGTerm> &term, size_t limit);
+ shared_ptr<class CSGTerm> normalize(const shared_ptr<CSGTerm> &term);
private:
shared_ptr<CSGTerm> normalizePass(shared_ptr<CSGTerm> term) ;
- bool normalize_tail(shared_ptr<CSGTerm> &term);
+ bool match_and_replace(shared_ptr<CSGTerm> &term);
+ shared_ptr<CSGTerm> collapse_null_terms(const shared_ptr<CSGTerm> &term);
unsigned int count(const shared_ptr<CSGTerm> &term) const;
+
+ size_t limit;
+ size_t nodecount;
+ shared_ptr<class CSGTerm> rootnode;
};
#endif
contact: Jan Huwald // Impressum