Google OR-Tools v9.11
a fast and portable software suite for combinatorial optimization
|
#include <model.h>
Public Member Functions | |
Model ()=default | |
~Model () | |
Model (std::string name) | |
Model (const Model &)=delete | |
This type is neither copyable nor movable. | |
Model & | operator= (const Model &)=delete |
template<typename T > | |
T | Add (std::function< T(Model *)> f) |
template<typename T > | |
T | Get (std::function< T(const Model &)> f) const |
Similar to Add() but this is const. | |
template<typename T > | |
T * | GetOrCreate () |
template<typename T > | |
const T * | Get () const |
template<typename T > | |
T * | Mutable () const |
template<typename T > | |
T * | TakeOwnership (T *t) |
template<typename T > | |
T * | Create () |
template<typename T > | |
void | Register (T *non_owned_class) |
const std::string & | Name () const |
Class that owns everything related to a particular optimization model.
This class is actually a fully generic wrapper that can hold any type of constraints, watchers, solvers and provide a mechanism to wire them together.
|
default |
|
inline |
|
inlineexplicit |
|
delete |
This type is neither copyable nor movable.
|
inline |
This makes it possible to have a nicer API on the client side, and it allows both of these forms:
The second form is a bit nicer for the client and it also allows to store constraints and add them later. However, the function creating the constraint is slighly more involved.
We also have a templated return value for the functions that need it like
|
inline |
This returns a non-singleton object owned by the model and created with the T(Model* model) constructor if it exist or the T() constructor otherwise. It is just a shortcut to new + TakeOwnership().
|
inline |
Likes GetOrCreate() but do not create the object if it is non-existing.
This returns a const version of the object.
|
inline |
|
inline |
Returns an object of type T that is unique to this model (like a "local" singleton). This returns an already created instance or create a new one if needed using the T(Model* model) constructor if it exist or T() otherwise.
This works a bit like in a dependency injection framework and allows to really easily wire all the classes that make up a solver together. For instance a constraint can depends on the LiteralTrail, or the IntegerTrail or both, it can depend on a Watcher class to register itself in order to be called when needed and so on.
IMPORTANT: the Model* constructor functions shouldn't form a cycle between each other, otherwise this will crash the program.
New element.
|
inline |
|
inline |
|
inline |
|
inline |