DataElement.cpp
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 }


robot_instance
Author(s):
autogenerated on Sat Jun 8 2019 20:43:12