00001
00002
00003 #include "PredictorBlock.h"
00004
00005 using namespace Yosokumo;
00006
00007
00008
00009 PredictorBlock::PredictorBlock() : Block()
00010 {
00011 setType(PREDICTOR);
00012 }
00013
00014 PredictorBlock::PredictorBlock(std::string id) : Block(id)
00015 {
00016 setType(PREDICTOR);
00017 }
00018
00019 PredictorBlock::PredictorBlock(
00020 std::vector<Predictor>::iterator begin,
00021 std::vector<Predictor>::iterator end) : Block()
00022 {
00023 setType(PREDICTOR);
00024 addPredictors(begin, end);
00025 }
00026
00027 PredictorBlock::PredictorBlock(
00028 std::list<Predictor>::iterator begin,
00029 std::list<Predictor>::iterator end) : Block()
00030 {
00031 setType(PREDICTOR);
00032 addPredictors(begin, end);
00033 }
00034
00035 PredictorBlock::PredictorBlock(
00036 std::string id,
00037 std::vector<Predictor>::iterator begin,
00038 std::vector<Predictor>::iterator end) : Block(id)
00039 {
00040 setType(PREDICTOR);
00041 addPredictors(begin, end);
00042 }
00043
00044 PredictorBlock::PredictorBlock(
00045 std::string id,
00046 std::list<Predictor>::iterator begin,
00047 std::list<Predictor>::iterator end) : Block(id)
00048 {
00049 setType(PREDICTOR);
00050 addPredictors(begin, end);
00051 }
00052
00053 PredictorBlock::~PredictorBlock()
00054 {}
00055
00056
00057
00058 void PredictorBlock::addPredictor(const Predictor &predictor)
00059 {
00060 predictorSequence.push_back(predictor);
00061 }
00062
00063 bool PredictorBlock::addPredictors(
00064 std::vector<Predictor>::iterator begin,
00065 std::vector<Predictor>::iterator end)
00066 {
00067 unsigned old_size = predictorSequence.size();
00068 predictorSequence.insert(predictorSequence.end(), begin, end);
00069 return predictorSequence.size() != old_size;
00070 }
00071
00072 bool PredictorBlock::addPredictors(
00073 std::list<Predictor>::iterator begin,
00074 std::list<Predictor>::iterator end)
00075 {
00076 unsigned old_size = predictorSequence.size();
00077 predictorSequence.insert(predictorSequence.end(), begin, end);
00078 return predictorSequence.size() != old_size;
00079 }
00080
00081 bool PredictorBlock::removePredictors(uint64_t numPredictorsToRemove)
00082 {
00083 if (numPredictorsToRemove == 0 || isEmpty())
00084 return false;
00085
00086 if (numPredictorsToRemove >= size())
00087 clearPredictors();
00088 else
00089 predictorSequence.erase(
00090 predictorSequence.end()-numPredictorsToRemove,
00091 predictorSequence.end());
00092
00093 return true;
00094 }
00095
00096
00097 Predictor PredictorBlock::getPredictor(uint64_t index) const
00098 {
00099 return predictorSequence.at(index);
00100 }
00101
00102
00103 void PredictorBlock::clearPredictors()
00104 {
00105 predictorSequence.clear();
00106 }
00107
00108 uint64_t PredictorBlock::size() const
00109 {
00110 return predictorSequence.size();
00111 }
00112
00113 bool PredictorBlock::isEmpty() const
00114 {
00115 return predictorSequence.empty();
00116 }
00117
00118
00119 std::string PredictorBlock::toString()
00120 {
00121 std::stringstream s;
00122
00123 s <<
00124 "PredictorBlock:" << '\n' <<
00125 " type = " << getType() << '\n' <<
00126 " studyIdentifier = " << getStudyIdentifier() << '\n';
00127
00128 for (uint64_t i = 0; i < size(); ++i)
00129 {
00130 Predictor p = getPredictor(i);
00131
00132 s << "\n" << " " << p;
00133 }
00134
00135 return s.str();
00136 }
00137
00138 std::ostream &operator<<(std::ostream &os, PredictorBlock &p)
00139 {
00140 os << p.toString();
00141 return os;
00142 }
00143
00144 std::stringstream &operator<<(std::stringstream &s, PredictorBlock &p)
00145 {
00146 s << p.toString();
00147 return s;
00148 }
00149
00150