]> granicus.if.org Git - re2c/commitdiff
Added comment.
authorUlya Trofimovich <skvadrik@gmail.com>
Sun, 9 Aug 2015 19:01:17 +0000 (20:01 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Sun, 9 Aug 2015 19:01:17 +0000 (20:01 +0100)
re2c/src/codegen/skeleton/skeleton.cc

index bb08241b58b5ffa1ef0c6b15f3e30f8408016b2c..bd3f19eebafe164af6fe1de4eaee6c4554097ebd 100644 (file)
@@ -57,6 +57,21 @@ bool Node::end () const
        return arcs.size () == 0;
 }
 
+/*
+ * note [estimating total size of paths in skeleton]
+ *
+ * With --skeleton switch we need to generate lots of data: strings that
+ * correspond to various paths in DFA and match given regular expression.
+ * For small graphs we can afford to generate all paths, for large graphs
+ * we can only generate path cover. Anyway we need to be able to estimate
+ * the amount of data to be generated (measured in skeleton arcs). Since
+ * it can easily exceed 32 bits (and 64 as well), calculations must stop
+ * as soon as certain limit is reached.
+ *
+ * To avoid any possible overflows all values are wrapped in a special
+ * truncated unsigned 32-bit integer type that checks for overflow on
+ * each binary operation or conversion from another type.
+ */
 arccount_t Node::estimate_size_all (arccount_t wid, arccount_t len)
 {
        if (end ())
@@ -89,6 +104,7 @@ arccount_t Node::estimate_size_all (arccount_t wid, arccount_t len)
        }
 }
 
+// see note [estimating total size of paths in skeleton]
 arccount_t Node::estimate_size_cover (arccount_t wid, arccount_t len)
 {
        if (path_len_init)