From: <ag...@us...> - 2011-01-28 06:47:49
|
Revision: 1926 http://zoolib.svn.sourceforge.net/zoolib/?rev=1926&view=rev Author: agreen Date: 2011-01-28 06:47:42 +0000 (Fri, 28 Jan 2011) Log Message: ----------- Add ZRA_Transform_PushDownRestricts.h. Handle situations when a Dee (identity) or Dum (null) walker is returned. Some cleanup. Modified Paths: -------------- trunk/zoolib/source/cxx/more/zoolib/dataspace/ZDataspace_Source_Dataset.cpp trunk/zoolib/source/cxx/more/zoolib/dataspace/ZDataspace_Source_Union.cpp trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Search.cpp trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Embed.cpp trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Product.cpp trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Project.cpp trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Rename.cpp trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Restrict.cpp trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_AsSQL.cpp trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Calc.h trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Concrete.h trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Const.h trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Dee.h trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Difference.h trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Embed.h trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Intersect.h trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Product.h trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Project.h trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Rename.h trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Restrict.h trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Union.h trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_ConsolidateRenames.cpp trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_Thing.cpp trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Util_Strim_Rel.cpp trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Util_Strim_RelHead.cpp trunk/zoolib/source/cxx/zoolib/ZExpr_Bool.h trunk/zoolib/source/cxx/zoolib/ZExpr_Bool_ValPred.h trunk/zoolib/source/cxx/zoolib/ZVisitor_Expr_Op_Do_Transform_T.h Added Paths: ----------- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_PushDownRestricts.cpp trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_PushDownRestricts.h trunk/zoolib/source/cxx/zoolib/ZUtil_Expr_Bool_ValPred_Rename.cpp trunk/zoolib/source/cxx/zoolib/ZUtil_Expr_Bool_ValPred_Rename.h Modified: trunk/zoolib/source/cxx/more/zoolib/dataspace/ZDataspace_Source_Dataset.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/dataspace/ZDataspace_Source_Dataset.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/dataspace/ZDataspace_Source_Dataset.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -34,6 +34,7 @@ #include "zoolib/zra/ZRA_Expr_Rel_Concrete.h" #include "zoolib/zra/ZRA_Transform_ConsolidateRenames.h" +#include "zoolib/zra/ZRA_Transform_PushDownRestricts.h" #include "zoolib/zra/ZRA_Util_Strim_Rel.h" namespace ZooLib { @@ -232,6 +233,7 @@ { ZRef<ZRA::Expr_Rel> theRel = iAdded->GetRel(); + theRel = ZRA::Transform_PushDownRestricts().Do(theRel); theRel = ZRA::Transform_ConsolidateRenames().Do(theRel); pair<Map_RelToPSearch::iterator,bool> iterPSearchPair = Modified: trunk/zoolib/source/cxx/more/zoolib/dataspace/ZDataspace_Source_Union.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/dataspace/ZDataspace_Source_Union.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/dataspace/ZDataspace_Source_Union.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -41,6 +41,8 @@ #include "zoolib/zra/ZRA_Util_Strim_RelHead.h" #include "zoolib/zra/ZRA_Transform_ConsolidateRenames.h" +#include "zoolib/zra/ZRA_Transform_DecomposeRestricts.h" +#include "zoolib/zra/ZRA_Transform_PushDownRestricts.h" #include "zoolib/zra/ZRA_Transform_Thing.h" namespace ZooLib { @@ -62,7 +64,6 @@ : public virtual ZVisitor_Expr_Op_Do_Transform_T<ZRA::Expr_Rel> , public virtual ZRA::Visitor_Expr_Rel_Concrete { - typedef ZVisitor_Expr_Op_Do_Transform_T<ZRA::Expr_Rel> inherited; public: InsertPrefix(const string8& iPrefix); @@ -158,7 +159,6 @@ class Source_Union::Visitor_Proxy : public virtual ZVisitor_Expr_Op0_T<ZRA::Expr_Rel> { - typedef ZVisitor_Expr_Op0_T<ZRA::Expr_Rel> inherited; public: virtual void Visit_Proxy(const ZRef<Proxy>& iExpr) { this->Visit_Expr_Op0(iExpr); } @@ -327,7 +327,6 @@ , public virtual ZRA::Visitor_Expr_Rel_Concrete , public virtual ZRA::Visitor_Expr_Rel_Const { - typedef ZVisitor_Expr_Op_Do_Transform_T<ZRA::Expr_Rel> inherited; public: Analyze(Source_Union* iSource_Union, PSearch* iPSearch); @@ -657,7 +656,10 @@ ZRA::Util_Strim_Rel::sToStrim(theRel, s); } -#if 1 + theRel = ZRA::Transform_DecomposeRestricts().Do(theRel); + theRel = ZRA::Transform_PushDownRestricts().Do(theRel); +#if 0 + ZRA::Transform_Thing theTT; theRel = theTT.TopLevelDo(theRel); if (ZLOGF(s, eDebug)) @@ -668,13 +670,13 @@ } theRel = ZRA::Transform_ConsolidateRenames().Do(theRel); +#endif if (ZLOGPF(s, eDebug)) { s << "Thingified:\n"; ZRA::Util_Strim_Rel::sToStrim(theRel, s); } -#endif thePSearch->fRel_Analyzed = Analyze(this, thePSearch).TopLevelDo(theRel); fPSearch_NeedsWork.Insert(thePSearch);//?? Modified: trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Search.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Search.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Search.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -41,7 +41,7 @@ size_t baseOffset = 0; iWalker = iWalker->Prime(map<string8,size_t>(), offsets, baseOffset); - ZLOGF(s, eDebug); + ZLOGF(s, eDebug + 1); s << "\n"; for (map<string8,size_t>::iterator i = offsets.begin(); i != offsets.end(); ++i) @@ -50,27 +50,30 @@ vector<ZVal_Any> thePackedRows; vector<vector<ZRef<ZCounted> > > theAnnotationsVector; vector<ZVal_Any> theRow(baseOffset, ZVal_Any()); - for (;;) + if (iWalker) { - set<ZRef<ZCounted> > theAnnotations; - if (!iWalker->ReadInc(&theRow[0], &theAnnotations)) - break; - - theAnnotationsVector.push_back( - vector<ZRef<ZCounted> >(theAnnotations.begin(), theAnnotations.end())); - - for (map<string8,size_t>::iterator i = offsets.begin(); i != offsets.end(); ++i) - thePackedRows.push_back(theRow[i->second]); + for (;;) + { + set<ZRef<ZCounted> > theAnnotations; + if (!iWalker->ReadInc(&theRow[0], &theAnnotations)) + break; + + theAnnotationsVector.push_back( + vector<ZRef<ZCounted> >(theAnnotations.begin(), theAnnotations.end())); + + for (map<string8,size_t>::iterator i = offsets.begin(); i != offsets.end(); ++i) + thePackedRows.push_back(theRow[i->second]); - s << "\n"; - for (map<string8,size_t>::iterator i = offsets.begin(); i != offsets.end(); ++i) - { - ZYad_ZooLibStrim::sToStrim(sMakeYadR(theRow[i->second]), s); - s << ", "; + s << "\n"; + for (map<string8,size_t>::iterator i = offsets.begin(); i != offsets.end(); ++i) + { + ZYad_ZooLibStrim::sToStrim(sMakeYadR(theRow[i->second]), s); + s << ", "; + } + + if (int theAnnoCount = theAnnotations.size()) + s << "annotations: " << theAnnoCount; } - - if (int theAnnoCount = theAnnotations.size()) - s << "annotations: " << theAnnoCount; } s << "\n"; Modified: trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Embed.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Embed.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Embed.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -80,6 +80,9 @@ return false; fExhausted = true; + if (!fWalker_Child) + return false; + fWalker_Child->Rewind(); vector<ZVal_Any> thePackedRows; Modified: trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Product.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Product.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Product.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -18,6 +18,7 @@ OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------------------------- */ +#include "zoolib/zqe/ZQE_Walker_Dee.h" #include "zoolib/zqe/ZQE_Walker_Product.h" namespace ZooLib { @@ -52,6 +53,11 @@ size_t& ioBaseOffset) { fWalker_Left = fWalker_Left->Prime(iOffsets, fLeftOffsets, ioBaseOffset); + if (!fWalker_Left) + return null; + + // Could also check for Walker_Dee. + fResults_Left.resize(ioBaseOffset); oOffsets.insert(fLeftOffsets.begin(), fLeftOffsets.end()); @@ -59,7 +65,14 @@ combined.insert(fLeftOffsets.begin(), fLeftOffsets.end()); fWalker_Right = fWalker_Right->Prime(combined, oOffsets, ioBaseOffset); + if (!fWalker_Right) + return null; + if (fWalker_Left.DynamicCast<Walker_Dee>()) + return fWalker_Right; + else if (fWalker_Right.DynamicCast<Walker_Dee>()) + return fWalker_Left; + return this; } Modified: trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Project.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Project.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Project.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -52,6 +52,8 @@ { map<string8,size_t> childOffsets; fWalker = fWalker->Prime(iOffsets, childOffsets, ioBaseOffset); + if (!fWalker) + return null; for (ZRA::RelHead::iterator i = fRelHead.begin(); i != fRelHead.end(); ++i) { Modified: trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Rename.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Rename.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Rename.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -52,6 +52,8 @@ newBindingOffsets[fOld] = theQ.Get(); fWalker = fWalker->Prime(newBindingOffsets, oOffsets, ioBaseOffset); + if (!fWalker) + return null; sInsertMustNotContain(1, oOffsets, fNew, sEraseAndReturn(1, oOffsets, fOld)); Modified: trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Restrict.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Restrict.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zqe/ZQE_Walker_Restrict.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -49,6 +49,8 @@ size_t& ioBaseOffset) { fWalker = fWalker->Prime(iOffsets, fChildOffsets, ioBaseOffset); + if (!fWalker) + return null; oOffsets.insert(fChildOffsets.begin(), fChildOffsets.end()); fChildOffsets.insert(iOffsets.begin(), iOffsets.end()); return this; @@ -78,10 +80,11 @@ theMap.Set(theName, theVal); } -#if 0 - if (ZLOGF(s, eDebug)) + if (ZLOGF(s, eDebug+2)) + { + s << this << " "; ZYad_ZooLibStrim::sToStrim(sMakeYadR(theMap), s); -#endif + } if (sMatches(fExpr_Bool, theMap)) { Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_AsSQL.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_AsSQL.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_AsSQL.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -22,15 +22,14 @@ #include "zoolib/ZStrim_Escaped.h" #include "zoolib/ZString.h" #include "zoolib/ZUtil_Any.h" +#include "zoolib/ZUtil_Expr_Bool_ValPred_Rename.h" #include "zoolib/ZUtil_Strim.h" #include "zoolib/ZUtil_STL_map.h" #include "zoolib/ZVisitor_Do_T.h" #include "zoolib/ZVisitor_Expr_Bool_ValPred_Any_ToStrim.h" #include "zoolib/ZVisitor_Expr_Op_Do_Transform_T.h" #include "zoolib/ZValPred_Any.h" -#include "zoolib/ZValPred_Rename.h" - #include "zoolib/zra/ZRA_AsSQL.h" #include "zoolib/zra/ZRA_Expr_Rel_Concrete.h" #include "zoolib/zra/ZRA_Expr_Rel_Product.h" @@ -49,33 +48,7 @@ using std::set; using std::string; -// ================================================================================================= -#pragma mark - -#pragma mark * DoRename (anonymous) -namespace { // anonymous - -class DoRename -: public virtual ZVisitor_Expr_Op_Do_Transform_T<ZExpr_Bool> -, public virtual ZVisitor_Expr_Bool_ValPred - { -public: - DoRename(const Rename& iRename); - - virtual void Visit_Expr_Bool_ValPred(const ZRef<ZExpr_Bool_ValPred>& iExpr); -private: - const Rename& fRename; - }; - -DoRename::DoRename(const Rename& iRename) -: fRename(iRename) - {} - -void DoRename::Visit_Expr_Bool_ValPred(const ZRef<ZExpr_Bool_ValPred>& iExpr) - { this->pSetResult(new ZExpr_Bool_ValPred(sRenamed(fRename, iExpr->GetValPred()))); } - -} // anonymous namespace - // ================================================================================================= #pragma mark - #pragma mark * Analysis (anonymous) @@ -181,7 +154,7 @@ void Analyzer::Visit_Expr_Rel_Restrict(const ZRef<Expr_Rel_Restrict>& iExpr) { Analysis theAnalysis = this->Do(iExpr->GetOp0()); - theAnalysis.fCondition &= DoRename(theAnalysis.fRename).Do(iExpr->GetExpr_Bool()); + theAnalysis.fCondition &= Util_Expr_Bool::sRenamed(theAnalysis.fRename, iExpr->GetExpr_Bool()); this->pSetResult(theAnalysis); } Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Calc.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Calc.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Calc.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -79,7 +79,6 @@ class Visitor_Expr_Rel_Calc : public virtual ZVisitor_Expr_Op0_T<Expr_Rel> { - typedef ZVisitor_Expr_Op0_T<Expr_Rel> inherited; public: virtual void Visit_Expr_Rel_Calc(const ZRef<Expr_Rel_Calc>& iExpr); }; Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Concrete.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Concrete.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Concrete.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -69,7 +69,6 @@ class Visitor_Expr_Rel_Concrete : public virtual ZVisitor_Expr_Op0_T<Expr_Rel> { - typedef ZVisitor_Expr_Op0_T<Expr_Rel> inherited; public: virtual void Visit_Expr_Rel_Concrete(const ZRef<Expr_Rel_Concrete>& iExpr); }; Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Const.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Const.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Const.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -72,7 +72,6 @@ class Visitor_Expr_Rel_Const : public virtual ZVisitor_Expr_Op0_T<Expr_Rel> { - typedef ZVisitor_Expr_Op0_T<Expr_Rel> inherited; public: virtual void Visit_Expr_Rel_Const(const ZRef<Expr_Rel_Const>& iExpr); }; Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Dee.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Dee.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Dee.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -66,7 +66,6 @@ class Visitor_Expr_Rel_Dee : public virtual ZVisitor_Expr_Op0_T<Expr_Rel> { - typedef ZVisitor_Expr_Op0_T<Expr_Rel> inherited; public: virtual void Visit_Expr_Rel_Dee(const ZRef<Expr_Rel_Dee>& iExpr); }; Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Difference.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Difference.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Difference.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -59,7 +59,6 @@ class Visitor_Expr_Rel_Difference : public virtual ZVisitor_Expr_Op2_T<Expr_Rel> { - typedef ZVisitor_Expr_Op2_T<Expr_Rel> inherited; public: virtual void Visit_Expr_Rel_Difference(const ZRef<Expr_Rel_Difference>& iExpr); }; Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Embed.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Embed.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Embed.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -70,7 +70,6 @@ class Visitor_Expr_Rel_Embed : public virtual ZVisitor_Expr_Op1_T<Expr_Rel> { - typedef ZVisitor_Expr_Op1_T<Expr_Rel> inherited; public: virtual void Visit_Expr_Rel_Embed(const ZRef<Expr_Rel_Embed>& iExpr); }; Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Intersect.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Intersect.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Intersect.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -59,7 +59,6 @@ class Visitor_Expr_Rel_Intersect : public virtual ZVisitor_Expr_Op2_T<Expr_Rel> { - typedef ZVisitor_Expr_Op2_T<Expr_Rel> inherited; public: virtual void Visit_Expr_Rel_Intersect(const ZRef<Expr_Rel_Intersect>& iExpr); }; Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Product.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Product.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Product.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -62,7 +62,6 @@ class Visitor_Expr_Rel_Product : public virtual ZVisitor_Expr_Op2_T<Expr_Rel> { - typedef ZVisitor_Expr_Op2_T<Expr_Rel> inherited; public: virtual void Visit_Expr_Rel_Product(const ZRef<Expr_Rel_Product>& iExpr); }; Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Project.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Project.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Project.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -69,7 +69,6 @@ class Visitor_Expr_Rel_Project : public virtual ZVisitor_Expr_Op1_T<Expr_Rel> { - typedef ZVisitor_Expr_Op1_T<Expr_Rel> inherited; public: virtual void Visit_Expr_Rel_Project(const ZRef<Expr_Rel_Project>& iExpr); }; Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Rename.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Rename.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Rename.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -72,7 +72,6 @@ class Visitor_Expr_Rel_Rename : public virtual ZVisitor_Expr_Op1_T<Expr_Rel> { - typedef ZVisitor_Expr_Op1_T<Expr_Rel> inherited; public: virtual void Visit_Expr_Rel_Rename(const ZRef<Expr_Rel_Rename>& iExpr); }; Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Restrict.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Restrict.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Restrict.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -69,7 +69,6 @@ class Visitor_Expr_Rel_Restrict : public virtual ZVisitor_Expr_Op1_T<Expr_Rel> { - typedef ZVisitor_Expr_Op1_T<Expr_Rel> inherited; public: virtual void Visit_Expr_Rel_Restrict(const ZRef<Expr_Rel_Restrict>& iExpr); }; Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Union.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Union.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Expr_Rel_Union.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -59,7 +59,6 @@ class Visitor_Expr_Rel_Union : public virtual ZVisitor_Expr_Op2_T<Expr_Rel> { - typedef ZVisitor_Expr_Op2_T<Expr_Rel> inherited; public: virtual void Visit_Expr_Rel_Union(const ZRef<Expr_Rel_Union>& iExpr); }; Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_ConsolidateRenames.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_ConsolidateRenames.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_ConsolidateRenames.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -53,7 +53,6 @@ ZRef<Expr_Rel> oldOp0 = iExpr->GetOp0(); const string8 oldName = iExpr->GetOld(); string8 newName = iExpr->GetNew(); - if (ZQ<string8> theQ = sEraseAndReturnIfContains(fRename, newName)) newName = theQ.Get(); @@ -64,9 +63,11 @@ if (ZQ<string8> theQ2 = sGetIfContains(fRename, oldName)) { if (theQ2.Get() == newName) - newOp0 = sRename(newOp0, newName, oldName); + { + if (newName != oldName) + newOp0 = sRename(newOp0, newName, oldName); + } } - this->pSetResult(newOp0); } Added: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_PushDownRestricts.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_PushDownRestricts.cpp (rev 0) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_PushDownRestricts.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -0,0 +1,147 @@ +/* ------------------------------------------------------------------------------------------------- +Copyright (c) 2011 Andrew Green +http://www.zoolib.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES +OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------------------------- */ + +#include "zoolib/ZUtil_Expr_Bool_ValPred_Rename.h" +//#include "zoolib/ZUtil_STL_map.h" +#include "zoolib/ZVisitor_Expr_Bool_ValPred_Do_GetNames.h" + +#include "zoolib/zra/ZRA_Transform_PushDownRestricts.h" + +namespace ZooLib { +namespace ZRA { + +using std::vector; + +// ================================================================================================= +#pragma mark - +#pragma mark * Transform_PushDownRestricts + +void Transform_PushDownRestricts::Visit_Expr_Rel_Rename(const ZRef<Expr_Rel_Rename>& iExpr) + { + const RelName& oldName = iExpr->GetOld(); + const RelName& newName = iExpr->GetNew(); + + Rename new2Old; + new2Old[newName] = oldName; + + for (vector<Restrict*>::iterator iter = fRestricts.begin(); iter != fRestricts.end(); ++iter) + (*iter)->fExpr_Bool = Util_Expr_Bool::sRenamed(new2Old, (*iter)->fExpr_Bool); + + Visitor_Expr_Rel_Rename::Visit_Expr_Rel_Rename(iExpr); + + Rename old2New; + old2New[oldName] = newName; + + for (vector<Restrict*>::iterator iter = fRestricts.begin(); iter != fRestricts.end(); ++iter) + (*iter)->fExpr_Bool = Util_Expr_Bool::sRenamed(old2New, (*iter)->fExpr_Bool); + + } + +void Transform_PushDownRestricts::Visit_Expr_Rel_Embed(const ZRef<Expr_Rel_Embed>& iExpr) + { + ZRef<Expr_Rel> oldOp0 = iExpr->GetOp0(); + ZRef<Expr_Rel> newOp0; + + { + ZSetRestore_T<vector<Restrict*> > sr(fRestricts); + newOp0 = this->Do(oldOp0); + } + + if (oldOp0 == newOp0) + this->pHandleIt(iExpr->GetRelName(), iExpr); + else + this->pHandleIt(iExpr->GetRelName(), iExpr->Clone(newOp0)); + } + +void Transform_PushDownRestricts::Visit_Expr_Rel_Restrict(const ZRef<Expr_Rel_Restrict>& iExpr) + { + Restrict theRestrict; + theRestrict.fExpr_Bool = iExpr->GetExpr_Bool(); + theRestrict.fCountTouching = 0; + theRestrict.fCountSubsuming = 0; + fRestricts.push_back(&theRestrict); + + ZRef<Expr_Rel> oldOp0 = iExpr->GetOp0(); + ZRef<Expr_Rel> newOp0 = this->Do(oldOp0); + + ZAssertStop(1, fRestricts.back() == &theRestrict); + fRestricts.pop_back(); + + if (theRestrict.fCountTouching == 0) + { + // Superfluous condition? Should have been pulled up the tree + // and then possibly excised. Or we should return null, as nothing can + // satisfy the criteria. + this->pSetResult(oldOp0); + } + else if (theRestrict.fCountTouching == theRestrict.fCountSubsuming) + { + // Every descendant that touches the restriction handles it completely + // and we can drop this restriction out of the tree. + this->pSetResult(newOp0); + } + else + { + // Descendants may have added our restriction into the + // tree, but they didn't all do so. + if (newOp0 == oldOp0) + { + // No changes in our descendants at all. + this->pSetResult(iExpr->Self()); + } + else + { + this->pSetResult(iExpr->Clone(newOp0)); + } + } + } + +void Transform_PushDownRestricts::Visit_Expr_Rel_Calc(const ZRef<Expr_Rel_Calc>& iExpr) + { this->pHandleIt(iExpr->GetRelName(), iExpr); } + +void Transform_PushDownRestricts::Visit_Expr_Rel_Concrete(const ZRef<Expr_Rel_Concrete>& iExpr) + { this->pHandleIt(iExpr->GetConcreteRelHead(), iExpr); } + +void Transform_PushDownRestricts::Visit_Expr_Rel_Const(const ZRef<Expr_Rel_Const>& iExpr) + { this->pHandleIt(iExpr->GetRelName(), iExpr); } + +void Transform_PushDownRestricts::pHandleIt(const RelHead& iRH, const ZRef<Expr_Rel>& iExpr) + { + ZRef<Expr_Rel> result = iExpr; + for (vector<Restrict*>::iterator iter = fRestricts.begin(); iter != fRestricts.end(); ++iter) + { + Restrict& theRestrict = **iter; + const RelHead exprNames = sGetNames(theRestrict.fExpr_Bool); + const RelHead intersection = exprNames & iRH; + if (intersection.size()) + { + ++theRestrict.fCountTouching; + if (intersection.size() == exprNames.size()) + { + ++theRestrict.fCountSubsuming; + result = result & theRestrict.fExpr_Bool; + } + } + } + this->pSetResult(result); + } + +} // namespace ZRA +} // namespace ZooLib Added: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_PushDownRestricts.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_PushDownRestricts.h (rev 0) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_PushDownRestricts.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -0,0 +1,76 @@ +/* ------------------------------------------------------------------------------------------------- +Copyright (c) 2011 Andrew Green +http://www.zoolib.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES +OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------------------------- */ + +#ifndef __ZRA_Transform_PushDownRestricts__ +#define __ZRA_Transform_PushDownRestricts__ +#include "zconfig.h" + +#include "zoolib/ZVisitor_Expr_Op_Do_Transform_T.h" +#include "zoolib/zra/ZRA_Expr_Rel_Calc.h" +#include "zoolib/zra/ZRA_Expr_Rel_Concrete.h" +#include "zoolib/zra/ZRA_Expr_Rel_Const.h" +#include "zoolib/zra/ZRA_Expr_Rel_Embed.h" +#include "zoolib/zra/ZRA_Expr_Rel_Rename.h" +#include "zoolib/zra/ZRA_Expr_Rel_Restrict.h" + +#include <vector> + +namespace ZooLib { +namespace ZRA { + +// ================================================================================================= +#pragma mark - +#pragma mark * ZRA::Transform_PushDownRestricts + +class Transform_PushDownRestricts +: public virtual ZVisitor_Expr_Op_Do_Transform_T<Expr_Rel> +, public virtual Visitor_Expr_Rel_Rename +, public virtual Visitor_Expr_Rel_Restrict +, public virtual Visitor_Expr_Rel_Embed +, public virtual Visitor_Expr_Rel_Calc +, public virtual Visitor_Expr_Rel_Concrete +, public virtual Visitor_Expr_Rel_Const + { +public: +// From Visitor_Expr_Rel_XXX + virtual void Visit_Expr_Rel_Embed(const ZRef<Expr_Rel_Embed>& iExpr); + virtual void Visit_Expr_Rel_Rename(const ZRef<Expr_Rel_Rename>& iExpr); + virtual void Visit_Expr_Rel_Restrict(const ZRef<Expr_Rel_Restrict>& iExpr); + + virtual void Visit_Expr_Rel_Calc(const ZRef<Expr_Rel_Calc>& iExpr); + virtual void Visit_Expr_Rel_Concrete(const ZRef<Expr_Rel_Concrete>& iExpr); + virtual void Visit_Expr_Rel_Const(const ZRef<Expr_Rel_Const>& iExpr); + +protected: + void pHandleIt(const RelHead& iRH, const ZRef<Expr_Rel>& iRel); + + struct Restrict + { + ZRef<ZExpr_Bool> fExpr_Bool; + size_t fCountTouching; + size_t fCountSubsuming; + }; + std::vector<Restrict*> fRestricts; + }; + +} // namespace ZRA +} // namespace ZooLib + +#endif // __ZRA_Transform_PushDownRestricts__ Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_Thing.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_Thing.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Transform_Thing.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -18,11 +18,9 @@ OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------------------------- */ -#include "zoolib/ZExpr_Bool_ValPred.h" #include "zoolib/ZString.h" +#include "zoolib/ZUtil_Expr_Bool_ValPred_Rename.h" #include "zoolib/ZUtil_STL_map.h" -#include "zoolib/ZValPred_Rename.h" -#include "zoolib/ZVisitor_Expr_Op_Do_Transform_T.h" #include "zoolib/zra/ZRA_Transform_Thing.h" @@ -35,33 +33,6 @@ // ================================================================================================= #pragma mark - -#pragma mark * DoRename (anonymous) - -namespace { // anonymous - -class DoRename -: public virtual ZVisitor_Expr_Op_Do_Transform_T<ZExpr_Bool> -, public virtual ZVisitor_Expr_Bool_ValPred - { -public: - DoRename(const Rename& iRename); - - virtual void Visit_Expr_Bool_ValPred(const ZRef<ZExpr_Bool_ValPred>& iExpr); -private: - const Rename& fRename; - }; - -DoRename::DoRename(const Rename& iRename) -: fRename(iRename) - {} - -void DoRename::Visit_Expr_Bool_ValPred(const ZRef<ZExpr_Bool_ValPred>& iExpr) - { this->pSetResult(new ZExpr_Bool_ValPred(sRenamed(fRename, iExpr->GetValPred()))); } - -} // anonymous namespace - -// ================================================================================================= -#pragma mark - #pragma mark * Transform_Thing Transform_Thing::Transform_Thing() @@ -160,7 +131,8 @@ { ZRef<Expr_Rel> newOp0 = this->Do(iExpr->GetOp0()); - ZRef<ZExpr_Bool> newExpr_Bool = DoRename(fRename_Concrete2Temp).Do(iExpr->GetExpr_Bool()); + ZRef<ZExpr_Bool> newExpr_Bool = + Util_Expr_Bool::sRenamed(fRename_Concrete2Temp, iExpr->GetExpr_Bool()); this->pSetResult(sRestrict(newOp0, newExpr_Bool)); } Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Util_Strim_Rel.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Util_Strim_Rel.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Util_Strim_Rel.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -46,30 +46,6 @@ // ================================================================================================= #pragma mark - -#pragma mark * Static helpers - -namespace { // anonymous - -void spWrite(const string& iString, const ZStrimW& s) - { s.Write(iString); } - -void spWrite(const UTF8* iString, const ZStrimW& s) - { s.Write(iString); } - -void spWrite_RelHead(const RelHead& iRelHead, const ZStrimW& iStrimW) - { Util_Strim_RelHead::sWrite_RelHead(iRelHead, iStrimW); } - -void spWrite_EffectiveRelHeadComment(ZRef<Expr_Rel> iExpr, const ZStrimW& iStrimW) - { - iStrimW.Write(" /*"); - Util_Strim_RelHead::sWrite_RelHead(sGetRelHead(iExpr), iStrimW); - iStrimW.Write("*/"); - } - -} // anonymous namespace - -// ================================================================================================= -#pragma mark - #pragma mark * Visitor_ToStrim namespace { // anonymous @@ -126,120 +102,63 @@ void Visitor_ToStrim::Visit_Expr_Rel_Embed(const ZRef<Expr_Rel_Embed>& iExpr) { const ZStrimW& w = pStrimW(); - w << "Embed"; - - if (pOptions().fDebuggingOutput) - spWrite_EffectiveRelHeadComment(iExpr->Self(), w); - -// this->pWriteLFIndent(); - w << "("; - + w << "Embed("; Util_Strim_RelHead::sWrite_PropName(iExpr->GetRelName(), w); - w << ", "; - w << iExpr->GetBindings(); - w << ","; + w << ", " << iExpr->GetBindings() << ","; this->pWriteLFIndent(); this->pToStrim(iExpr->GetOp0()); -//## this->pWriteLFIndent(); w << ")"; } void Visitor_ToStrim::Visit_Expr_Rel_Project(const ZRef<Expr_Rel_Project>& iExpr) { const ZStrimW& w = pStrimW(); - spWrite("Project", w); - -// if (pOptions().fDebuggingOutput) -// spWrite_EffectiveRelHeadComment(iExpr, w); - -// this->pWriteLFIndent(); - w << "("; - -// this->pWriteLFIndent(); - spWrite_RelHead(iExpr->GetProjectRelHead(), w); - w << ","; - + w << "Project(" << iExpr->GetProjectRelHead() << ","; this->pWriteLFIndent(); this->pToStrim(iExpr->GetOp0()); - -//## this->pWriteLFIndent(); w << ")"; } void Visitor_ToStrim::Visit_Expr_Rel_Rename(const ZRef<Expr_Rel_Rename>& iExpr) { const ZStrimW& w = pStrimW(); - spWrite("Rename", w); - -// if (pOptions().fDebuggingOutput) -// spWrite_EffectiveRelHeadComment(iExpr, w); - -// this->pWriteLFIndent(); - w << "("; - -// this->pWriteLFIndent(); + w << "Rename("; Util_Strim_RelHead::sWrite_PropName(iExpr->GetNew(), w); - spWrite("<--", w); + w << "<--"; Util_Strim_RelHead::sWrite_PropName(iExpr->GetOld(), w); w << ","; - this->pWriteLFIndent(); this->pToStrim(iExpr->GetOp0()); - -//## this->pWriteLFIndent(); w << ")"; } void Visitor_ToStrim::Visit_Expr_Rel_Restrict(const ZRef<Expr_Rel_Restrict>& iExpr) { const ZStrimW& w = pStrimW(); - w << "Restrict"; - - if (pOptions().fDebuggingOutput) - spWrite_EffectiveRelHeadComment(iExpr, w); - -// this->pWriteLFIndent(); - w << "("; -// this->pWriteLFIndent(); + w << "Restrict("; this->pToStrim(iExpr->GetExpr_Bool()); w << ","; - this->pWriteLFIndent(); this->pToStrim(iExpr->GetOp0()); - -//## this->pWriteLFIndent(); w << ")"; } void Visitor_ToStrim::Visit_Expr_Rel_Calc(const ZRef<Expr_Rel_Calc>& iExpr) { const ZStrimW& w = pStrimW(); - spWrite("Calc", w); - - w << "("; + w << "Calc("; Util_Strim_RelHead::sWrite_PropName(iExpr->GetRelName(), w); - w << "<--"; - - w << "/*Some function of*/ "; - w << iExpr->GetBindings(); -// Util_Strim_RelHead::sWrite_RelHead(iExpr->GetBindings(), w); + w << " = /*Some function of*/ " << iExpr->GetBindings(); w << ")"; } void Visitor_ToStrim::Visit_Expr_Rel_Concrete(const ZRef<Expr_Rel_Concrete>& iExpr) - { - const ZStrimW& w = pStrimW(); + { pStrimW() << "Concrete(" << iExpr->GetConcreteRelHead() << ")"; } - w << "Concrete("; - Util_Strim_RelHead::sWrite_RelHead(iExpr->GetConcreteRelHead(), w); - w << ")"; - } - void Visitor_ToStrim::Visit_Expr_Rel_Const(const ZRef<Expr_Rel_Const>& iExpr) { const ZStrimW& w = pStrimW(); - spWrite("Const", w); - w << "("; + w << "Const("; Util_Strim_RelHead::sWrite_PropName(iExpr->GetRelName(), w); w << ","; ZYad_ZooLibStrim::sToStrim(sMakeYadR(iExpr->GetVal()), w); @@ -247,37 +166,25 @@ } void Visitor_ToStrim::Visit_Expr_Rel_Dee(const ZRef<Expr_Rel_Dee>& iExpr) - { - const ZStrimW& w = pStrimW(); - w << "Dee()"; - } + { pStrimW() << "Dee()"; } void Visitor_ToStrim::pWriteBinary( const string& iFunctionName, const ZRef<ZExpr_Op2_T<Expr_Rel> >& iExpr) { const ZStrimW& w = pStrimW(); - w << iFunctionName; + w << iFunctionName << "("; - if (pOptions().fDebuggingOutput) - spWrite_EffectiveRelHeadComment(iExpr->Self(), w); - -// this->pWriteLFIndent(); - w << "("; - this->pWriteLFIndent(); this->pToStrim(iExpr->GetOp0()); w << ","; - this->pWriteLFIndent(); this->pToStrim(iExpr->GetOp1()); - -//## this->pWriteLFIndent(); w << ")"; } // ================================================================================================= #pragma mark - -#pragma mark * ZUtil_Strim_TQL +#pragma mark * ZRA_Util_Strim_Rel void sToStrim(const ZRef<ZRA::Expr_Rel>& iRel, const ZStrimW& iStrimW) { Modified: trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Util_Strim_RelHead.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Util_Strim_RelHead.cpp 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/more/zoolib/zra/ZRA_Util_Strim_RelHead.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -65,6 +65,7 @@ const ZStrimW& operator<<(const ZStrimW& w, const ZRA::Rename& iRename) { + w << "["; bool isFirst = true; for (ZRA::Rename::const_iterator i = iRename.begin(); i != iRename.end(); ++i) { @@ -73,6 +74,7 @@ isFirst = false; w << i->second << "<--" << i->first; } + w << "]"; return w; } Modified: trunk/zoolib/source/cxx/zoolib/ZExpr_Bool.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZExpr_Bool.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/zoolib/ZExpr_Bool.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -77,7 +77,6 @@ class ZVisitor_Expr_Bool_True : public virtual ZVisitor_Expr_Op0_T<ZExpr_Bool> { - typedef ZVisitor_Expr_Op0_T<ZExpr_Bool> inherited; public: virtual void Visit_Expr_Bool_True(const ZRef<ZExpr_Bool_True>& iExpr); }; @@ -123,7 +122,6 @@ class ZVisitor_Expr_Bool_False : public virtual ZVisitor_Expr_Op0_T<ZExpr_Bool> { - typedef ZVisitor_Expr_Op0_T<ZExpr_Bool> inherited; public: virtual void Visit_Expr_Bool_False(const ZRef<ZExpr_Bool_False>& iExpr); }; @@ -165,7 +163,6 @@ class ZVisitor_Expr_Bool_Not : public virtual ZVisitor_Expr_Op1_T<ZExpr_Bool> { - typedef ZVisitor_Expr_Op1_T<ZExpr_Bool> inherited; public: virtual void Visit_Expr_Bool_Not(const ZRef<ZExpr_Bool_Not>& iExpr); }; @@ -207,7 +204,6 @@ class ZVisitor_Expr_Bool_And : public virtual ZVisitor_Expr_Op2_T<ZExpr_Bool> { - typedef ZVisitor_Expr_Op2_T<ZExpr_Bool> inherited; public: virtual void Visit_Expr_Bool_And(const ZRef<ZExpr_Bool_And>& iExpr); }; @@ -249,7 +245,6 @@ class ZVisitor_Expr_Bool_Or : public virtual ZVisitor_Expr_Op2_T<ZExpr_Bool> { - typedef ZVisitor_Expr_Op2_T<ZExpr_Bool> inherited; public: virtual void Visit_Expr_Bool_Or(const ZRef<ZExpr_Bool_Or>& iExpr); }; Modified: trunk/zoolib/source/cxx/zoolib/ZExpr_Bool_ValPred.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZExpr_Bool_ValPred.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/zoolib/ZExpr_Bool_ValPred.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -70,7 +70,6 @@ class ZVisitor_Expr_Bool_ValPred : public virtual ZVisitor_Expr_Op0_T<ZExpr_Bool> { - typedef ZVisitor_Expr_Op0_T<ZExpr_Bool> inherited; public: virtual void Visit_Expr_Bool_ValPred(const ZRef<ZExpr_Bool_ValPred >& iExpr); }; Added: trunk/zoolib/source/cxx/zoolib/ZUtil_Expr_Bool_ValPred_Rename.cpp =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZUtil_Expr_Bool_ValPred_Rename.cpp (rev 0) +++ trunk/zoolib/source/cxx/zoolib/ZUtil_Expr_Bool_ValPred_Rename.cpp 2011-01-28 06:47:42 UTC (rev 1926) @@ -0,0 +1,68 @@ +/* ------------------------------------------------------------------------------------------------- +Copyright (c) 2011 Andrew Green +http://www.zoolib.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES +OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------------------------- */ + +#include "zoolib/ZExpr_Bool_ValPred.h" +#include "zoolib/ZUtil_Expr_Bool_ValPred_Rename.h" +#include "zoolib/ZValPred_Rename.h" +#include "zoolib/ZVisitor_Expr_Op_Do_Transform_T.h" + +using std::map; +using std::string; + +namespace ZooLib { +namespace Util_Expr_Bool { + +// ================================================================================================= +#pragma mark - +#pragma mark * DoRename (anonymous) + +namespace { // anonymous + +class DoRename +: public virtual ZVisitor_Expr_Op_Do_Transform_T<ZExpr_Bool> +, public virtual ZVisitor_Expr_Bool_ValPred + { +public: + DoRename(const map<string,string>& iRename); + + virtual void Visit_Expr_Bool_ValPred(const ZRef<ZExpr_Bool_ValPred>& iExpr); +private: + const map<string,string>& fRename; + }; + +DoRename::DoRename(const map<string,string>& iRename) +: fRename(iRename) + {} + +void DoRename::Visit_Expr_Bool_ValPred(const ZRef<ZExpr_Bool_ValPred>& iExpr) + { this->pSetResult(new ZExpr_Bool_ValPred(sRenamed(fRename, iExpr->GetValPred()))); } + +} // anonymous namespace + +// ================================================================================================= +#pragma mark - +#pragma mark * Util_Expr_Bool + +ZRef<ZExpr_Bool> sRenamed(const std::map<std::string,std::string>& iRename, + const ZRef<ZExpr_Bool>& iExpr) + { return DoRename(iRename).Do(iExpr); } + +} // namespace Util_Expr_Bool +} // namespace ZooLib Added: trunk/zoolib/source/cxx/zoolib/ZUtil_Expr_Bool_ValPred_Rename.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZUtil_Expr_Bool_ValPred_Rename.h (rev 0) +++ trunk/zoolib/source/cxx/zoolib/ZUtil_Expr_Bool_ValPred_Rename.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -0,0 +1,42 @@ +/* ------------------------------------------------------------------------------------------------- +Copyright (c) 2011 Andrew Green +http://www.zoolib.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES +OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------------------------- */ + +#ifndef __ZUtil_Expr_Bool_ValPred_Rename__ +#define __ZUtil_Expr_Bool_ValPred_Rename__ +#include "zconfig.h" + +#include "zoolib/ZExpr_Bool.h" + +#include <map> + +namespace ZooLib { +namespace Util_Expr_Bool { + +// ================================================================================================= +#pragma mark - +#pragma mark * Util_Expr_Bool + +ZRef<ZExpr_Bool> sRenamed(const std::map<std::string,std::string>& iRename, + const ZRef<ZExpr_Bool>& iExpr); + +} // namespace Util_Expr_Bool +} // namespace ZooLib + +#endif // __ZUtil_Expr_Bool_ValPred_Rename__ Modified: trunk/zoolib/source/cxx/zoolib/ZVisitor_Expr_Op_Do_Transform_T.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZVisitor_Expr_Op_Do_Transform_T.h 2011-01-27 22:47:55 UTC (rev 1925) +++ trunk/zoolib/source/cxx/zoolib/ZVisitor_Expr_Op_Do_Transform_T.h 2011-01-28 06:47:42 UTC (rev 1926) @@ -39,9 +39,11 @@ , public virtual ZVisitor_Expr_Op2_T<T> { public: +// From ZVisitor_Expr_Op0_T virtual void Visit_Expr_Op0(const ZRef<ZExpr_Op0_T<T> >& iExpr) { this->pSetResult(iExpr->Self()); } +// From ZVisitor_Expr_Op1_T virtual void Visit_Expr_Op1(const ZRef<ZExpr_Op1_T<T> >& iExpr) { ZRef<T> oldOp0 = iExpr->GetOp0(); @@ -52,6 +54,7 @@ this->pSetResult(iExpr->Clone(newOp0)); } +// From ZVisitor_Expr_Op2_T virtual void Visit_Expr_Op2(const ZRef<ZExpr_Op2_T<T> >& iExpr) { ZRef<T> oldOp0 = iExpr->GetOp0(); @@ -63,6 +66,7 @@ else this->pSetResult(iExpr->Clone(newOp0, newOp1)); } + }; } // namespace ZooLib This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |