• Alexandre Duret-Lutz's avatar
    Change the way references are counted to speedup cloning. · 8e4e692e
    Alexandre Duret-Lutz authored
    Before this patch, every time you cloned a formula, the clone
    visitor would recurse into the entire AST to increment the
    reference count of all nodes.  When running ltl2tgba_fm on
    the formula generated by "LTLcounterLinear.pl 8", approx 27% of
    the time was spent in the clone visitor.
    
    After this patch, cloning a formula is just an increment of the
    reference count of the top node.  Children are decremented only
    when the top node's ref count is decremented to zero.  With this
    change, clone() and destroy() become constant time, the
    ltl2tgba_fm spend only 0.01% of the time cloning formulae.
    
    * src/ltlast/automatop.cc (~automatop): Decrement children.
    (instance): Decrement children if the instance already exists.
    * src/ltlast/binop.cc, src/ltlast/multop.cc, src/ltlast/unop.cc:
    Likewise.
    * src/ltlvisit/clone.cc (clone): Simplify, now we only need to
    call ref().
    * src/ltlvisit/destroy.cc (destroy): Simplify, now we only need
    to call unref().
    (destroy_visitor): Remove, no longer needed.
    8e4e692e
To find the state of this project's repository at the time of any of these versions, check out the tags.