[QuantLibAddin-cvs] QuantLibAddin/qlo termstructures.cpp,1.3,1.4
Brought to you by:
ericehlers,
nando
|
From: Eric E. <eri...@us...> - 2006-06-01 11:34:30
|
Update of /cvsroot/quantlibaddin/QuantLibAddin/qlo In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv2680/qlo Modified Files: termstructures.cpp Log Message: revise processing for instance names Index: termstructures.cpp =================================================================== RCS file: /cvsroot/quantlibaddin/QuantLibAddin/qlo/termstructures.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** termstructures.cpp 30 May 2006 10:05:01 -0000 1.3 --- termstructures.cpp 1 Jun 2006 10:52:21 -0000 1.4 *************** *** 217,234 **** namespace detail { class RateHelperPrioritySorter { public: // does h1 come before h2? ! bool operator()(const std::pair<boost::shared_ptr<RateHelper>, long>& h1, ! const std::pair<boost::shared_ptr<RateHelper>, long>& h2) const { ! if (h1.first->getObject().latestDate() > h2.first->getObject().latestDate()) return false; ! if (h1.first->getObject().latestDate() == h2.first->getObject().latestDate()) { ! if (h1.second > h2.second) { return false; ! } else if (h1.second == h2.second) { ! return h1.first->getStubName() > h2.first->getStubName(); } } --- 217,245 ---- namespace detail { + struct RateHelperItem { + QuantLib::Date latestDate; + long priority; + std::string instanceName; + RateHelperItem( + const QuantLib::Date& latestDate, + const long& priority, + const std::string& instanceName) + : latestDate(latestDate), priority(priority), instanceName(instanceName) {} + }; + class RateHelperPrioritySorter { public: // does h1 come before h2? ! bool operator()(const RateHelperItem& h1, ! const RateHelperItem& h2) const { ! if (h1.latestDate > h2.latestDate) return false; ! if (h1.latestDate == h2.latestDate) { ! if (h1.priority > h2.priority) { return false; ! } else if (h1.priority == h2.priority) { ! return h1.instanceName > h2.instanceName; } } *************** *** 263,267 **** // purge input rate helpers according to their includeFlag, // their expiration, and maximum number of allowed futures ! std::vector<std::pair<boost::shared_ptr<RateHelper>, long> > rhs; QuantLib::Size i; long futuresCounter = 0; --- 274,278 ---- // purge input rate helpers according to their includeFlag, // their expiration, and maximum number of allowed futures ! std::vector<detail::RateHelperItem> rhs; QuantLib::Size i; long futuresCounter = 0; *************** *** 271,290 **** if (includeFlag[i]) { if (!boost::dynamic_pointer_cast<FuturesRateHelper>(instruments[i]) && (earliestDate >= evalDate)) { ! rhs.push_back(std::make_pair(instruments[i], priority[i])); } else if (futuresCounter<nFutures && (earliestDate-2 >= evalDate)) { futuresCounter++; ! rhs.push_back(std::make_pair(instruments[i], priority[i])); } } } ! std::vector<std::string> instanceNameStubs; // zero or one rate helper left if (rhs.size()<2) { ! std::vector<std::pair<boost::shared_ptr<RateHelper>, long> >::const_iterator i; for (i = rhs.begin(); i != rhs.end(); i++) ! instanceNameStubs.push_back((*i).first->getStubName()); ! return instanceNameStubs; } --- 282,303 ---- if (includeFlag[i]) { if (!boost::dynamic_pointer_cast<FuturesRateHelper>(instruments[i]) && (earliestDate >= evalDate)) { ! rhs.push_back(detail::RateHelperItem(instruments[i]->getObject().latestDate(), ! priority[i], instrumentHandles[i])); } else if (futuresCounter<nFutures && (earliestDate-2 >= evalDate)) { futuresCounter++; ! rhs.push_back(detail::RateHelperItem(instruments[i]->getObject().latestDate(), ! priority[i], instrumentHandles[i])); } } } ! std::vector<std::string> instanceNames; // zero or one rate helper left if (rhs.size()<2) { ! std::vector<detail::RateHelperItem>::const_iterator i; for (i = rhs.begin(); i != rhs.end(); i++) ! instanceNames.push_back(i->instanceName); ! return instanceNames; } *************** *** 293,303 **** for (i=0; i<rhs.size()-1; i++) { ! if (rhs[i].first->getObject().latestDate() < rhs[i+1].first->getObject().latestDate()) ! instanceNameStubs.push_back(rhs[i].first->getStubName()); } // add the last one in any case ! instanceNameStubs.push_back(rhs[i].first->getStubName()); ! return instanceNameStubs; } --- 306,316 ---- for (i=0; i<rhs.size()-1; i++) { ! if (rhs[i].latestDate < rhs[i+1].latestDate) ! instanceNames.push_back(rhs[i].instanceName); } // add the last one in any case ! instanceNames.push_back(rhs[i].instanceName); ! return instanceNames; } |