00001 #include <iostream>
00002 #include "HltDataTypes/EFResult.h"
00003
00004 EFResult::EFResult(std::vector<std::string> ans)
00005 : m_answerVector(ans),
00006 m_answerIndex(-1),
00007 m_midanswerIndex(-1),
00008 m_efVec()
00009 {
00010 }
00011
00012 EFResult::EFResult(std::vector<uint32_t> vec, uint32_t pos)
00013 : m_answerVector(),
00014 m_answerIndex(-1),
00015 m_midanswerIndex(-1),
00016 m_efVec()
00017 {
00018 if(vec.size()+pos>54) {
00019 std::cout <<"***EFResult:EFResult(): vector size error!" << std::endl;
00020 m_efVec.resize(54,0);
00021 }
00022 else{
00023 for(unsigned int i=0;i<54;++i){
00024 if(i<pos||i>=vec.size()+pos) m_efVec.push_back(0);
00025 else m_efVec.push_back(vec[i-pos]);
00026 }
00027 }
00028 }
00029
00030 EFResult::EFResult():
00031 m_answerVector(),
00032 m_answerIndex(-1),
00033 m_midanswerIndex(-1),
00034 m_efVec()
00035 {
00036
00037 }
00038
00039 EFResult::~EFResult(){}
00040
00041 const CLID &EFResult::classID()
00042 {
00043 return CLID_EFResult;
00044 }
00045
00046 const CLID &EFResult::clID() const
00047 {
00048 return EFResult::classID();
00049 }
00050
00051 const std::vector<uint32_t> EFResult::getEFVec() const
00052 {
00053 return m_efVec;
00054 }
00055 const uint32_t EFResult::getEFVec(uint32_t pos) const
00056 {
00057 if(pos>=m_efVec.size())return 0;
00058 else return m_efVec[pos];
00059 }
00060
00061 bool EFResult::push_back(uint32_t val){
00062 if(m_efVec.size()>0&&m_efVec.size()<54) return false;
00063 if(m_efVec.size()==0) m_efVec.resize(54,0);
00064 m_efVec.push_back(val);
00065 return true;
00066 }
00067
00068 bool EFResult::appToEFVec(double val, uint32_t pos)
00069 {
00070 if(pos>=54) return false;
00071 if(m_efVec.size()!=0&&m_efVec.size()<54){
00072 std::cout << "EFResult::appToEFVec-->size error!" <<std::endl;
00073 }
00074 if(m_efVec.size()==0) m_efVec.resize(54,0);
00075 float a=val;
00076 float *f=(float*)&m_efVec[pos];
00077 *f = a;
00078 return true;
00079 }
00080
00081 bool EFResult::addToEFVec(uint32_t val, uint32_t pos)
00082 {
00083 if(pos>=54) return false;
00084 if(m_efVec.size()!=0&&m_efVec.size()<54){
00085 std::cout << "EFResult::addToEFVec-->size error!" <<std::endl;
00086 }
00087 if(m_efVec.size()==0) m_efVec.resize(54,0);
00088
00089 m_efVec[pos] +=val;
00090
00091 return true;
00092 }
00093
00094 bool EFResult::setVecBit(uint32_t val, uint32_t vecpos,uint32_t bbegin,uint32_t bend)
00095 {
00096 if(vecpos>=54) return false;
00097 if(bend>=32||bbegin>bend) return false;
00098 if(m_efVec.size()==0) m_efVec.resize(54,0);
00099 uint32_t bits=0xFFFFFFFF>>(31-bend+bbegin);
00100 m_efVec[vecpos]&= (~((bits)<<bbegin));
00101 m_efVec[vecpos]|= (val&bits)<<bbegin;
00102 return true;
00103 }
00104
00105 bool EFResult::setVecBit(bool val,uint32_t vecpos,uint32_t bitpos)
00106 {
00107 if(vecpos>=54) return false;
00108 if(bitpos>=32) return false;
00109 if(m_efVec.size()==0) m_efVec.resize(54,0);
00110 if(val) m_efVec[vecpos]|=(1<<bitpos);
00111 else m_efVec[vecpos]&=(~(1<<bitpos));
00112 return true;
00113 }
00114
00115 void EFResult::setAnswer(std::string &answer)
00116 {
00117 int iCount = 0;
00118
00119 std::vector<std::string>::iterator itVs = m_answerVector.begin();
00120 std::vector<std::string>::iterator endVs = m_answerVector.end();
00121 for (;itVs != endVs && m_answerIndex == -1; ++itVs) {
00122 if (*itVs == answer) {
00123 m_answerIndex = iCount;
00124
00125
00126
00127
00128 }
00129 iCount++;
00130 }
00131 }
00132
00133 void EFResult::setMidAnswer(std::string &answer)
00134 {
00135 int iCount = 0;
00136
00137 std::vector<std::string>::iterator itVs = m_answerVector.begin();
00138 std::vector<std::string>::iterator endVs = m_answerVector.end();
00139 for (;itVs != endVs && m_answerIndex == -1; ++itVs) {
00140 if (*itVs == answer) {
00141 m_midanswerIndex = iCount;
00142
00143
00144
00145
00146 }
00147
00148 iCount++;
00149 }
00150
00151 }
00152
00153 void EFResult::reset()
00154 {
00155 m_answerIndex = -1;
00156 m_midanswerIndex = -1;
00157 if(m_efVec.size()>=54){
00158 m_efVec.resize(54,0);
00159 for(unsigned int i=0;i<m_efVec.size();++i) m_efVec[i]=0;
00160 }
00161 else if(m_efVec.size()!=0){
00162 std::cout <<"EFResult::reset(): m_efVec size check error!"<<std::endl;
00163 }
00164 }
00165
00166 const std::string EFResult::getAnswer() const { return m_answerVector[m_answerIndex]; }
00167
00168 const int EFResult::getAnswerIndex() const { return m_answerIndex; }
00169
00170 const std::string EFResult::getMidAnswer() const { return m_answerVector[m_midanswerIndex]; }
00171
00172 const int EFResult::getMidAnswerIndex() const { return m_midanswerIndex; }