ParserElements.cpp
Go to the documentation of this file.00001
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
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 }
00283