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)