afc.hpp /usr/include/gecode/kernel.hh Gecode::AFC Gecode /*-*-mode:C++;c-basic-offset:2;indent-tabs-mode:nil-*-*/ /* *Mainauthors: *ChristianSchulte<schulte@gecode.org> * *Copyright: *ChristianSchulte,2013 * *Lastmodified: *$Date:2013-04-1720:35:47+0200(Wed,17Apr2013)$by$Author:schulte$ *$Revision:13584$ * *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{ classAFC{ protected: intn; public: AFC(void); AFC(constAFC&a); AFC&operator =(constAFC&a); template<classVar> AFC(Homehome,constVarArgArray<Var>&x,doubled); template<classVar> voidinit(Homehome,constVarArgArray<Var>&x,doubled); boolinitialized(void)const; voidset(Space&home,doublea=1.0); GECODE_KERNEL_EXPORTstaticconstAFCdef; voidupdate(Space&home,boolshare,AFC&a); ~AFC(void); intsize(void)const; voiddecay(Space&home,doubled); doubledecay(constSpace&home)const; }; template<classChar,classTraits> std::basic_ostream<Char,Traits>& operator<<(std::basic_ostream<Char,Traits>&os, constAFC&a); /* *AFC * */ forceinlineint AFC::size(void)const{ assert(n>=0); returnn; } forceinline AFC::AFC(void):n(-1){} forceinlinebool AFC::initialized(void)const{ returnn>=0; } template<classVar> forceinline AFC::AFC(Homehome,constVarArgArray<Var>&x,doubled) :n(x.size()){ if((d<=0.0)||(d>1.0)) throwIllegalDecay("AFC"); static_cast<Space&>(home).afc_decay(d); } template<classVar> forceinlinevoid AFC::init(Homehome,constVarArgArray<Var>&x,doubled){ n=x.size(); if((d<=0.0)||(d>1.0)) throwIllegalDecay("AFC"); static_cast<Space&>(home).afc_decay(d); } forceinline AFC::AFC(constAFC&a) :n(a.n){} forceinlineAFC& AFC::operator =(constAFC&a){ n=a.n; return*this; } forceinline AFC::~AFC(void){} forceinlinevoid AFC::update(Space&,bool,AFC&a){ n=a.n; } forceinlinevoid AFC::decay(Space&home,doubled){ if((d<=0.0)||(d>1.0)) throwIllegalDecay("AFC"); home.afc_decay(d); } forceinlinevoid AFC::set(Space&home,doublea){ home.afc_set(a); } forceinlinedouble AFC::decay(constSpace&home)const{ returnhome.afc_decay(); } template<classChar,classTraits> std::basic_ostream<Char,Traits>& operator<<(std::basic_ostream<Char,Traits>&os, constAFC&a){ (void)a; returnos<<"AFC(noinformationavailable)"; } } //STATISTICS:kernel-branch