From: <ag...@us...> - 2011-11-17 14:43:44
|
Revision: 2606 http://zoolib.svn.sourceforge.net/zoolib/?rev=2606&view=rev Author: agreen Date: 2011-11-17 14:43:37 +0000 (Thu, 17 Nov 2011) Log Message: ----------- Remove sCog. Add sCog_Not. Modified Paths: -------------- trunk/zoolib/source/cxx/zoolib/ZCog.h Modified: trunk/zoolib/source/cxx/zoolib/ZCog.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZCog.h 2011-11-14 15:06:44 UTC (rev 2605) +++ trunk/zoolib/source/cxx/zoolib/ZCog.h 2011-11-17 14:43:37 UTC (rev 2606) @@ -97,48 +97,6 @@ // ================================================================================================= #pragma mark - -#pragma mark * sCog function and pseudo operator - -#if 0 - -const struct - { - template <class Param> - ZCog<Param> operator() - (ZCallable<ZCog<Param>(const ZCog<Param>&,Param)>* iCallable) const - { return iCallable; } - - template <class Param> - ZCog<Param> operator() - (const ZRef<ZCallable<ZCog<Param>(const ZCog<Param>&,Param)> >& iCallable) const - { return iCallable; } - - template <class Param> - const ZCog<Param>& operator() - (const ZCog<Param>& iCog) const - { return iCog; } - - template <class Param> - ZCog<Param> operator& - (ZCallable<ZCog<Param>(const ZCog<Param>&,Param)>* iCallable) const - { return iCallable; } - - template <class Param> - ZCog<Param> operator& - (const ZRef<ZCallable<ZCog<Param>(const ZCog<Param>&,Param)> >& iCallable) const - { return iCallable; } - - template <class Param> - const ZCog<Param>& operator& - (const ZCog<Param>& iCog) const - { return iCog; } - - } sCog = {}; - -#endif - -// ================================================================================================= -#pragma mark - #pragma mark * sCog_Term template <class Param> @@ -214,6 +172,36 @@ // ================================================================================================= #pragma mark - +#pragma mark * sCog_Not + +template <class Param> +ZCog<Param> spCogFun_Not(const ZCog<Param>& iSelf, Param iParam, + const ZCog<Param>& iCog) + { + if (iCog && not sIsTerm(iCog)) + { + const ZCog<Param> newCog = iCog->Call(iCog, iParam); + if (not newCog || sIsTerm(newCog)) + return iCog; + } + return iSelf; + } + +template <class Param> +const ZCog<Param>& sCog_Not + (const ZRef<ZCallable<ZCog<Param>(const ZCog<Param>&,Param)> >& iCallable) + { + static ZMACRO_auto(spCallable, sCallable(spCogFun_Not<Param>)); + return sBindR(spCallable, iCallable); + } + +template <class Param> +ZCog<Param> operator~ + (const ZRef<ZCallable<ZCog<Param>(const ZCog<Param>&,Param)> >& iCallable) + { return sCog_Not<Param>(iCallable); } + +// ================================================================================================= +#pragma mark - #pragma mark * sCog_Either template <class Param> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |