@@ -108,23 +108,74 @@ namespace Gecode {
108108 }
109109
110110 void
111- assign (Home home, const FloatVarArgs& x, FloatAssign fa,
111+ assign (Home home, const FloatVarArgs& x,
112+ FloatVarBranch vars, FloatAssign vals,
112113 FloatBranchFilter bf,
113114 FloatVarValPrint vvp) {
114115 using namespace Float ;
115116 if (home.failed ()) return ;
116117 ViewArray<FloatView> xv (home,x);
117118 ViewSel<FloatView>* vs[1 ] = {
118- new (home) ViewSelNone<FloatView>(home,FLOAT_VAR_NONE () )
119+ new (home) ViewSelNone<FloatView>(home,vars )
119120 };
120121 postviewvalbrancher<FloatView,1 ,FloatNumBranch,1 >
121- (home,xv,vs,Branch::valselcommit (home,fa),bf,vvp);
122+ (home,xv,vs,Branch::valselcommit (home,vals),bf,vvp);
123+ }
124+
125+ void
126+ assign (Home home, const FloatVarArgs& x,
127+ TieBreak<FloatVarBranch> vars, FloatAssign vals,
128+ FloatBranchFilter bf,
129+ FloatVarValPrint vvp) {
130+ using namespace Float ;
131+ if (home.failed ()) return ;
132+ vars.a .expand (home,x);
133+ if ((vars.a .select () == FloatVarBranch::SEL_NONE ) ||
134+ (vars.a .select () == FloatVarBranch::SEL_RND ))
135+ vars.b = FLOAT_VAR_NONE ();
136+ vars.b .expand (home,x);
137+ if ((vars.b .select () == FloatVarBranch::SEL_NONE ) ||
138+ (vars.b .select () == FloatVarBranch::SEL_RND ))
139+ vars.c = FLOAT_VAR_NONE ();
140+ vars.c .expand (home,x);
141+ if ((vars.c .select () == FloatVarBranch::SEL_NONE ) ||
142+ (vars.c .select () == FloatVarBranch::SEL_RND ))
143+ vars.d = FLOAT_VAR_NONE ();
144+ vars.d .expand (home,x);
145+ if (vars.b .select () == FloatVarBranch::SEL_NONE ) {
146+ assign (home,x,vars.a ,vals,bf,vvp);
147+ } else {
148+ ViewArray<FloatView> xv (home,x);
149+ ValSelCommitBase<FloatView,FloatNumBranch>*
150+ vsc = Branch::valselcommit (home,vals);
151+ if (vars.c .select () == FloatVarBranch::SEL_NONE ) {
152+ ViewSel<FloatView>* vs[2 ] = {
153+ Branch::viewsel (home,vars.a ),Branch::viewsel (home,vars.b )
154+ };
155+ postviewvalbrancher<FloatView,2 ,FloatNumBranch,1 >
156+ (home,xv,vs,vsc,bf,vvp);
157+ } else if (vars.d .select () == FloatVarBranch::SEL_NONE ) {
158+ ViewSel<FloatView>* vs[3 ] = {
159+ Branch::viewsel (home,vars.a ),Branch::viewsel (home,vars.b ),
160+ Branch::viewsel (home,vars.c )
161+ };
162+ postviewvalbrancher<FloatView,3 ,FloatNumBranch,1 >
163+ (home,xv,vs,vsc,bf,vvp);
164+ } else {
165+ ViewSel<FloatView>* vs[4 ] = {
166+ Branch::viewsel (home,vars.a ),Branch::viewsel (home,vars.b ),
167+ Branch::viewsel (home,vars.c ),Branch::viewsel (home,vars.d )
168+ };
169+ postviewvalbrancher<FloatView,4 ,FloatNumBranch,1 >
170+ (home,xv,vs,vsc,bf,vvp);
171+ }
172+ }
122173 }
123174
124175 void
125- assign (Home home, FloatVar x, FloatAssign fa , FloatVarValPrint vvp) {
176+ assign (Home home, FloatVar x, FloatAssign vals , FloatVarValPrint vvp) {
126177 FloatVarArgs xv (1 ); xv[0 ]=x;
127- assign (home, xv, fa , nullptr , vvp);
178+ assign (home, xv, FLOAT_VAR_NONE (), vals , nullptr , vvp);
128179 }
129180
130181}
0 commit comments