Used by backtrack search methods. Allows to copy / restore the current state using Store::store and Store::restore methods. All storable data modifications are trailed into specific stacks.
Trailing stacks are associated to each storable type:
Store::storeValue for storable domain values StoreValue (value supports, etc)
Store::storeCost for storable costs StoreCost (inside cost functions, etc)
Store::storeDomain for enumerated domains (to manage holes inside domains)
Store::storeConstraint for backtrackable lists of constraints
Store::storeVariable for backtrackable lists of variables
Store::storeSeparator for backtrackable lists of separators (see tree decomposition methods)
Store::storeBigInteger for very large integers StoreBigInteger used in solution counting methods
Memory for each stack is dynamically allocated by part of with x initialized to ::STORE_SIZE and increased when needed.
Note
storable data are not trailed at depth 0.
Warning
StoreInt uses Store::storeValue stack (it assumes Value is encoded as int!).
Current storable data management is not multi-threading safe! (Store is a static virtual class relying on StoreBasic<T> static members)