# # Main authors: # Christian Schulte # # Copyright: # Christian Schulte, 2006 # # Last modified: # $Date: 2008-02-01 12:10:00 +0100 (Fri, 01 Feb 2008) $ by $Author: schulte $ # $Revision: 6034 $ # # This file is part of Gecode, the generic constraint # development environment: # http://www.gecode.org # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ## ## General settings ## ## Defines the name (Name), the variable type identifier (uppercase Name), ## and the namespace (Namespace) of the variable implementation to be ## generated. ## ## Ifdef defines a macro that is define if the variable type ## is enabled. ## ## Dispose defines whether this variable type provides a dispose ## function that must be called for all variables in a space when the ## space is destroyed. If it is omitted, false is assumed. ## ## Bits defines the number of bits that should be reserved for use by the ## variable implementation. The number of bits reduces the number of ## propagators that can subscribe to the variable implementation. [General] Name: Int Ifdef: GECODE_HAS_INT_VARS Namespace: Gecode::Int ## ## Definition of modification events ## ## ## ModEventHeader: give some text that precedes the definition ## of the modification events. ## ## ModEventFooter: give some text that comes after the definition ## of the modification events. ## ## ModEvent: defines a modification event ## The definition must always contain a Name line, either in the form ## Name: ## or ## Name: = ## where must be one of ## - FAILED: this is the modification event used when an operation ## resulted in failure. ## - NONE: this is the modification event used when an operation ## does nothing. ## - ASSIGNED: when the operation assigned the variable. ## - SUBSCRIBE: when a propagator subscribes to a variable, the ## propagator will be processed with that event initially. ## ## Note that at least the special cases "FAILED", "NONE", and "ASSIGNED" ## must be present. In case there are more events defined, then also ## "SUBSCRIBE" must be present. ## ## Additionally, for all modfication events but the special cases ## "FAILED" and "NONE" one needs to define the combination of ## modification events by ## Combine: =, ... (repeated) ## This means that the combination of the currently defined ## modification event together with results in . ## [ModEventHeader] /** * \defgroup TaskActorIntMEPC Integer modification events and propagation conditions * \ingroup TaskActorInt */ //@{ [ModEvent] Name: FAILED=FAILED /// Domain operation has resulted in failure [ModEvent] Name: NONE=NONE /// Domain operation has not changed domain [ModEvent] Name: VAL=ASSIGNED Combine: VAL=VAL, BND=VAL, DOM=VAL /// Domain operation has resulted in a value (assigned variable) [ModEvent] Name: BND=SUBSCRIBE Combine: VAL=VAL, BND=BND, DOM=BND /** * \brief Domain operation has changed the minimum or maximum of the domain * * Note that this implies that the domain has not resulted in a value. * * If a propagator subscribes to this variable, it will be processed * assuming a ME_INT_BND modification event. */ [ModEvent] Name: DOM Combine: VAL=VAL, BND=BND, DOM=DOM /** * \brief Domain operation has changed the domain * * Note that this implies that the domain has not resulted in a value * and that also the minimum and maximum of the domain have not changed. */ # [ModEventFooter]: Nothing ## ## Definition of propagation conditions ## ## ## PropCondHeader: give some text that precedes the definition ## of the propagation conditions. One can rely on the fact that ## the definitions of the propgation conditions come immediately ## after the definitions of the modification events. ## ## PropCondFooter: give some text that comes after the definition ## of the propagation conditions. ## ## PropCond: defines a propagation condition ## The definition must always contain a Name line, either in the form ## Name: ## or ## Name: = ## where must be ## - ASSIGNED: the condition corresponding to executing a ## propagator when a variable becomes assigned. ## ## Note that this special case must be present! ## ## Additionally, for all propagation conditions one must define ## the modification events that trigger execution of a propagator ## with the defined propagation condition. This is done by: ## ModEvents: , ... (repeeated) ## # [PropCondHeader]: Nothing [PropCond] Name: VAL=ASSIGNED ModEvents: VAL /** * \brief Propagate when a view becomes assigned (single value) * * If a propagator \a p depends on a view \a x with propagation * condition PC_INT_VAL, then \a p is propagated when a domain * update operation on \a x returns the modification event ME_INT_VAL. */ [PropCond] Name: BND ModEvents: VAL, BND /** * \brief Propagate when minimum or maximum of a view changes * * If a propagator \a p depends on a view \a x with propagation * condition PC_INT_BND, then \a p is propagated when a domain * update operation on \a x returns the modification events ME_INT_VAL * or ME_INT_BND. */ [PropCond] Name: DOM ModEvents: VAL, BND, DOM /** * \brief Propagate when domain changes * * If a propagator \a p depends on a view \a x with propagation * condition PC_INT_DOM, then \a p is propagated when a domain * update operation on \a x returns the modification event ME_INT_VAL, * ME_INT_BND, or ME_INT_DOM. */ [PropCondFooter] //@} ## ## At the end of the file there must be an [End] section. ## [End]