branch-var.hpp /usr/include/gecode/kernel.hh Gecode::VarBranch Gecode /*-*-mode:C++;c-basic-offset:2;indent-tabs-mode:nil-*-*/ /* *Mainauthors: *ChristianSchulte<schulte@gecode.org> * *Copyright: *ChristianSchulte,2012 * *Lastmodified: *$Date:2013-05-2221:29:33+0200(Wed,22May2013)$by$Author:tack$ *$Revision:13656$ * *ThisfileispartofGecode,thegenericconstraint *developmentenvironment: *http://www.gecode.org * *Permissionisherebygranted,freeofcharge,toanypersonobtaining *acopyofthissoftwareandassociateddocumentationfiles(the *"Software"),todealintheSoftwarewithoutrestriction,including *withoutlimitationtherightstouse,copy,modify,merge,publish, *distribute,sublicense,and/orsellcopiesoftheSoftware,andto *permitpersonstowhomtheSoftwareisfurnishedtodoso,subjectto *thefollowingconditions: * *Theabovecopyrightnoticeandthispermissionnoticeshallbe *includedinallcopiesorsubstantialportionsoftheSoftware. * *THESOFTWAREISPROVIDED"ASIS",WITHOUTWARRANTYOFANYKIND, *EXPRESSORIMPLIED,INCLUDINGBUTNOTLIMITEDTOTHEWARRANTIESOF *MERCHANTABILITY,FITNESSFORAPARTICULARPURPOSEAND *NONINFRINGEMENT.INNOEVENTSHALLTHEAUTHORSORCOPYRIGHTHOLDERSBE *LIABLEFORANYCLAIM,DAMAGESOROTHERLIABILITY,WHETHERINANACTION *OFCONTRACT,TORTOROTHERWISE,ARISINGFROM,OUTOFORINCONNECTION *WITHTHESOFTWAREORTHEUSEOROTHERDEALINGSINTHESOFTWARE. * */ namespaceGecode{ typedefdouble(*BranchTbl)(constSpace&home,doublew,doubleb); classVarBranch{ protected: BranchTbl_tbl; Rnd_rnd; double_decay; AFC_afc; Activity_act; VoidFunction_mf; public: VarBranch(BranchTblt); VarBranch(Rndr); VarBranch(doubled,BranchTblt); VarBranch(AFCa,BranchTblt); VarBranch(Activitya,BranchTblt); VarBranch(void(*f)(void),BranchTblt); BranchTbltbl(void)const; Rndrnd(void)const; doubledecay(void)const; AFCafc(void)const; voidafc(AFCa); Activityactivity(void)const; voidactivity(Activitya); VoidFunctionmerit(void)const; }; //Variablebranching forceinline VarBranch::VarBranch(BranchTblt) :_tbl(t),_decay(1.0){} forceinline VarBranch::VarBranch(doubled,BranchTblt) :_tbl(t),_decay(d){} forceinline VarBranch::VarBranch(AFCa,BranchTblt) :_tbl(t),_decay(1.0),_afc(a){ if(!_afc.initialized()) throwUninitializedAFC("VarBranch::VarBranch"); } forceinline VarBranch::VarBranch(Activitya,BranchTblt) :_tbl(t),_decay(1.0),_act(a){ if(!_act.initialized()) throwUninitializedActivity("VarBranch::VarBranch"); } forceinline VarBranch::VarBranch(Rndr) :_tbl(NULL),_rnd(r),_decay(1.0){ if(!_rnd.initialized()) throwUninitializedRnd("VarBranch::VarBranch"); } forceinline VarBranch::VarBranch(VoidFunctionf,BranchTblt) :_tbl(t),_decay(1.0),_mf(f){} forceinlineBranchTbl VarBranch::tbl(void)const{ return_tbl; } inlineRnd VarBranch::rnd(void)const{ return_rnd; } inlinedouble VarBranch::decay(void)const{ return_decay; } inlineAFC VarBranch::afc(void)const{ return_afc; } inlinevoid VarBranch::afc(AFCa){ _afc=a; } inlineActivity VarBranch::activity(void)const{ return_act; } inlinevoid VarBranch::activity(Activitya){ _act=a; } forceinlineVoidFunction VarBranch::merit(void)const{ return_mf; } } //STATISTICS:kernel-branch