Go to the documentation of this file.00001
00006 #include "robot_instance/DataElement.h"
00007
00008 using namespace std;
00009 using namespace log4cpp;
00010
00015 DataElement::DataElement()
00016 {
00017 setValue<uint32_t>(0);
00018 setReadWrite(Read);
00019 }
00020
00029 DataElement::DataElement(const std::string& type, ReadWrite rw, std::shared_ptr<SMT::Resource> resource)
00030 : smtResource(resource)
00031 {
00032 setReadWrite(rw);
00033
00034 if (type.compare("bool") == 0)
00035 {
00036 setValue<bool>(false);
00037 }
00038 else if (type.compare("int16_t") == 0)
00039 {
00040 setValue<int16_t>(0);
00041 }
00042 else if (type.compare("int32_t") == 0)
00043 {
00044 setValue<int32_t>(0);
00045 }
00046 else if (type.compare("uint16_t") == 0)
00047 {
00048 setValue<uint16_t>(0);
00049 }
00050 else if (type.compare("uint32_t") == 0)
00051 {
00052 setValue<uint32_t>(0);
00053 }
00054 else if (type.compare("float") == 0)
00055 {
00056 setValue<float>(0);
00057 }
00058 else
00059 {
00060 stringstream err;
00061 err << "DataElement::DataElement() - 'type' must be one of the following: bool, int16_t, int32_t, uint16_t, uint32_t, float.";
00062 NasaCommonLogging::Logger::log("gov.nasa.robonet.DataElement", Priority::ERROR, err.str());
00063 throw invalid_argument(err.str());
00064 }
00065 }
00066
00070 DataElement::~DataElement()
00071 {
00072 }
00073
00078 DataElement::ReadWrite DataElement::getReadWrite()
00079 {
00080 return readWrite;
00081 }
00082
00087 void DataElement::setReadWrite(ReadWrite rw)
00088 {
00089 readWrite = rw;
00090 }
00091
00096 const std::type_info* DataElement::getType()
00097 {
00098 return &(value.type());
00099 }
00100
00106 DataElement::ElementSize DataElement::getSize()
00107 {
00108 ElementSize elementSize;
00109
00110 if ((*(getType()) == typeid(uint32_t)) || (*(getType()) == typeid(int32_t)) || (*(getType()) == typeid(float)))
00111 {
00112 elementSize = ThirtyTwoBit;
00113 }
00114 else if ((*(getType()) == typeid(uint16_t)) || (*(getType()) == typeid(int16_t)))
00115 {
00116 elementSize = SixteenBit;
00117 }
00118 else if (*(getType()) == typeid(bool))
00119 {
00120 elementSize = EightBit;
00121 }
00122 else
00123 {
00124 stringstream err;
00125 err << "DataElement::getSize() - Unsupported type stored in DataElement.";
00126 NasaCommonLogging::Logger::log("gov.nasa.robonet.DataElement", Priority::ERROR, err.str());
00127 throw runtime_error(err.str());
00128 }
00129
00130 return elementSize;
00131 }
00132
00137 std::string DataElement::toString()
00138 {
00139 string s;
00140
00141 s.append("DataElement:\n");
00142 s.append(" Value: ");
00143 s.append(boost::lexical_cast<std::string>(value));
00144 s.append("\n");
00145 s.append(" Type: ");
00146 s.append(value.type().name());
00147 s.append("\n");
00148 s.append(" Size: ");
00149
00150 switch (getSize())
00151 {
00152 case EightBit:
00153 s.append("8");
00154 break;
00155
00156 case SixteenBit:
00157 s.append("16");
00158 break;
00159
00160 case ThirtyTwoBit:
00161 s.append("32");
00162 break;
00163
00164 default:
00165 break;
00166 }
00167
00168 s.append("\n");
00169 s.append(" Read/Write: ");
00170
00171 if (readWrite == Read)
00172 {
00173 s.append("Read");
00174 }
00175 else
00176 {
00177 s.append("Write");
00178 }
00179
00180 return s;
00181 }