From: <ag...@us...> - 2010-04-07 21:34:57
|
Revision: 1254 http://zoolib.svn.sourceforge.net/zoolib/?rev=1254&view=rev Author: agreen Date: 2010-04-07 21:34:51 +0000 (Wed, 07 Apr 2010) Log Message: ----------- Change sMakeYadR return type to be an RPos if possible. Modified Paths: -------------- trunk/zoolib/source/cxx/more/zoolib/photoshop/ZPhotoshop_Yad.cpp trunk/zoolib/source/cxx/more/zoolib/photoshop/ZPhotoshop_Yad.h trunk/zoolib/source/cxx/more/zoolib/tql/ZTQLTest.cpp trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqR.cpp trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqR.h trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqRPos.cpp trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqRPos.h trunk/zoolib/source/cxx/more/zoolib/zql/ZQL_Expr_Concrete.cpp trunk/zoolib/source/cxx/more/zoolib/zql/ZQL_Expr_Concrete.h trunk/zoolib/source/cxx/zoolib/ZWinRegistry_Yad.cpp trunk/zoolib/source/cxx/zoolib/ZWinRegistry_Yad.h trunk/zoolib/source/cxx/zoolib/ZYad_Any.cpp trunk/zoolib/source/cxx/zoolib/ZYad_Any.h trunk/zoolib/source/cxx/zoolib/ZYad_AppleEvent.cpp trunk/zoolib/source/cxx/zoolib/ZYad_AppleEvent.h trunk/zoolib/source/cxx/zoolib/ZYad_CFType.cpp trunk/zoolib/source/cxx/zoolib/ZYad_CFType.h trunk/zoolib/source/cxx/zoolib/ZYad_JSON.cpp trunk/zoolib/source/cxx/zoolib/ZYad_NS.h trunk/zoolib/source/cxx/zoolib/ZYad_NS.mm trunk/zoolib/source/cxx/zoolib/ZYad_Simple.cpp trunk/zoolib/source/cxx/zoolib/ZYad_ZooLib.cpp trunk/zoolib/source/cxx/zoolib/ZYad_ZooLib.h Modified: trunk/zoolib/source/cxx/more/zoolib/photoshop/ZPhotoshop_Yad.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/photoshop/ZPhotoshop_Yad.cpp 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/more/zoolib/photoshop/ZPhotoshop_Yad.cpp 2010-04-07 21:34:51 UTC (rev 1254) @@ -125,10 +125,10 @@ return new ZYadPrimR_Any(iVal.AsAny()); } -ZRef<ZYadSeqR> sMakeYadR(const Seq& iSeq) +ZRef<ZYadSeqRPos> sMakeYadR(const Seq& iSeq) { return new YadSeqRPos(iSeq); } -ZRef<ZYadMapR> sMakeYadR(const Map& iMap) +ZRef<ZYadMapRPos> sMakeYadR(const Map& iMap) { return new YadMapRPos(iMap); } } // namespace ZPhotoshop Modified: trunk/zoolib/source/cxx/more/zoolib/photoshop/ZPhotoshop_Yad.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/photoshop/ZPhotoshop_Yad.h 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/more/zoolib/photoshop/ZPhotoshop_Yad.h 2010-04-07 21:34:51 UTC (rev 1254) @@ -37,9 +37,9 @@ ZRef<ZYadR> sMakeYadR(const Val& iVal); -ZRef<ZYadSeqR> sMakeYadR(const Seq& iSeq); +ZRef<ZYadSeqRPos> sMakeYadR(const Seq& iSeq); -ZRef<ZYadMapR> sMakeYadR(const Map& iMap); +ZRef<ZYadMapRPos> sMakeYadR(const Map& iMap); } // namespace ZPhotoshop Modified: trunk/zoolib/source/cxx/more/zoolib/tql/ZTQLTest.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/tql/ZTQLTest.cpp 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/more/zoolib/tql/ZTQLTest.cpp 2010-04-07 21:34:51 UTC (rev 1254) @@ -460,12 +460,13 @@ s2.Append(aMap); } - ZRef<ZYadSeqR> yad1 = sMakeYadR(s1).DynamicCast<ZYadSeqR>(); - ZRef<ZYadSeqR> yad2 = sMakeYadR(s2).DynamicCast<ZYadSeqR>(); + ZRef<ZYadSeqR> yad1 = sMakeYadR(s1); + ZRef<ZYadSeqR> yad2 = sMakeYadR(s2); - Expr_Relation thePhys1 = ZValBase_YadSeqR::sRelation(yad1); - Expr_Relation thePhys2 = ZValBase_YadSeqR::sRelation(yad2); + Expr_Concrete thePhys1 = ZValBase_YadSeqR::sConcrete(yad1); + Expr_Concrete thePhys2 = ZValBase_YadSeqR::sConcrete(yad2); +// Expr_Relation sect = sJoin(thePhys1, thePhys2); Expr_Relation sect = thePhys1 * thePhys2; ZRef<ZQE::Iterator> theIterator = ZValBase_YadSeqR::sIterator(sect); @@ -528,9 +529,7 @@ s.Writef("\nElapsed, read: %gms\n", 1000.0 * (ZTime::sNow() - start)); start = ZTime::sNow(); - Expr_Relation thePhys = ZValBase_YadSeqR::sRelation(theYadSeqR); -// Expr_Relation thePhys(new ZValBase_YadSeqRPos::ExprRep_Concrete(sMakeYadR(theSeq).DynamicCast<ZYadSeqRPos>())); -// Expr_Relation thePhys(new ZValBase_Any::ExprRep_Concrete(theSeq)); + Expr_Relation thePhys = ZValBase_YadSeqR::sConcrete(theYadSeqR); thePhys = thePhys & theCondition; thePhys = thePhys & thePhys; @@ -568,23 +567,6 @@ theYadSeqR->SkipAll(); // ZYad_ZooLibStrim::sToStrim(0, theYadOptions, theYadSeqR, s); } -#elif 0 - if (theYadSeqR) - { - for (;;) - { - ZRef<ZYadR> inner = theYadSeqR->ReadInc(); - if (!inner) - break; - ZVal_Any theVal = sFromYadR(ZVal_Any(), inner); - - if (sMatches(theCondition, theVal)) - { -// ZYad_ZooLibStrim::sToStrim(0, theYadOptions, sMakeYadR(theVal), s); -// s << "\n"; - } - } - } #endif s.Writef("\nElapsed: %gms\n", 1000.0 * (ZTime::sNow() - start)); } Modified: trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqR.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqR.cpp 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqR.cpp 2010-04-07 21:34:51 UTC (rev 1254) @@ -166,11 +166,11 @@ #pragma mark - #pragma mark * ZValBase_YadSeqR pseudo constructors -ZQL::Expr_Relation sRelation(ZRef<ZYadSeqR> iYadSeqR) +ZQL::Expr_Concrete sConcrete(ZRef<ZYadSeqR> iYadSeqR) { // Could do a dynamic cast on iYadSeqR to see if it's really a ZYadSeqRPos, // in which case returning a ZValBase_YadSeqRPos::Iterator would be a win. - return ZQL::Expr_Relation(new ExprRep_Concrete(iYadSeqR)); + return ZQL::Expr_Concrete(new ExprRep_Concrete(iYadSeqR)); } ZRef<ZQE::Iterator> sIterator(ZRef<ZQL::ExprRep_Relation> iExprRep) Modified: trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqR.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqR.h 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqR.h 2010-04-07 21:34:51 UTC (rev 1254) @@ -24,7 +24,7 @@ #include "zoolib/ZYad.h" #include "zoolib/zqe/ZQE_Iterator.h" -#include "zoolib/zql/ZQL_Expr_Relation.h" +#include "zoolib/zql/ZQL_Expr_Concrete.h" NAMESPACE_ZOOLIB_BEGIN namespace ZValBase_YadSeqR { @@ -33,7 +33,8 @@ #pragma mark - #pragma mark * ZValBase_YadSeqR pseudo constructors -ZQL::Expr_Relation sRelation(ZRef<ZYadSeqR> iYadSeqR); +ZQL::Expr_Concrete sConcrete(ZRef<ZYadSeqR> iYadSeqR); + ZRef<ZQE::Iterator> sIterator(ZRef<ZQL::ExprRep_Relation> iExprRep); } // namespace ZValBase_YadSeqR Modified: trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqRPos.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqRPos.cpp 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqRPos.cpp 2010-04-07 21:34:51 UTC (rev 1254) @@ -145,8 +145,8 @@ #pragma mark - #pragma mark * ZValBase_YadSeqRPos pseudo constructors -ZQL::Expr_Relation sRelation(ZRef<ZYadSeqRPos> iYadSeqRPos) - { return ZQL::Expr_Relation(new ExprRep_Concrete(iYadSeqRPos)); } +ZQL::Expr_Concrete sConcrete(ZRef<ZYadSeqRPos> iYadSeqRPos) + { return ZQL::Expr_Concrete(new ExprRep_Concrete(iYadSeqRPos)); } ZRef<ZQE::Iterator> sIterator(ZRef<ZQL::ExprRep_Relation> iExprRep) { return Visitor_ExprRep_Concrete_MakeIterator().MakeIterator(iExprRep); } Modified: trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqRPos.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqRPos.h 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/more/zoolib/valbase/ZValBase_YadSeqRPos.h 2010-04-07 21:34:51 UTC (rev 1254) @@ -24,7 +24,7 @@ #include "zoolib/ZYad.h" #include "zoolib/zqe/ZQE_Iterator.h" -#include "zoolib/zql/ZQL_Expr_Relation.h" +#include "zoolib/zql/ZQL_Expr_Concrete.h" NAMESPACE_ZOOLIB_BEGIN namespace ZValBase_YadSeqRPos { @@ -33,7 +33,8 @@ #pragma mark - #pragma mark * ZValBase_YadSeqRPos pseudo constructors -ZQL::Expr_Relation sRelation(ZRef<ZYadSeqRPos> iYadSeqRPos); +ZQL::Expr_Concrete sConcrete(ZRef<ZYadSeqRPos> iYadSeqRPos); + ZRef<ZQE::Iterator> sIterator(ZRef<ZQL::ExprRep_Relation> iExprRep); } // namespace ZValBase_YadSeqRPos Modified: trunk/zoolib/source/cxx/more/zoolib/zql/ZQL_Expr_Concrete.cpp =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zql/ZQL_Expr_Concrete.cpp 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/more/zoolib/zql/ZQL_Expr_Concrete.cpp 2010-04-07 21:34:51 UTC (rev 1254) @@ -53,5 +53,32 @@ bool Visitor_ExprRep_Concrete::Visit_Concrete(ZRef<ExprRep_Concrete> iRep) { return Visitor_ExprRep_Relation::Visit_ExprRep(iRep); } +// ================================================================================================= +#pragma mark - +#pragma mark * Expr_Concrete + +Expr_Concrete::Expr_Concrete() + {} + +Expr_Concrete::Expr_Concrete(const Expr_Concrete& iOther) +: inherited(iOther) + {} + +Expr_Concrete::~Expr_Concrete() + {} + +Expr_Concrete& Expr_Concrete::operator=(const Expr_Concrete& iOther) + { + inherited::operator=(iOther); + return *this; + } + +Expr_Concrete::Expr_Concrete(const ZRef<ExprRep_Concrete>& iRep) +: inherited(iRep) + {} + +Expr_Concrete::operator ZRef<ExprRep_Concrete>() const + { return this->StaticCast<ExprRep_Concrete>(); } + } // namespace ZQL NAMESPACE_ZOOLIB_END Modified: trunk/zoolib/source/cxx/more/zoolib/zql/ZQL_Expr_Concrete.h =================================================================== --- trunk/zoolib/source/cxx/more/zoolib/zql/ZQL_Expr_Concrete.h 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/more/zoolib/zql/ZQL_Expr_Concrete.h 2010-04-07 21:34:51 UTC (rev 1254) @@ -53,6 +53,28 @@ virtual bool Visit_Concrete(ZRef<ExprRep_Concrete> iRep); }; +// ================================================================================================= +#pragma mark - +#pragma mark * Expr_Concrete + +class Expr_Concrete : public Expr_Relation + { + typedef Expr_Relation inherited; + + Expr_Concrete operator=(const Expr_Relation&); + Expr_Concrete operator=(const ZRef<ExprRep_Relation>&); + +public: + Expr_Concrete(); + Expr_Concrete(const Expr_Concrete& iOther); + ~Expr_Concrete(); + Expr_Concrete& operator=(const Expr_Concrete& iOther); + + Expr_Concrete(const ZRef<ExprRep_Concrete>& iRep); + + operator ZRef<ExprRep_Concrete>() const; + }; + } // namespace ZQL NAMESPACE_ZOOLIB_END Modified: trunk/zoolib/source/cxx/zoolib/ZWinRegistry_Yad.cpp =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZWinRegistry_Yad.cpp 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZWinRegistry_Yad.cpp 2010-04-07 21:34:51 UTC (rev 1254) @@ -40,12 +40,12 @@ return sMakeYadR(*theVal); if (const string16* theVal = iVal.PGet_T<string16>()) - return sMakeYadR(ZAny(ZUnicode::sAsUTF8(*theVal))); + return sMakeYadR(ZUnicode::sAsUTF8(*theVal)); return sMakeYadR(iVal.AsAny()); } -ZRef<ZYadMapR> sMakeYadR(const KeyRef& iKeyRef) +ZRef<ZYadMapRPos> sMakeYadR(const KeyRef& iKeyRef) { return new ZYadMapRPos_Val_T<KeyRef>(iKeyRef); } } // namespace ZWinRegistry Modified: trunk/zoolib/source/cxx/zoolib/ZWinRegistry_Yad.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZWinRegistry_Yad.h 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZWinRegistry_Yad.h 2010-04-07 21:34:51 UTC (rev 1254) @@ -39,7 +39,7 @@ ZRef<ZYadR> sMakeYadR(const Val& iVal); -ZRef<ZYadMapR> sMakeYadR(const KeyRef& iKeyRef); +ZRef<ZYadMapRPos> sMakeYadR(const KeyRef& iKeyRef); } // namespace ZWinRegistry Modified: trunk/zoolib/source/cxx/zoolib/ZYad_Any.cpp =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad_Any.cpp 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZYad_Any.cpp 2010-04-07 21:34:51 UTC (rev 1254) @@ -35,7 +35,7 @@ return sMakeYadR(*theVal); if (const ZData_Any* theVal = iVal.PGet_T<ZData_Any>()) - return new ZYadStreamRPos_Any(*theVal); + return sMakeYadR(*theVal); if (const ZSeq_Any* theVal = iVal.PGet_T<ZSeq_Any>()) return sMakeYadR(*theVal); @@ -49,10 +49,10 @@ ZRef<ZYadStreamR> sMakeYadR(const ZData_Any& iData) { return new ZYadStreamRPos_Any(iData); } -ZRef<ZYadSeqR> sMakeYadR(const ZSeq_Any& iSeq) +ZRef<ZYadSeqRPos> sMakeYadR(const ZSeq_Any& iSeq) { return new ZYadSeqRPos_Any(iSeq); } -ZRef<ZYadMapR> sMakeYadR(const ZMap_Any& iMap) +ZRef<ZYadMapRPos> sMakeYadR(const ZMap_Any& iMap) { return new ZYadMapRPos_Any(iMap); } // ================================================================================================= @@ -73,6 +73,10 @@ virtual bool Visit_YadSeqR(ZRef<ZYadSeqR> iYadSeqR); virtual bool Visit_YadMapR(ZRef<ZYadMapR> iYadMapR); +// Our protocol + ZVal_Any GetVal(ZRef<ZYadR> iYadR); + +private: bool fRepeatedPropsAsSeq; const ZVal_Any& fDefault; ZVal_Any fOutput; @@ -100,9 +104,7 @@ if (ZRef<ZYadSeqRPos_Any> asSeq = iYadR.DynamicCast<ZYadSeqRPos_Any>()) return asSeq->GetSeq(); - Visitor_Yad_GetVal_Any theVisitor(iRepeatedPropsAsSeq, iDefault); - iYadR->Accept(theVisitor); - return theVisitor.fOutput; + return Visitor_Yad_GetVal_Any(iRepeatedPropsAsSeq, iDefault).GetVal(iYadR); } Visitor_Yad_GetVal_Any::Visitor_Yad_GetVal_Any(bool iRepeatedPropsAsSeq, const ZVal_Any& iDefault) @@ -133,7 +135,7 @@ ZSeq_Any theSeq; while (ZRef<ZYadR> theChild = iYadSeqR->ReadInc()) - theSeq.Append(sFromYadR(fDefault, theChild)); + theSeq.Append(this->GetVal(theChild)); fOutput = theSeq; return true; @@ -146,7 +148,7 @@ string theName; while (ZRef<ZYadR> theChild = iYadMapR->ReadInc(theName)) { - ZVal_Any theVal = sFromYadR(fRepeatedPropsAsSeq, fDefault, theChild); + ZVal_Any theVal = this->GetVal(theChild); if (fRepeatedPropsAsSeq) { if (ZVal_Any* prior = theMap.PGet(theName)) @@ -169,4 +171,15 @@ return true; } +ZVal_Any Visitor_Yad_GetVal_Any::GetVal(ZRef<ZYadR> iYadR) + { + ZVal_Any result; + if (iYadR) + { + iYadR->Accept(*this); + std::swap(result, fOutput); + } + return result; + } + NAMESPACE_ZOOLIB_END Modified: trunk/zoolib/source/cxx/zoolib/ZYad_Any.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad_Any.h 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZYad_Any.h 2010-04-07 21:34:51 UTC (rev 1254) @@ -39,9 +39,9 @@ ZRef<ZYadStreamR> sMakeYadR(const ZData_Any& iData); -ZRef<ZYadSeqR> sMakeYadR(const ZSeq_Any& iSeq); +ZRef<ZYadSeqRPos> sMakeYadR(const ZSeq_Any& iSeq); -ZRef<ZYadMapR> sMakeYadR(const ZMap_Any& iMap); +ZRef<ZYadMapRPos> sMakeYadR(const ZMap_Any& iMap); // ================================================================================================= #pragma mark - Modified: trunk/zoolib/source/cxx/zoolib/ZYad_AppleEvent.cpp =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad_AppleEvent.cpp 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZYad_AppleEvent.cpp 2010-04-07 21:34:51 UTC (rev 1254) @@ -70,10 +70,10 @@ return new ZYadMapRPos_Any(spAsMap(iVal)); } -ZRef<ZYadSeqR> sMakeYadR(const ZSeq_AppleEvent& iSeq) +ZRef<ZYadSeqRPos> sMakeYadR(const ZSeq_AppleEvent& iSeq) { return new ZYadSeqRPos_AppleEvent(iSeq); } -ZRef<ZYadMapR> sMakeYadR(const ZMap_AppleEvent& iMap) +ZRef<ZYadMapRPos> sMakeYadR(const ZMap_AppleEvent& iMap) { return new ZYadMapRPos_AppleEvent(iMap); } NAMESPACE_ZOOLIB_END Modified: trunk/zoolib/source/cxx/zoolib/ZYad_AppleEvent.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad_AppleEvent.h 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZYad_AppleEvent.h 2010-04-07 21:34:51 UTC (rev 1254) @@ -40,9 +40,9 @@ ZRef<ZYadR> sMakeYadR(const ZVal_AppleEvent& iVal); -ZRef<ZYadSeqR> sMakeYadR(const ZSeq_AppleEvent& iSeq); +ZRef<ZYadSeqRPos> sMakeYadR(const ZSeq_AppleEvent& iSeq); -ZRef<ZYadMapR> sMakeYadR(const ZMap_AppleEvent& iMap); +ZRef<ZYadMapRPos> sMakeYadR(const ZMap_AppleEvent& iMap); NAMESPACE_ZOOLIB_END Modified: trunk/zoolib/source/cxx/zoolib/ZYad_CFType.cpp =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad_CFType.cpp 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZYad_CFType.cpp 2010-04-07 21:34:51 UTC (rev 1254) @@ -188,16 +188,16 @@ ZRef<ZYadStreamR> sMakeYadR(const ZRef<CFDataRef>& iData) { return new ZYadStreamRPos_CFType(iData); } -ZRef<ZYadSeqR> sMakeYadR(const ZRef<CFMutableArrayRef>& iArray) +ZRef<ZYadSeqRPos> sMakeYadR(const ZRef<CFMutableArrayRef>& iArray) { return new ZYadSeqRPos_CFType(iArray); } -ZRef<ZYadSeqR> sMakeYadR(const ZRef<CFArrayRef>& iArray) +ZRef<ZYadSeqRPos> sMakeYadR(const ZRef<CFArrayRef>& iArray) { return new ZYadSeqRPos_CFType(iArray); } -ZRef<ZYadMapR> sMakeYadR(const ZRef<CFMutableDictionaryRef>& iDictionary) +ZRef<ZYadMapRPos> sMakeYadR(const ZRef<CFMutableDictionaryRef>& iDictionary) { return new ZYadMapRPos_CFType(iDictionary); } -ZRef<ZYadMapR> sMakeYadR(const ZRef<CFDictionaryRef>& iDictionary) +ZRef<ZYadMapRPos> sMakeYadR(const ZRef<CFDictionaryRef>& iDictionary) { return new ZYadMapRPos_CFType(iDictionary); } // ================================================================================================= @@ -218,6 +218,10 @@ virtual bool Visit_YadSeqR(ZRef<ZYadSeqR> iYadSeqR); virtual bool Visit_YadMapR(ZRef<ZYadMapR> iYadMapR); +// Our protocol + ZRef<CFTypeRef> GetCFTypeRef(ZRef<ZYadR> iYadR); + +private: ZRef<CFTypeRef> fDefault; ZRef<CFTypeRef> fOutput; }; @@ -229,9 +233,7 @@ if (ZRef<ZYadR_CFType> theYadR = ZRefDynamicCast<ZYadR_CFType>(iYadR)) return theYadR->GetVal(); - Visitor_Yad_GetVal_CFType theVisitor(iDefault); - iYadR->Accept(theVisitor); - return theVisitor.fOutput; + return Visitor_Yad_GetVal_CFType(iDefault).GetCFTypeRef(iYadR); } Visitor_Yad_GetVal_CFType::Visitor_Yad_GetVal_CFType(ZRef<CFTypeRef> iDefault) @@ -263,7 +265,7 @@ ZSeq_CFType theSeq; while (ZRef<ZYadR> theChild = iYadSeqR->ReadInc()) - theSeq.Append(sFromYadR(fDefault, theChild)); + theSeq.Append(this->GetCFTypeRef(theChild)); fOutput = theSeq; return true; @@ -275,12 +277,23 @@ string theName; while (ZRef<ZYadR> theChild = iYadMapR->ReadInc(theName)) - theMap.Set(theName, sFromYadR(fDefault, theChild)); + theMap.Set(theName, this->GetCFTypeRef(theChild)); fOutput = theMap; return true; } +ZRef<CFTypeRef> Visitor_Yad_GetVal_CFType::GetCFTypeRef(ZRef<ZYadR> iYadR) + { + ZRef<CFTypeRef> result; + if (iYadR) + { + iYadR->Accept(*this); + std::swap(result, fOutput); + } + return result; + } + NAMESPACE_ZOOLIB_END #endif // ZCONFIG_SPI_Enabled(CFType) Modified: trunk/zoolib/source/cxx/zoolib/ZYad_CFType.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad_CFType.h 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZYad_CFType.h 2010-04-07 21:34:51 UTC (rev 1254) @@ -146,11 +146,11 @@ ZRef<ZYadStreamR> sMakeYadR(const ZRef<CFMutableDataRef>& iData); ZRef<ZYadStreamR> sMakeYadR(const ZRef<CFDataRef>& iData); -ZRef<ZYadSeqR> sMakeYadR(const ZRef<CFMutableArrayRef>& iArray); -ZRef<ZYadSeqR> sMakeYadR(const ZRef<CFArrayRef>& iArray); +ZRef<ZYadSeqRPos> sMakeYadR(const ZRef<CFMutableArrayRef>& iArray); +ZRef<ZYadSeqRPos> sMakeYadR(const ZRef<CFArrayRef>& iArray); -ZRef<ZYadMapR> sMakeYadR(const ZRef<CFMutableDictionaryRef>& iDictionary); -ZRef<ZYadMapR> sMakeYadR(const ZRef<CFDictionaryRef>& iDictionary); +ZRef<ZYadMapRPos> sMakeYadR(const ZRef<CFMutableDictionaryRef>& iDictionary); +ZRef<ZYadMapRPos> sMakeYadR(const ZRef<CFDictionaryRef>& iDictionary); // ================================================================================================= #pragma mark - Modified: trunk/zoolib/source/cxx/zoolib/ZYad_JSON.cpp =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad_JSON.cpp 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZYad_JSON.cpp 2010-04-07 21:34:51 UTC (rev 1254) @@ -623,9 +623,7 @@ { return spMakeYadR_JSON(iStrimmerU); } void ZYad_JSON::sToStrim(ZRef<ZYadR> iYadR, const ZStrimW& s) - { - sToStrim(0, ZYadOptions(), iYadR, s); - } + { sToStrim(0, ZYadOptions(), iYadR, s); } void ZYad_JSON::sToStrim(size_t iInitialIndent, const ZYadOptions& iOptions, ZRef<ZYadR> iYadR, const ZStrimW& s) Modified: trunk/zoolib/source/cxx/zoolib/ZYad_NS.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad_NS.h 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZYad_NS.h 2010-04-07 21:34:51 UTC (rev 1254) @@ -146,11 +146,11 @@ ZRef<ZYadStreamR> sMakeYadR(const ZRef<NSMutableData>& iData); ZRef<ZYadStreamR> sMakeYadR(const ZRef<NSData>& iData); -ZRef<ZYadSeqR> sMakeYadR(const ZRef<NSMutableArray>& iArray); -ZRef<ZYadSeqR> sMakeYadR(const ZRef<NSArray>& iArray); +ZRef<ZYadSeqRPos> sMakeYadR(const ZRef<NSMutableArray>& iArray); +ZRef<ZYadSeqRPos> sMakeYadR(const ZRef<NSArray>& iArray); -ZRef<ZYadMapR> sMakeYadR(const ZRef<NSMutableDictionary>& iDictionary); -ZRef<ZYadMapR> sMakeYadR(const ZRef<NSDictionary>& iDictionary); +ZRef<ZYadMapRPos> sMakeYadR(const ZRef<NSMutableDictionary>& iDictionary); +ZRef<ZYadMapRPos> sMakeYadR(const ZRef<NSDictionary>& iDictionary); // ================================================================================================= #pragma mark - Modified: trunk/zoolib/source/cxx/zoolib/ZYad_NS.mm =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad_NS.mm 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZYad_NS.mm 2010-04-07 21:34:51 UTC (rev 1254) @@ -168,16 +168,16 @@ ZRef<ZYadStreamR> sMakeYadR(const ZRef<NSData>& iData) { return new ZYadStreamRPos_NS(iData); } -ZRef<ZYadSeqR> sMakeYadR(const ZRef<NSMutableArray>& iArray) +ZRef<ZYadSeqRPos> sMakeYadR(const ZRef<NSMutableArray>& iArray) { return new ZYadSeqRPos_NS(iArray); } -ZRef<ZYadSeqR> sMakeYadR(const ZRef<NSArray>& iArray) +ZRef<ZYadSeqRPos> sMakeYadR(const ZRef<NSArray>& iArray) { return new ZYadSeqRPos_NS(iArray); } -ZRef<ZYadMapR> sMakeYadR(const ZRef<NSMutableDictionary>& iDictionary) +ZRef<ZYadMapRPos> sMakeYadR(const ZRef<NSMutableDictionary>& iDictionary) { return new ZYadMapRPos_NS(iDictionary); } -ZRef<ZYadMapR> sMakeYadR(const ZRef<NSDictionary>& iDictionary) +ZRef<ZYadMapRPos> sMakeYadR(const ZRef<NSDictionary>& iDictionary) { return new ZYadMapRPos_NS(iDictionary); } // ================================================================================================= @@ -198,6 +198,10 @@ virtual bool Visit_YadSeqR(ZRef<ZYadSeqR> iYadSeqR); virtual bool Visit_YadMapR(ZRef<ZYadMapR> iYadMapR); +// Our protocol + ZRef<NSObject> GetNSObject(ZRef<ZYadR> iYadR); + +private: ZRef<NSObject> fDefault; ZRef<NSObject> fOutput; }; @@ -209,9 +213,7 @@ if (ZRef<ZYadR_NS> theYadR = iYadR.DynamicCast<ZYadR_NS>()) return theYadR->GetVal(); - Visitor_Yad_GetVal_NS theVisitor(iDefault); - iYadR->Accept(theVisitor); - return theVisitor.fOutput; + return Visitor_Yad_GetVal_NS(iDefault).GetNSObject(iYadR); } Visitor_Yad_GetVal_NS::Visitor_Yad_GetVal_NS(ZRef<NSObject> iDefault) @@ -243,7 +245,7 @@ ZSeq_NS theSeq; while (ZRef<ZYadR> theChild = iYadSeqR->ReadInc()) - theSeq.Append(sFromYadR(fDefault, theChild)); + theSeq.Append(this->GetNSObject(theChild)); fOutput = theSeq; return true; @@ -255,12 +257,23 @@ string theName; while (ZRef<ZYadR> theChild = iYadMapR->ReadInc(theName)) - theMap.Set(theName, sFromYadR(fDefault, theChild)); + theMap.Set(theName, this->GetNSObject(theChild)); fOutput = theMap; return true; } +ZRef<NSObject> Visitor_Yad_GetVal_NS::GetNSObject(ZRef<ZYadR> iYadR) + { + ZRef<NSObject> result; + if (iYadR) + { + iYadR->Accept(*this); + std::swap(result, fOutput); + } + return result; + } + NAMESPACE_ZOOLIB_END #endif // ZCONFIG_SPI_Enabled(Cocoa) Modified: trunk/zoolib/source/cxx/zoolib/ZYad_Simple.cpp =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad_Simple.cpp 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZYad_Simple.cpp 2010-04-07 21:34:51 UTC (rev 1254) @@ -32,8 +32,7 @@ static void spThrowParseException(const string& iMessage) { throw ZYadParseException_Simple(iMessage); } -bool spRead_Until( - const ZStrimU& iStrimU, UTF32 iTerminator, string& oString) +bool spRead_Until(const ZStrimU& iStrimU, UTF32 iTerminator, string& oString) { oString.clear(); return ZUtil_Strim::sCopy_Until(iStrimU, iTerminator, ZStrimW_String(oString)); Modified: trunk/zoolib/source/cxx/zoolib/ZYad_ZooLib.cpp =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad_ZooLib.cpp 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZYad_ZooLib.cpp 2010-04-07 21:34:51 UTC (rev 1254) @@ -166,10 +166,10 @@ return new ZYadPrimR_ZooLib(iVal); } -ZRef<ZYadSeqR> sMakeYadR(const ZSeq_ZooLib& iSeq) +ZRef<ZYadSeqRPos> sMakeYadR(const ZSeq_ZooLib& iSeq) { return new ZYadSeqRPos_ZooLib(iSeq); } -ZRef<ZYadMapR> sMakeYadR(const ZMap_ZooLib& iMap) +ZRef<ZYadMapRPos> sMakeYadR(const ZMap_ZooLib& iMap) { return new ZYadMapRPos_ZooLib(iMap); } // ================================================================================================= Modified: trunk/zoolib/source/cxx/zoolib/ZYad_ZooLib.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad_ZooLib.h 2010-04-07 20:29:36 UTC (rev 1253) +++ trunk/zoolib/source/cxx/zoolib/ZYad_ZooLib.h 2010-04-07 21:34:51 UTC (rev 1254) @@ -102,9 +102,9 @@ ZRef<ZYadR> sMakeYadR(const ZVal_ZooLib& iVal); -ZRef<ZYadSeqR> sMakeYadR(const ZSeq_ZooLib& iSeq); +ZRef<ZYadSeqRPos> sMakeYadR(const ZSeq_ZooLib& iSeq); -ZRef<ZYadMapR> sMakeYadR(const ZMap_ZooLib& iMap); +ZRef<ZYadMapRPos> sMakeYadR(const ZMap_ZooLib& iMap); // ================================================================================================= #pragma mark - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |