RMOL Logo Get Revenue Management Optimisation Library at SourceForge.net. Fast, secure and Free Open Source software downloads
PartialSumHolder.cpp
Go to the documentation of this file.
00001 // //////////////////////////////////////////////////////////////////////
00002 // Import section
00003 // //////////////////////////////////////////////////////////////////////
00004 // C
00005 #include <assert.h>
00006 // STL
00007 #include <iostream>
00008 #include <algorithm>
00009 // RMOL
00010 #include <rmol/bom/PartialSumHolder.hpp>
00011 
00012 namespace RMOL {
00013 
00014   // //////////////////////////////////////////////////////////////////////
00015   PartialSumHolder::PartialSumHolder () {
00016   }
00017 
00018   // //////////////////////////////////////////////////////////////////////
00019   PartialSumHolder::
00020   PartialSumHolder (const PartialSumHolder& iPartialSumHolder) {
00021   }
00022 
00023   // //////////////////////////////////////////////////////////////////////
00024   PartialSumHolder::~PartialSumHolder() {
00025     _partialSumList.clear ();
00026   }
00027 
00028   // //////////////////////////////////////////////////////////////////////
00029   const std::string PartialSumHolder::describeShortKey() const {
00030     std::ostringstream oStr;
00031     return oStr.str();
00032   }
00033   
00034   // //////////////////////////////////////////////////////////////////////
00035   const std::string PartialSumHolder::describeKey() const {
00036     return describeShortKey();
00037   }
00038 
00039   // //////////////////////////////////////////////////////////////////////
00040   std::string PartialSumHolder::toString() const {
00041     std::ostringstream oStr;
00042     oStr << _partialSumList.size();
00043     return oStr.str();
00044   }   
00045 
00046   // //////////////////////////////////////////////////////////////////////
00047   void PartialSumHolder::toStream (std::ostream& ioOut) const {
00048     ioOut << toString();
00049   }
00050   
00051   // //////////////////////////////////////////////////////////////////////
00052   void PartialSumHolder::fromStream (std::istream& ioIn) {
00053   }
00054   
00055   // //////////////////////////////////////////////////////////////////////
00056   const std::string PartialSumHolder::shortDisplay() const {
00057     std::ostringstream oStr;
00058     oStr << describeKey();
00059     // Generate a CSV (Comma Separated Values) output
00060     oStr << "Partial Sum (K = " << _partialSumList.size() << ")" << std::endl;
00061     return oStr.str();
00062   }
00063   
00064   // //////////////////////////////////////////////////////////////////////
00065   const std::string PartialSumHolder::display() const {
00066     std::ostringstream oStr;
00067     oStr << shortDisplay();
00068 
00069     PartialSumList_T::const_iterator itPartialSum = _partialSumList.begin();
00070     for (short k=1; itPartialSum != _partialSumList.end(); itPartialSum++,k++){
00071       const double currentPartialSum = *itPartialSum;
00072       oStr << k << "; " << currentPartialSum;
00073     }
00074     return oStr.str();
00075   }
00076 
00077   // //////////////////////////////////////////////////////////////////////
00078   void PartialSumHolder::initSize (const int K) {
00079     _partialSumList.reserve (K);
00080   }
00081 
00082   // //////////////////////////////////////////////////////////////////////
00083   const double PartialSumHolder::getPartialSum (const int k) const {
00084     return _partialSumList.at (k);
00085   }
00086 
00087   // //////////////////////////////////////////////////////////////////////
00088   void PartialSumHolder::addPartialSum (const double iPartialSum) {
00089     _partialSumList.push_back (iPartialSum);
00090   }
00091 
00092   // //////////////////////////////////////////////////////////////////////
00093   void PartialSumHolder::sort () {
00094     std::sort (_partialSumList.begin(), _partialSumList.end());
00095   }
00096 
00097   // //////////////////////////////////////////////////////////////////////
00098   const int PartialSumHolder::getLowerBound (const double& value) const {
00099     PartialSumList_T::const_iterator itLowerBound =
00100       std::lower_bound (_partialSumList.begin(), _partialSumList.end() , value);
00101     const int position = itLowerBound - _partialSumList.begin();
00102     return position;
00103   }
00104 
00105 }