org.cpsolver.ifs.assignment.context

## Class VariableWithContext<V extends Variable<V,T>,T extends Value<V,T>,C extends AssignmentContext>

- java.lang.Object
- - org.cpsolver.ifs.model.Variable<V,T>
  - - org.cpsolver.ifs.assignment.context.VariableWithContext<V,T,C>

- Type Parameters:
    `V` - Variable
    `T` - Value
    `C` - Assignment Context
  All Implemented Interfaces:
    Comparable<V>, CanHoldContext, HasAssignmentContext<V,T,C>
  Direct Known Subclasses:
    Lecture, Request

      public abstract class VariableWithContext<V extends Variable<V,T>,T extends Value<V,T>,C extends AssignmentContext>
      extends Variable<V,T>
      implements HasAssignmentContext<V,T,C>, CanHoldContext

  A variable with an assignment context. In order to be able to hold multiple assignments in memory it is desired for all the assignment dependent data a variable may need (to effectively enumerate its objectives), to store these data in a separate class (implementing the `AssignmentContext` interface). This context is created by calling `HasAssignmentContext.createAssignmentContext(Assignment)` and accessed by `ConstraintWithContext.getContext(Assignment)`.
  Version:
    IFS 1.3 (Iterative Forward Search)
    Copyright (C) 2014 Tomáš Müller
    muller@unitime.org
    http://muller.unitime.org
    This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
    This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License along with this library; if not see http://www.gnu.org/licenses.
  See Also:
    `AssignmentContext`

- - ### Field Summary

    - ### Fields inherited from class org.cpsolver.ifs.model.Variable

      `iId, iIndex, iValue`

    - ### Fields inherited from interface org.cpsolver.ifs.assignment.context.CanHoldContext

      `sMaxSize`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `VariableWithContext()` Constructor
    `VariableWithContext(T initialValue)` Constructor

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `AssignmentContextReference<V,T,C>` | `getAssignmentContextReference()` Returns an assignment context reference
    `AssignmentContext[]` | `getContext()` An array of `CanHoldContext.sMaxSize` assignment contexts
    `C` | `getContext(Assignment<V,T> assignment)` Returns an assignment context associated with this extension.
    `void` | `setAssignmentContextReference(AssignmentContextReference<V,T,C> reference)` Store an assignment context reference that was given for the class by the `Model.createReference(HasAssignmentContext)`.
    `void` | `setModel(Model<V,T> model)` Set the model to which the variable belongs to

    - ### Methods inherited from class org.cpsolver.ifs.model.Variable

      `addContstraint, addVariableListener, assign, compareTo, constraints, constraintVariables, equals, getAssignment, getAssignment, getAssignments, getBestAssignment, getBestAssignmentIteration, getDescription, getExtra, getId, getIndex, getInitialAssignment, getLastIteration, getModel, getName, getVariableListeners, hardConstraints, hasAssignment, hasAssignment, hashCode, hasInitialAssignment, hasValues, removeContstraint, removeInitialValue, removeValue, removeVariableListener, setAssignment, setBestAssignment, setExtra, setIndex, setInitialAssignment, setLastIteration, setValues, softConstraints, toString, unassign, values, values, variableAssigned, variableUnassigned`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface org.cpsolver.ifs.assignment.context.HasAssignmentContext

      `createAssignmentContext`

- - ### Constructor Detail

    - #### VariableWithContext

          public VariableWithContext()

      Constructor

    - #### VariableWithContext

          public VariableWithContext(T initialValue)

      Constructor
      Parameters:
        `initialValue` - initial value (minimal-perturbation problem)

  - ### Method Detail

    - #### setModel

          public void setModel(Model<V,T> model)

      Description copied from class: `Variable`
      Set the model to which the variable belongs to
      Overrides:
        `setModel` in class `Variable<V extends Variable<V,T>,T extends Value<V,T>>`
      Parameters:
        `model` - problem model

    - #### getContext

          public C getContext(Assignment<V,T> assignment)

      Returns an assignment context associated with this extension. If there is no assignment context associated with this extension yet, one is created using the `HasAssignmentContext.createAssignmentContext(Assignment)` method. From that time on, this context is kept with the assignment.
      Specified by:
        `getContext` in interface `HasAssignmentContext<V extends Variable<V,T>,T extends Value<V,T>,C extends AssignmentContext>`
      Parameters:
        `assignment` - given assignment
      Returns:
        assignment context associated with this extension and the given assignment

    - #### getAssignmentContextReference

          public AssignmentContextReference<V,T,C> getAssignmentContextReference()

      Description copied from interface: `HasAssignmentContext`
      Returns an assignment context reference
      Specified by:
        `getAssignmentContextReference` in interface `HasAssignmentContext<V extends Variable<V,T>,T extends Value<V,T>,C extends AssignmentContext>`
      Returns:
        reference provided by the model by calling `Model.createReference(HasAssignmentContext)` during initialization

    - #### setAssignmentContextReference

          public void setAssignmentContextReference(AssignmentContextReference<V,T,C> reference)

      Description copied from interface: `HasAssignmentContext`
      Store an assignment context reference that was given for the class by the `Model.createReference(HasAssignmentContext)`.
      Specified by:
        `setAssignmentContextReference` in interface `HasAssignmentContext<V extends Variable<V,T>,T extends Value<V,T>,C extends AssignmentContext>`
      Parameters:
        `reference` - reference provided by the model by calling `Model.createReference(HasAssignmentContext)` during initialization

    - #### getContext

          public AssignmentContext[] getContext()

      Description copied from interface: `CanHoldContext`
      An array of `CanHoldContext.sMaxSize` assignment contexts
      Specified by:
        `getContext` in interface `CanHoldContext`
      Returns:
        assignment contexts