ParserElements.cpp

Go to the documentation of this file.
00001 // Copyright CERN 2012 - Developed in collaboration with GSI
00002 
00003 #include <fesa-core/Utilities/ParserElements.h>
00004 #include <fesa-core/Exception/FesaException.h>
00005 #include <iostream>
00006 
00007 namespace fesa
00008 {
00009 
00010 RollingMultiplexingElement::RollingMultiplexingElement(int32_t depth, const std::string base) :
00011     depth_(depth),
00012     base_(base)
00013 {
00014 }
00015 
00016 RollingMultiplexingElement::~RollingMultiplexingElement()
00017 {
00018 }
00019 
00020 int32_t RollingMultiplexingElement::getDepth()
00021 {
00022     return depth_;
00023 }
00024 
00025 std::string RollingMultiplexingElement::getBase()
00026 {
00027     return base_;
00028 }
00029 
00030 FieldElement::FieldElement(const std::string fieldName)
00031 {
00032     fieldName_ = fieldName;
00033     dimension1_ = 0;
00034     dimension2_ = 0;
00035 }
00036 
00037 FieldElement::~FieldElement()
00038 {
00039 
00040 }
00041 
00042 uint32_t FieldElement::getExtraConditionDepth()
00043 {
00044 
00045     return static_cast<uint32_t>(fieldExtraValuesCol_.size());
00046 }
00047 
00048 uint32_t FieldElement::getMultiplexingDepth()
00049 {
00050     return static_cast<int32_t>(fieldValuesCol_.size());
00051 }
00052 
00053 std::string FieldElement::getCycleName(int32_t cycleId)
00054 {
00055     std::map<int32_t, std::string>::iterator iter = cyclesNamesCol_.find(cycleId);
00056     if (iter != cyclesNamesCol_.end())
00057     {
00058         return iter->second;
00059     }
00060     else
00061     {
00062         return "";
00063     }
00064 }
00065 
00066 void FieldElement::getDimensions(uint32_t& dimension1, uint32_t& dimension2)
00067 {
00068     dimension1 = dimension1_;
00069     dimension1 = dimension2_;
00070 }
00071 
00072 DataStoreElement::DataStoreElement(const std::string name)
00073 {
00074     setFieldValue("name", name);
00075 }
00076 
00077 DataStoreElement::~DataStoreElement()
00078 {
00079 
00080     for (std::map<std::string, FieldElement*>::iterator iter = fieldElements_.begin(); iter != fieldElements_.end(); iter++)
00081         delete iter->second;
00082 
00083     fieldElements_.clear();
00084 
00085 }
00086 
00087 FieldElement* DataStoreElement::getFieldElement(std::string fieldName)
00088 {
00089     std::map<std::string, FieldElement*>::iterator iter = fieldElements_.find(fieldName);
00090     if (iter != fieldElements_.end())
00091     {
00092         return iter->second;
00093     }
00094     return NULL;
00095 
00096 }
00097 
00098 const std::map<std::string, FieldElement*>& DataStoreElement::getFieldElementMap()
00099 {
00100     return fieldElements_;
00101 }
00102 
00103 const std::string& DataStoreElement::getFieldValue(std::string fieldName)
00104 {
00105 
00106     FieldElement* fieldElement = NULL;
00107     std::map<std::string, FieldElement*>::iterator iter = fieldElements_.find(fieldName);
00108     if (iter != fieldElements_.end())
00109     {
00110         fieldElement = iter->second;
00111     }
00112     if (fieldElement != NULL)
00113     {
00114         std::map<int32_t, std::string>::iterator iterCriterion = fieldElement->fieldValuesCol_.begin();
00115 
00116         if (iterCriterion != fieldElement->fieldValuesCol_.end())
00117         {
00118             return iterCriterion->second;
00119 
00120         }
00121     }
00122     throw FesaException(__FILE__, __LINE__, FesaErrorDataStoreElementRetrievingFieldValue.c_str(),
00123                         fieldName.c_str());
00124 }
00125 
00126 void DataStoreElement::addFieldElement(FieldElement* fieldElement)
00127 {
00128     std::map<std::string, FieldElement*>::iterator iter = fieldElements_.find(fieldElement->fieldName_);
00129     if (iter != fieldElements_.end())
00130     {
00131         iter->second = fieldElement;
00132     }
00133     else
00134     {
00135         fieldElements_.insert(make_pair(fieldElement->fieldName_, fieldElement));
00136     }
00137 }
00138 
00139 void DataStoreElement::setFieldValue(std::string fieldName, std::string fieldValue)
00140 {
00141 
00142     FieldElement* fieldElement = NULL;
00143     std::map<std::string, FieldElement*>::iterator iter = fieldElements_.find(fieldName);
00144     if (iter != fieldElements_.end())
00145     {
00146         fieldElement = iter->second;
00147     }
00148     if (fieldElement != NULL)
00149     {
00150 
00151         fieldElement->fieldValuesCol_.insert(make_pair(1, fieldValue));
00152 
00153     }
00154     else
00155     {
00156         fieldElement = new FieldElement(fieldName);
00157 
00158         fieldElement->fieldValuesCol_.insert(make_pair(1, fieldValue));
00159         fieldElements_.insert(make_pair(fieldElement->fieldName_, fieldElement));
00160     }
00161 }
00162 
00163 const std::string& DataStoreElement::getName()
00164 {
00165     return getFieldValue("name");
00166 }
00167 
00168 int32_t DataStoreElement::getSize()
00169 {
00170     return static_cast<int32_t>(fieldElements_.size());
00171 }
00172 
00173 const std::string& DataStoreElement::getTimingDomain()
00174 {
00175     return getFieldValue("timingDomain");
00176 }
00177 const std::string& DataStoreElement::getTimingCriterion()
00178 {
00179     return getFieldValue("mainMuxCriterion");
00180 }
00181 
00182 bool DataStoreElement::isMultiplexed ()
00183 {
00184 
00185     if (getTimingCriterion().compare("NONE") != 0 && getTimingDomain().compare("NONE") != 0)
00186     {
00187         return true;
00188     }
00189     else
00190     {
00191         return false;
00192     }
00193 
00194 }
00195 
00196 //***************************************
00197 
00198 GlobalDeviceElement::GlobalDeviceElement(const std::string name) :
00199     DataStoreElement(name)
00200 {
00201 
00202 }
00203 
00204 GlobalDeviceElement::~GlobalDeviceElement()
00205 {
00206 
00207 }
00208 
00209 // Fields from GlobalDevice
00210 const std::string& GlobalDeviceElement::getClassName()
00211 {
00212     return getFieldValue("className");
00213 }
00214 
00215 const std::string& GlobalDeviceElement::getDescription()
00216 {
00217     return getFieldValue("description");
00218 }
00219 
00220 //***************************************
00221 
00222 DeviceElement::DeviceElement(const std::string name) :
00223     DataStoreElement(name)
00224 {
00225 
00226 }
00227 
00228 DeviceElement::~DeviceElement()
00229 {
00230 
00231 }
00232 
00233 const std::string& DeviceElement::getAccelerator()
00234 {
00235     return getFieldValue("accelerator");
00236 }
00237 
00238 const std::string& DeviceElement::getDescription()
00239 {
00240     return getFieldValue("description");
00241 }
00242 
00243 bool DeviceElement::isMultiplexed()
00244 {
00245     std::string fieldValue = getFieldValue("isMux");
00246     if (fieldValue == "true")
00247     {
00248         return true;
00249     }
00250     else
00251     {
00252         return false;
00253     }
00254 }
00255 
00256 //***************************************
00257 
00258 DomainStoreElement::DomainStoreElement(const std::string name) :
00259     DataStoreElement(name)
00260 {
00261 
00262 }
00263 
00264 DomainStoreElement::~DomainStoreElement()
00265 {
00266 
00267 }
00268 
00269 const std::string& DomainStoreElement::getTimingDomain()
00270 {
00271     return getFieldValue("timingDomain");
00272 }
00273 
00277 const std::string& DomainStoreElement::getMultiplexingCriterion()
00278 {
00279     return getFieldValue("multiplexing-criterion");
00280 }
00281 
00282 } // fesa
00283 

Generated on 18 Jan 2013 for Fesa by  doxygen 1.6.1