org.cpsolver.ifs.assignment.context

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

- java.lang.Object
- - org.cpsolver.ifs.extension.Extension<V,T>
  - - org.cpsolver.ifs.assignment.context.ExtensionWithContext<V,T,C>

- Type Parameters:
    `V` - Variable
    `T` - Value
    `C` - Assignment Context
  All Implemented Interfaces:
    CanHoldContext, HasAssignmentContext<V,T,C>, ModelListener<V,T>
  Direct Known Subclasses:
    DistanceConflict, MacPropagation, MacRevised, SearchIntensification, StudentQuality, TimeOverlapsCounter

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

  An extension with an assignment context. In order to be able to hold multiple assignments in memory it is desired for all the assignment dependent data an extension 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.
  Author:
    Tomáš Müller
  See Also:
    `AssignmentContext`

- - ### Field Summary

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

      `sMaxSize`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ExtensionWithContext(Solver<V,T> solver, DataProperties properties)`

  - ### 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.
    `boolean` | `init(Solver<V,T> solver)` Initialization -- called before the solver is started
    `void` | `setAssignmentContextReference(AssignmentContextReference<V,T,C> reference)` Store an assignment context reference that was given for the class by the `Model.createReference(HasAssignmentContext)`.
    `void` | `unregister(Model<V,T> model)` Unregistration of a model.

    - ### Methods inherited from class org.cpsolver.ifs.extension.Extension

      `afterAssigned, afterUnassigned, beforeAssigned, beforeUnassigned, constraintAdded, constraintRemoved, getModel, getProperties, getSolver, isRegistered, register, variableAdded, variableRemoved`

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

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

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

      `createAssignmentContext`

- - ### Constructor Detail

    - #### ExtensionWithContext

          public ExtensionWithContext(Solver<V,T> solver,
                                      DataProperties properties)

  - ### Method Detail

    - #### init

          public boolean init(Solver<V,T> solver)

      Description copied from class: `Extension`
      Initialization -- called before the solver is started
      Specified by:
        `init` in interface `ModelListener<V extends Variable<V,T>,T extends Value<V,T>>`
      Overrides:
        `init` in class `Extension<V extends Variable<V,T>,T extends Value<V,T>>`
      Parameters:
        `solver` - IFS solver
      Returns:
        true if successfully initialized

    - #### 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

    - #### unregister

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

      Description copied from class: `Extension`
      Unregistration of a model. This is called by the solver when extension is removed.
      Overrides:
        `unregister` in class `Extension<V extends Variable<V,T>,T extends Value<V,T>>`
      Parameters:
        `model` - problem model