[QuantLibAddin-cvs] QuantLibAddin/qlo typefactory.hpp,1.27,1.28
Brought to you by:
ericehlers,
nando
|
From: Eric E. <eri...@us...> - 2006-08-28 10:07:52
|
Update of /cvsroot/quantlibaddin/QuantLibAddin/qlo In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv18640/qlo Modified Files: typefactory.hpp Log Message: merge R000313f0-branch Index: typefactory.hpp =================================================================== RCS file: /cvsroot/quantlibaddin/QuantLibAddin/qlo/typefactory.hpp,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** typefactory.hpp 9 Aug 2006 15:24:53 -0000 1.27 --- typefactory.hpp 28 Aug 2006 10:07:49 -0000 1.28 *************** *** 26,30 **** #include <ql/Math/interpolation2D.hpp> #include <ql/Indexes/euribor.hpp> ! #include <ql/Indexes/euriborswapfixa.hpp> #include <ql/TermStructures/ratehelpers.hpp> #include <ql/CashFlows/cmscoupon.hpp> --- 26,30 ---- #include <ql/Math/interpolation2D.hpp> #include <ql/Indexes/euribor.hpp> ! //#include <ql/Indexes/euriborswapfixa.hpp> #include <ql/TermStructures/ratehelpers.hpp> #include <ql/CashFlows/cmscoupon.hpp> *************** *** 50,55 **** class RegistryManager { protected: ! template<typename KeyClass, typename ConstructorSignature> ! ConstructorSignature getType(const KeyClass& id); bool checkType(const std::string& id) { --- 50,63 ---- class RegistryManager { protected: ! template<typename KeyClass> ! void *getType(const KeyClass& id) { ! typename RegistryClass::TypeMapPtr type_map = getTypeMap(); ! KeyClass idUpper = uppercase(id); ! typename RegistryClass::TypeMap::iterator i; ! for (i = type_map->begin(); i != type_map->end(); i++) ! if (uppercase(i->first) == idUpper) ! return i->second; ! QL_FAIL("Unknown id for Type: " << id); ! } bool checkType(const std::string& id) { *************** *** 83,100 **** }; - template<typename T, typename RegistryClass> - template<typename KeyClass, typename ConstructorSignature> - ConstructorSignature - RegistryManager<T, RegistryClass>::getType(const KeyClass& id) { - typename RegistryClass::TypeMapPtr type_map = getTypeMap(); - KeyClass idUpper = uppercase(id); - typename RegistryClass::TypeMap::iterator i; - for (i = type_map->begin(); i != type_map->end(); i++) - if (uppercase(i->first) == idUpper) - return static_cast<ConstructorSignature>(i->second); - //return reinterpret_cast<ConstructorSignature>(i->second); - QL_FAIL("Unknown id for Type: " << id); - } - /* *** Enumerated Types *** */ template<typename T> --- 91,94 ---- *************** *** 102,107 **** public: T operator()(const std::string& id) { ! return *(getType<std::string, T*>(id)); ! //return *(this->getType(id)); } using RegistryManager<T, EnumTypeRegistry>::checkType; --- 96,100 ---- public: T operator()(const std::string& id) { ! return *(static_cast<T*>(this->getType(id))); } using RegistryManager<T, EnumTypeRegistry>::checkType; *************** *** 125,129 **** const double& strike) { StrikedTypePayoffConstructor1 strikedTypePayoffConstructor = ! getType<std::string, StrikedTypePayoffConstructor1>(payoffID); return strikedTypePayoffConstructor(optionType, strike); } --- 118,122 ---- const double& strike) { StrikedTypePayoffConstructor1 strikedTypePayoffConstructor = ! (StrikedTypePayoffConstructor1)(getType(payoffID)); return strikedTypePayoffConstructor(optionType, strike); } *************** *** 134,138 **** const double& strikeIncrement) { StrikedTypePayoffConstructor2 strikedTypePayoffConstructor = ! getType<std::string, StrikedTypePayoffConstructor2>(payoffID); return strikedTypePayoffConstructor(optionType, strike, strikeIncrement); } --- 127,131 ---- const double& strikeIncrement) { StrikedTypePayoffConstructor2 strikedTypePayoffConstructor = ! (StrikedTypePayoffConstructor2)(getType(payoffID)); return strikedTypePayoffConstructor(optionType, strike, strikeIncrement); } *************** *** 152,156 **** QL_REQUIRE(timeSteps>0, "timeSteps must be positive"); PricingEngineConstructor pricingEngineConstructor = ! getType<std::string, PricingEngineConstructor>(engineID); return pricingEngineConstructor(timeSteps); } --- 145,149 ---- QL_REQUIRE(timeSteps>0, "timeSteps must be positive"); PricingEngineConstructor pricingEngineConstructor = ! (PricingEngineConstructor)(getType(engineID)); return pricingEngineConstructor(timeSteps); } *************** *** 170,174 **** dbl_itr& xBegin, dbl_itr& xEnd, dbl_itr& yBegin) { InterpolationConstructor interpolationConstructor = ! getType<std::string, InterpolationConstructor>(interpolationID); return interpolationConstructor(xBegin, xEnd, yBegin); } --- 163,167 ---- dbl_itr& xBegin, dbl_itr& xEnd, dbl_itr& yBegin) { InterpolationConstructor interpolationConstructor = ! (InterpolationConstructor)(getType(interpolationID)); return interpolationConstructor(xBegin, xEnd, yBegin); } *************** *** 188,192 **** const QuantLib::Matrix& zData) { Interpolation2DConstructor interpolation2DConstructor = ! getType<std::string, Interpolation2DConstructor>(interpolationID); return interpolation2DConstructor(xBegin, xEnd, yBegin, yEnd, zData); } --- 181,185 ---- const QuantLib::Matrix& zData) { Interpolation2DConstructor interpolation2DConstructor = ! (Interpolation2DConstructor)(getType(interpolationID)); return interpolation2DConstructor(xBegin, xEnd, yBegin, yEnd, zData); } *************** *** 205,209 **** const std::string& handleYieldTermStructureID = "") { EuriborConstructor euriborConstructor = ! getType<std::string, EuriborConstructor>(euriborID); return euriborConstructor(handleYieldTermStructureID); } --- 198,202 ---- const std::string& handleYieldTermStructureID = "") { EuriborConstructor euriborConstructor = ! (EuriborConstructor)(getType(euriborID)); return euriborConstructor(handleYieldTermStructureID); } *************** *** 212,231 **** /* *** EuriborSwapFixA *** */ ! typedef boost::shared_ptr<QuantLib::EuriborSwapFixA>(*EuriborSwapFixAConstructor)( ! const std::string& handleYieldTermStructureID); ! template<> ! class Create<boost::shared_ptr<QuantLib::EuriborSwapFixA> > : ! private RegistryManager<QuantLib::EuriborSwapFixA, EnumClassRegistry> { ! public: ! boost::shared_ptr<QuantLib::EuriborSwapFixA> operator() ( ! const std::string& euriborSwapFixAID, ! const std::string& handleYieldTermStructureID = "") { ! EuriborSwapFixAConstructor euriborSwapFixAConstructor = ! getType<std::string, EuriborSwapFixAConstructor>(euriborSwapFixAID); ! return euriborSwapFixAConstructor(handleYieldTermStructureID); ! } ! using RegistryManager<QuantLib::EuriborSwapFixA, EnumClassRegistry>::checkType; ! }; // a singleton to store the Handle<YieldTermStructure> --- 205,222 ---- /* *** EuriborSwapFixA *** */ ! //typedef boost::shared_ptr<QuantLib::EuriborSwapFixA>(*EuriborSwapFixAConstructor)(); ! //template<> ! //class Create<boost::shared_ptr<QuantLib::EuriborSwapFixA> > : ! // private RegistryManager<QuantLib::EuriborSwapFixA, EnumClassRegistry> { ! //public: ! // boost::shared_ptr<QuantLib::EuriborSwapFixA> operator() ( ! // const std::string& euriborSwapFixAID) { ! // EuriborSwapFixAConstructor euriborSwapFixAConstructor = ! // getType<std::string, EuriborSwapFixAConstructor>(euriborSwapFixAID); ! // return euriborSwapFixAConstructor(); ! // } ! // using RegistryManager<QuantLib::EuriborSwapFixA, EnumClassRegistry>::checkType; ! //}; // a singleton to store the Handle<YieldTermStructure> *************** *** 264,268 **** KeyPair key(traitsID, interpolatorID); YieldTermStructureConstructor yieldTermStructureConstructor = ! getType<KeyPair, YieldTermStructureConstructor>(key); return yieldTermStructureConstructor(nDays, calendar, rateHelpers, dayCounter); } --- 255,259 ---- KeyPair key(traitsID, interpolatorID); YieldTermStructureConstructor yieldTermStructureConstructor = ! (YieldTermStructureConstructor)(getType(key)); return yieldTermStructureConstructor(nDays, calendar, rateHelpers, dayCounter); } |