cafeDataType.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 #ifndef CAFEDATATYPE_H
00009 #define CAFEDATATYPE_H
00010  
00011 #include <cadef.h>
00012 #include <iostream>
00013 #include <string>
00014 #include <map>
00015 
00016 enum CAFE_DATATYPE  {
00017   CAFE_TYPENOTCONN  = TYPENOTCONN, // -1 val returned by ca_field_type when channel not connected
00018   CAFE_STRING       = DBF_STRING,  // 0
00019   CAFE_SHORT        = DBF_SHORT,   // 1
00020   CAFE_INT          = DBF_INT,     // 1
00021   CAFE_FLOAT        = DBF_FLOAT,   // 2
00022   CAFE_ENUM         = DBF_ENUM,    // 3
00023   CAFE_USHORT       = DBF_ENUM,    // 3
00024   CAFE_CHAR         = DBF_CHAR,    // 4
00025   CAFE_LONG         = DBF_LONG,    // 5
00026   CAFE_DOUBLE       = DBF_DOUBLE,  // 6
00027   CAFE_NO_ACCESS    = DBF_NO_ACCESS, //7
00028   CAFE_INVALID_DATATYPE =   8,
00029   CAFE_NOT_REQUESTED    = 100,
00030   CAFE_NOT_SHOWN        = 101   // (in stop monitor)
00031 };
00032 
00037 class CAFEDataTypeCode {
00038   typedef std::map<int, std::string> mapLongString;
00039 private:  
00040   mapLongString   mapDataType;
00041   mapLongString::iterator pos;
00042 public:
00043   CAFEDataTypeCode() {
00044          mapDataType.insert(std::make_pair((int) CAFE_TYPENOTCONN,       "CAFE_TYPENOTCONN" ));
00045          mapDataType.insert(std::make_pair((int) CAFE_STRING,            "DBF_STRING" ));
00046          mapDataType.insert(std::make_pair((int) CAFE_SHORT,             "DBF_SHORT"  ));
00047          mapDataType.insert(std::make_pair((int) CAFE_INT,               "DBF_SHORT"  ));
00048          mapDataType.insert(std::make_pair((int) CAFE_FLOAT,             "DBF_FLOAT"  ));
00049          mapDataType.insert(std::make_pair((int) CAFE_ENUM,              "DBF_ENUM"   ));
00050          mapDataType.insert(std::make_pair((int) CAFE_CHAR,              "DBF_CHAR"   ));
00051          mapDataType.insert(std::make_pair((int) CAFE_LONG,              "DBF_LONG"   ));
00052          mapDataType.insert(std::make_pair((int) CAFE_DOUBLE,            "DBF_DOUBLE" ));
00053          mapDataType.insert(std::make_pair((int) CAFE_NO_ACCESS,         "DBF_NO_ACCESS"   ));
00054          mapDataType.insert(std::make_pair((int) CAFE_INVALID_DATATYPE,  "CAFE_INVALID_DATATYPE"));
00055          mapDataType.insert(std::make_pair((int) CAFE_NOT_REQUESTED,     "CAFE_NOT_REQUESTED"));
00056          mapDataType.insert(std::make_pair((int) CAFE_NOT_SHOWN,         "CAFE_NOT_SHOWN (IN STOP MONITOR)"));
00057   };
00058 
00059   ~CAFEDataTypeCode() {};
00060   
00061   std::string message (int i) {
00062     
00063     pos = mapDataType.find(i);    
00064     if (pos != mapDataType.end()) return    pos->second;  
00065     return  "CAFE_DATATYPE_UNKNOWN";
00066   };
00067   
00068   int enumIs (std::string message) {
00069     for (pos=mapDataType.begin(); pos != mapDataType.end(); ++pos)       
00070       if (pos->second==message) return pos->first;      
00071     return  -1;
00072   };
00073 
00074   void show() {print();}
00075 
00076   void print ( ) {
00077     std::cout << "------------------"   << std::endl;
00078     std::cout << "CAFE_DATATYPE LIST" << std::endl;
00079     std::cout << "-----------------"   << std::endl;
00080     for (pos=mapDataType.begin(); pos != mapDataType.end(); ++pos) {
00081         std::cout << pos->first << " " << pos->second << std::endl;
00082     }
00083     std::cout << "-----------------" << std::endl;
00084   };
00085     
00086 };
00087 
00091 union CAFE_DATATYPE_UNION {
00092   dbr_string_t   str; 
00093   dbr_short_t  s;
00094   dbr_float_t  f;
00095   dbr_enum_t  us;  //unsigned short us;
00096   dbr_char_t  ch;  //unsigned char  ch;
00097   dbr_long_t   l;  //int l;
00098   dbr_double_t d;
00099 };
00100 
00101 typedef CAFE_DATATYPE_UNION * CAFE_DATATYPE_UNION_SEQ;
00102 
00103 
00104 
00105 #endif

Generated on 3 May 2017 for CAFE by  doxygen 1.6.1