DotNet Reference

.Net Reference

NetDecisionBuilder.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
14using System;
15using System.Collections;
16
18{
27 public class NetDecisionBuilder : DecisionBuilder
28 {
33 public override Decision NextWrapper(Solver solver)
34 {
35 try
36 {
37 return Next(solver);
38 }
39 catch (ApplicationException /*e*/)
40 {
41 // TODO(user): Catch only fail exceptions.
42 return solver.MakeFailDecision();
43 }
44 }
48 public virtual Decision Next(Solver solver)
49 {
50 return null;
51 }
52 }
53
62 public class NetDecision : Decision
63 {
68 public override void ApplyWrapper(Solver solver)
69 {
70 try
71 {
72 Apply(solver);
73 }
74 catch (ApplicationException /*e*/)
75 {
76 // TODO(user): Catch only fail exceptions.
77 solver.ShouldFail();
78 }
79 }
83 public virtual void Apply(Solver solver)
84 {
85 // By default, do nothing
86 }
87
88 public override void RefuteWrapper(Solver solver)
89 {
90 try
91 {
92 Refute(solver);
93 }
94 catch (ApplicationException /*e*/)
95 {
96 // TODO(user): Catch only fail exceptions.
97 solver.ShouldFail();
98 }
99 }
103 public virtual void Refute(Solver solver)
104 {
105 }
106 }
107
108 public class NetDemon : Demon
109 {
113 public override void RunWrapper(Solver solver)
114 {
115 try
116 {
117 Run(solver);
118 }
119 catch (ApplicationException /*e*/)
120 {
121 // TODO(user): Check that this is indeed a fail. Try implementing
122 // custom exceptions (hard).
123 solver.ShouldFail();
124 }
125 }
129 public virtual void Run(Solver solver)
130 {
131 }
132 public override int Priority()
133 {
134 return Solver.NORMAL_PRIORITY;
135 }
136 public override string ToString()
137 {
138 return "NetDemon";
139 }
140 }
141
143 {
144 public NetConstraint(Solver s) : base(s)
145 {
146 }
147
148 public override void InitialPropagateWrapper()
149 {
150 try
151 {
153 }
154 catch (ApplicationException /*e*/)
155 {
156 solver().ShouldFail();
157 }
158 }
159 public virtual void InitialPropagate()
160 {
161 }
162 public override string ToString()
163 {
164 return "NetConstraint";
165 }
166 }
167
168 public class IntVarEnumerator : IEnumerator
169 {
170 private IntVarIterator iterator_;
171
172 // Enumerators are positioned before the first element
173 // until the first MoveNext() call.
174 private bool first_ = true;
175
177 {
178 iterator_ = iterator;
179 }
180
181 public bool MoveNext()
182 {
183 if (first_)
184 {
185 iterator_.Init();
186 first_ = false;
187 }
188 else
189 {
190 iterator_.Next();
191 }
192 return iterator_.Ok();
193 }
194
195 public void Reset()
196 {
197 first_ = true;
198 }
199
200 object IEnumerator.Current
201 {
202 get {
203 return Current;
204 }
205 }
206
207 public long Current
208 {
209 get {
210 if (!first_ && iterator_.Ok())
211 {
212 return iterator_.Value();
213 }
214 else
215 {
216 throw new InvalidOperationException();
217 }
218 }
219 }
220 }
221
222 public partial class IntVarIterator : BaseObject, IEnumerable
223 {
224 IEnumerator IEnumerable.GetEnumerator()
225 {
226 return (IEnumerator)GetEnumerator();
227 }
228
230 {
231 return new IntVarEnumerator(this);
232 }
233 }
234} // namespace Google.OrTools.ConstraintSolver
using System
Definition: Program.cs:14
This class acts as a intermediate step between a c++ decision builder and a .Net one.
override Decision NextWrapper(Solver solver)
This methods wraps the calls to next() and catches fail exceptions.
virtual Decision Next(Solver solver)
This is the new method to subclass when defining a .Net decision builder.
This class acts as a intermediate step between a c++ decision and a .Net one.
virtual void Apply(Solver solver)
This is a new method to subclass when defining a .Net decision.
override void RefuteWrapper(Solver solver)
virtual void Refute(Solver solver)
This is a new method to subclass when defining a .Net decision.
override void ApplyWrapper(Solver solver)
This methods wraps the calls to Apply() and catches fail exceptions.
virtual void Run(Solver solver)
This is the new method to subclass when defining a .Net decision builder.
override void RunWrapper(Solver solver)
This methods wraps the calls to next() and catches fail exceptions.