DotNet Reference

DotNet Reference

ValCstPair.cs
Go to the documentation of this file.
1 // Copyright 2010-2018 Google LLC
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
15 {
16 using System;
17 using System.Collections.Generic;
18 
19 public interface IConstraintWithStatus
20 {
23 }
24 
25 public abstract class BaseEquality : IConstraintWithStatus
26 {
27  abstract public Solver solver();
28  abstract public IntVar Var();
29 
31  return a.solver().MakeSum(a.Var(), b.Var());
32  }
33  public static IntExpr operator+(BaseEquality a, long v) {
34  return a.solver().MakeSum(a.Var(), v);
35  }
36  public static IntExpr operator+(long v, BaseEquality a) {
37  return a.solver().MakeSum(a.Var(), v);
38  }
40  return a.solver().MakeDifference(a.Var(), b.Var());
41  }
42  public static IntExpr operator-(BaseEquality a, long v) {
43  return a.solver().MakeSum(a.Var(), -v);
44  }
45  public static IntExpr operator-(long v, BaseEquality a) {
46  return a.solver().MakeDifference(v, a.Var());
47  }
49  return a.solver().MakeProd(a.Var(), b.Var());
50  }
51  public static IntExpr operator*(BaseEquality a, long v) {
52  return a.solver().MakeProd(a.Var(), v);
53  }
54  public static IntExpr operator*(long v, BaseEquality a) {
55  return a.solver().MakeProd(a.Var(), v);
56  }
57  public static IntExpr operator/(BaseEquality a, long v) {
58  return a.solver().MakeDiv(a.Var(), v);
59  }
60  public static IntExpr operator-(BaseEquality a) {
61  return a.solver().MakeOpposite(a.Var());
62  }
63  public IntExpr Abs() {
64  return this.solver().MakeAbs(this.Var());
65  }
66  public IntExpr Square() {
67  return this.solver().MakeSquare(this.Var());
68  }
69  public static WrappedConstraint operator ==(BaseEquality a, long v) {
70  return new WrappedConstraint(a.solver().MakeEquality(a.Var(), v));
71  }
72  public static WrappedConstraint operator ==(long v, BaseEquality a) {
73  return new WrappedConstraint(a.solver().MakeEquality(a.Var(), v));
74  }
75  public static WrappedConstraint operator !=(BaseEquality a, long v) {
76  return new WrappedConstraint(a.solver().MakeNonEquality(a.Var(), v));
77  }
78  public static WrappedConstraint operator !=(long v, BaseEquality a) {
79  return new WrappedConstraint(a.solver().MakeNonEquality(a.Var(), v));
80  }
81  public static WrappedConstraint operator >=(BaseEquality a, long v) {
82  return new WrappedConstraint(a.solver().MakeGreaterOrEqual(a.Var(), v));
83  }
84  public static WrappedConstraint operator >=(long v, BaseEquality a) {
85  return new WrappedConstraint(a.solver().MakeLessOrEqual(a.Var(), v));
86  }
87  public static WrappedConstraint operator >(BaseEquality a, long v) {
88  return new WrappedConstraint(a.solver().MakeGreater(a.Var(), v));
89  }
90  public static WrappedConstraint operator >(long v, BaseEquality a) {
91  return new WrappedConstraint(a.solver().MakeLess(a.Var(), v));
92  }
93  public static WrappedConstraint operator <=(BaseEquality a, long v) {
94  return new WrappedConstraint(a.solver().MakeLessOrEqual(a.Var(), v));
95  }
96  public static WrappedConstraint operator <=(long v, BaseEquality a) {
97  return new WrappedConstraint(a.solver().MakeGreaterOrEqual(a.Var(), v));
98  }
99  public static WrappedConstraint operator <(BaseEquality a, long v) {
100  return new WrappedConstraint(a.solver().MakeLess(a.Var(), v));
101  }
102  public static WrappedConstraint operator <(long v, BaseEquality a) {
103  return new WrappedConstraint(a.solver().MakeGreater(a.Var(), v));
104  }
106  return new WrappedConstraint(a.solver().MakeGreaterOrEqual(a.Var(),
107  b.Var()));
108  }
110  return new WrappedConstraint(a.solver().MakeGreater(a.Var(), b.Var()));
111  }
113  return new WrappedConstraint(a.solver().MakeLessOrEqual(a.Var(), b.Var()));
114  }
116  return new WrappedConstraint(a.solver().MakeLess(a.Var(), b.Var()));
117  }
119  return new ConstraintEquality(a, b, true);
120  }
122  return new ConstraintEquality(a, b, false);
123  }
124 }
125 
127 {
128  public bool Val { get; set; }
129 
130  public Constraint Cst { get; set; }
131 
132  public WrappedConstraint(Constraint cst) : this(true, cst) {}
133 
134  public WrappedConstraint(bool val) : this(val, null) {}
135 
136  public WrappedConstraint(bool val, Constraint cst)
137  {
138  this.Val = val;
139  this.Cst = cst;
140  }
141 
142  public static implicit operator bool(WrappedConstraint valCstPair)
143  {
144  return valCstPair.Val;
145  }
146 
147  public static implicit operator Constraint(WrappedConstraint valCstPair)
148  {
149  return valCstPair.Cst;
150  }
151 
152  public static implicit operator IntVar(WrappedConstraint eq)
153  {
154  return eq.Var();
155  }
156 
157  public static implicit operator IntExpr(WrappedConstraint eq)
158  {
159  return eq.Var();
160  }
161 
162  public override Solver solver()
163  {
164  return this.Cst.solver();
165  }
166 
167  public override IntVar Var()
168  {
169  return Cst.Var();
170  }
171 }
172 
174 {
175  public IntExprEquality(IntExpr a, IntExpr b, bool equality)
176  {
177  this.left_ = a;
178  this.right_ = b;
179  this.equality_ = equality;
180  }
181 
182  bool IsTrue()
183  {
184  return (object)left_ == (object)right_ ? equality_ : !equality_;
185  }
186 
187  Constraint ToConstraint()
188  {
189  return equality_ ?
190  left_.solver().MakeEquality(left_.Var(), right_.Var()) :
191  left_.solver().MakeNonEquality(left_.Var(), right_.Var());
192  }
193 
194  public static bool operator true(IntExprEquality eq)
195  {
196  return eq.IsTrue();
197  }
198 
199  public static bool operator false(IntExprEquality eq)
200  {
201  return !eq.IsTrue();
202  }
203 
204  public static implicit operator Constraint(IntExprEquality eq)
205  {
206  return eq.ToConstraint();
207  }
208 
209  public override IntVar Var()
210  {
211  return equality_ ?
212  left_.solver().MakeIsEqualVar(left_, right_) :
213  left_.solver().MakeIsDifferentVar(left_, right_);
214  }
215 
216  public static implicit operator IntVar(IntExprEquality eq)
217  {
218  return eq.Var();
219  }
220 
221  public static implicit operator IntExpr(IntExprEquality eq)
222  {
223  return eq.Var();
224  }
225 
226  public override Solver solver()
227  {
228  return left_.solver();
229  }
230 
231  private IntExpr left_;
232  private IntExpr right_;
233  private bool equality_;
234 }
235 
237 {
240  bool equality)
241  {
242  this.left_ = a;
243  this.right_ = b;
244  this.equality_ = equality;
245  }
246 
247  bool IsTrue()
248  {
249  return (object)left_ == (object)right_ ? equality_ : !equality_;
250  }
251 
252  Constraint ToConstraint()
253  {
254  return equality_ ?
255  left_.solver().MakeEquality(left_.Var(), right_.Var()) :
256  left_.solver().MakeNonEquality(left_.Var(), right_.Var());
257  }
258 
259  public static bool operator true(ConstraintEquality eq)
260  {
261  return eq.IsTrue();
262  }
263 
264  public static bool operator false(ConstraintEquality eq)
265  {
266  return !eq.IsTrue();
267  }
268 
269  public static implicit operator Constraint(ConstraintEquality eq)
270  {
271  return eq.ToConstraint();
272  }
273 
274  public override IntVar Var()
275  {
276  return equality_ ?
277  left_.solver().MakeIsEqualVar(left_.Var(), right_.Var()) :
278  left_.solver().MakeIsDifferentVar(left_.Var(), right_.Var());
279  }
280 
281  public static implicit operator IntVar(ConstraintEquality eq)
282  {
283  return eq.Var();
284  }
285 
286  public static implicit operator IntExpr(ConstraintEquality eq)
287  {
288  return eq.Var();
289  }
290 
291  public override Solver solver()
292  {
293  return left_.solver();
294  }
295 
296  private IConstraintWithStatus left_;
297  private IConstraintWithStatus right_;
298  private bool equality_;
299 }
300 } // namespace Google.OrTools.ConstraintSolver
static IntExpr operator*(BaseEquality a, BaseEquality b)
Definition: ValCstPair.cs:48
Definition: ValCstPair.cs:20
IntExprEquality(IntExpr a, IntExpr b, bool equality)
Definition: ValCstPair.cs:175
Definition: IntVar.cs:18
IntExpr Square()
Definition: ValCstPair.cs:66
Definition: IntExpr.cs:18
abstract IntVar Var()
IntExpr MakeProd(IntExpr left, IntExpr right)
IntExpr MakeAbs(IntExpr expr)
WrappedConstraint(bool val)
Definition: ValCstPair.cs:134
static WrappedConstraint operator>(BaseEquality a, long v)
Definition: ValCstPair.cs:87
Definition: Assignment.cs:11
static WrappedConstraint operator!=(BaseEquality a, long v)
Definition: ValCstPair.cs:75
WrappedConstraint(bool val, Constraint cst)
Definition: ValCstPair.cs:136
static IntExpr operator-(BaseEquality a, BaseEquality b)
Definition: ValCstPair.cs:39
IntVar Var()
Constraint MakeLess(IntExpr left, IntExpr right)
Constraint MakeGreaterOrEqual(IntExpr left, IntExpr right)
Constraint MakeEquality(IntExpr left, IntExpr right)
static IntExpr operator*(long v, BaseEquality a)
Definition: ValCstPair.cs:54
Constraint MakeGreater(IntExpr left, IntExpr right)
IntExpr MakeSquare(IntExpr expr)
static IntExpr operator-(BaseEquality a)
Definition: ValCstPair.cs:60
static WrappedConstraint operator<(BaseEquality a, long v)
Definition: ValCstPair.cs:99
virtual IntVar Var()
static WrappedConstraint operator>=(BaseEquality a, long v)
Definition: ValCstPair.cs:81
override Solver solver()
Definition: ValCstPair.cs:291
Definition: ValCstPair.cs:174
static IntExpr operator-(long v, BaseEquality a)
Definition: ValCstPair.cs:45
Solver solver()
IntExpr MakeSum(IntExpr left, IntExpr right)
static IntExpr operator-(BaseEquality a, long v)
Definition: ValCstPair.cs:42
IntVar MakeIsDifferentVar(IntExpr v1, IntExpr v2)
Constraint MakeLessOrEqual(IntExpr left, IntExpr right)
override IntVar Var()
Definition: ValCstPair.cs:167
override Solver solver()
Definition: ValCstPair.cs:162
override Solver solver()
Definition: ValCstPair.cs:226
static IntExpr operator+(BaseEquality a, BaseEquality b)
Definition: ValCstPair.cs:30
Definition: ValCstPair.cs:127
IntExpr MakeOpposite(IntExpr expr)
Constraint Cst
Definition: ValCstPair.cs:130
static IntExpr operator+(BaseEquality a, long v)
Definition: ValCstPair.cs:33
IntExpr MakeDifference(IntExpr left, IntExpr right)
bool Val
Definition: ValCstPair.cs:128
static WrappedConstraint operator<=(BaseEquality a, long v)
Definition: ValCstPair.cs:93
Constraint MakeNonEquality(IntExpr left, IntExpr right)
Definition: ValCstPair.cs:237
Definition: ValCstPair.cs:26
static IntExpr operator*(BaseEquality a, long v)
Definition: ValCstPair.cs:51
static WrappedConstraint operator==(BaseEquality a, long v)
Definition: ValCstPair.cs:69
abstract Solver solver()
static IntExpr operator+(long v, BaseEquality a)
Definition: ValCstPair.cs:36
Solver solver()
static IntExpr operator/(BaseEquality a, long v)
Definition: ValCstPair.cs:57
override IntVar Var()
Definition: ValCstPair.cs:274
override IntVar Var()
Definition: ValCstPair.cs:209
IntExpr Abs()
Definition: ValCstPair.cs:63
virtual IntVar Var()
Definition: IntExpr.cs:95
IntVar MakeIsEqualVar(IntExpr v1, IntExpr v2)
IntExpr MakeDiv(IntExpr expr, long value)
WrappedConstraint(Constraint cst)
Definition: ValCstPair.cs:132
ConstraintEquality(IConstraintWithStatus a, IConstraintWithStatus b, bool equality)
Definition: ValCstPair.cs:238