diff options
author | Marius Kintel <marius@kintel.net> | 2012-07-01 00:08:45 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2012-07-01 00:08:45 (GMT) |
commit | 54067c635d1a6de4509930ed9d8593f5373f2ba1 (patch) | |
tree | 5f5a8cd6989a30dd021bcca99a56ed0c0587a0c2 /src/csgtermnormalizer.h | |
parent | 431a24b4973069c86728f28efa62930354f92f6d (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.h | 11 |
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 |