constint.hpp /usr/include/gecode/int/view.hpp Gecode::Int::ViewRanges< ConstIntView > Gecode Gecode::Int /*-*-mode:C++;c-basic-offset:2;indent-tabs-mode:nil-*-*/ /* *Mainauthors: *ChristianSchulte<schulte@gecode.org> * *Copyright: *ChristianSchulte,2003 * *Lastmodified: *$Date:2013-02-1416:29:11+0100(Thu,14Feb2013)$by$Author:schulte$ *$Revision:13292$ * *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{namespaceInt{ /* *Constructorsandinitialization * */ forceinline ConstIntView::ConstIntView(void){} forceinline ConstIntView::ConstIntView(intn):x(n){} /* *Valueaccess * */ forceinlineint ConstIntView::min(void)const{ returnx; } forceinlineint ConstIntView::max(void)const{ returnx; } forceinlineint ConstIntView::med(void)const{ returnx; } forceinlineint ConstIntView::val(void)const{ returnx; } forceinlineunsignedint ConstIntView::size(void)const{ return1; } forceinlineunsignedint ConstIntView::width(void)const{ return1; } forceinlineunsignedint ConstIntView::regret_min(void)const{ return0; } forceinlineunsignedint ConstIntView::regret_max(void)const{ return0; } /* *Domaintests * */ forceinlinebool ConstIntView::range(void)const{ returntrue; } forceinlinebool ConstIntView::in(intn)const{ returnn==x; } forceinlinebool ConstIntView::in(longlongintn)const{ returnn==x; } /* *Domainupdatebyvalue * */ forceinlineModEvent ConstIntView::lq(Space&,intn){ return(x<=n)?ME_INT_NONE:ME_INT_FAILED; } forceinlineModEvent ConstIntView::lq(Space&,longlongintn){ return(x<=n)?ME_INT_NONE:ME_INT_FAILED; } forceinlineModEvent ConstIntView::le(Space&,intn){ return(x<n)?ME_INT_NONE:ME_INT_FAILED; } forceinlineModEvent ConstIntView::le(Space&,longlongintn){ return(x<n)?ME_INT_NONE:ME_INT_FAILED; } forceinlineModEvent ConstIntView::gq(Space&,intn){ return(x>=n)?ME_INT_NONE:ME_INT_FAILED; } forceinlineModEvent ConstIntView::gq(Space&,longlongintn){ return(x>=n)?ME_INT_NONE:ME_INT_FAILED; } forceinlineModEvent ConstIntView::gr(Space&,intn){ return(x>n)?ME_INT_NONE:ME_INT_FAILED; } forceinlineModEvent ConstIntView::gr(Space&,longlongintn){ return(x>n)?ME_INT_NONE:ME_INT_FAILED; } forceinlineModEvent ConstIntView::nq(Space&,intn){ return(x!=n)?ME_INT_NONE:ME_INT_FAILED; } forceinlineModEvent ConstIntView::nq(Space&,longlongintn){ return(x!=n)?ME_INT_NONE:ME_INT_FAILED; } forceinlineModEvent ConstIntView::eq(Space&,intn){ return(x==n)?ME_INT_NONE:ME_INT_FAILED; } forceinlineModEvent ConstIntView::eq(Space&,longlongintn){ return(x==n)?ME_INT_NONE:ME_INT_FAILED; } /* *Iterator-baseddomainupdate * */ template<classI> forceinlineModEvent ConstIntView::narrow_r(Space&,I&i,bool){ returni()?ME_INT_NONE:ME_INT_FAILED; } template<classI> forceinlineModEvent ConstIntView::inter_r(Space&,I&i,bool){ while(i()&&(i.max()<x)) ++i; return(i()&&(i.min()<=x))?ME_INT_NONE:ME_INT_FAILED; } template<classI> forceinlineModEvent ConstIntView::minus_r(Space&,I&i,bool){ while(i()&&(i.max()<x)) ++i; return(i()&&(i.min()<=x))?ME_INT_FAILED:ME_INT_NONE; } template<classI> forceinlineModEvent ConstIntView::narrow_v(Space&,I&i,bool){ returni()?ME_INT_NONE:ME_INT_FAILED; } template<classI> forceinlineModEvent ConstIntView::inter_v(Space&,I&i,bool){ while(i()&&(i.val()<x)) ++i; return(i()&&(i.val()==x))?ME_INT_NONE:ME_INT_FAILED; } template<classI> forceinlineModEvent ConstIntView::minus_v(Space&,I&i,bool){ while(i()&&(i.val()<x)) ++i; return(i()&&(i.val()==x))?ME_INT_FAILED:ME_INT_NONE; } /* *Deltainformationforadvisors * */ forceinlineint ConstIntView::min(constDelta&)const{ return1; } forceinlineint ConstIntView::max(constDelta&)const{ return0; } forceinlinebool ConstIntView::any(constDelta&)const{ returntrue; } /* *Cloning * */ forceinlinevoid ConstIntView::update(Space&home,boolshare,ConstIntView&y){ ConstView<IntView>::update(home,share,y); x=y.x; } template<> classViewRanges<ConstIntView>{ private: intn; public: ViewRanges(void); ViewRanges(constConstIntView&x); voidinit(constConstIntView&x); booloperator ()(void)const; voidoperator ++(void); intmin(void)const; intmax(void)const; unsignedintwidth(void)const; }; forceinline ViewRanges<ConstIntView>::ViewRanges(void){} forceinline ViewRanges<ConstIntView>::ViewRanges(constConstIntView&x) :n(x.val()){} forceinlinebool ViewRanges<ConstIntView>::operator ()(void)const{ returnn<=Limits::max; } forceinlinevoid ViewRanges<ConstIntView>::operator ++(void){ n=Limits::max+1; } forceinlineint ViewRanges<ConstIntView>::min(void)const{ returnn; } forceinlineint ViewRanges<ConstIntView>::max(void)const{ returnn; } forceinlineunsignedint ViewRanges<ConstIntView>::width(void)const{ return1; } /* *Viewcomparison * */ forceinlinebool same(constConstIntView&x,constConstIntView&y){ returnx.min()==y.min(); } forceinlinebool before(constConstIntView&x,constConstIntView&y){ returnx.min()<y.min(); } }} //STATISTICS:int-var