Constant formula cells, better lens support, performance
Formula cells that cannot change will be tagged as constant:
Added the constant field to the Cell type.
Added the constant? predicate which returns the cell if it is a formula cell and it depends only on values and/or other formula cells that are constant.
Better support for lenses:
Added arity to formula function to accept lens update function.
Added arity to set-formula! function to accept lens update function.
Added arity to set-cell!= macro to accept lens update function.
Various performance improvements:
Cell type fields are now native JS arrays, not CLJS collections.
Replace CLJS priority map used in propagation with a sorted JS array.
Eliminate seqs wherever possible by looping instead.
Remove redundant operations during cell creation.
Add simpler, more efficient impl. for simple cell-doseq use case.
Misc:
Add docstrings for everything.
Use clojure.core/destructure instead of cljs.core/destructure when compiling in an older version of CLJS that does not have it.
Constant formula cells, better lens support, performance
Formula cells that cannot change will be tagged as constant:
constant
field to theCell
type.constant?
predicate which returns the cell if it is a formula cell and it depends only on values and/or other formula cells that are constant.Better support for lenses:
formula
function to accept lens update function.set-formula!
function to accept lens update function.set-cell!=
macro to accept lens update function.Various performance improvements:
cell-doseq
use case.Misc:
clojure.core/destructure
instead ofcljs.core/destructure
when compiling in an older version of CLJS that does not have it.