00001 #ifndef DATAMESSAGE_H_ 00002 #define DATAMESSAGE_H_ 00003 00004 #define USE_MESSAGE_UTILITY 00005 00006 #include <memory> 00007 #include <inttypes.h> 00008 00009 // use message utility 00010 #ifdef USE_MESSAGE_UTILITY 00011 #include "ariba/utility/messages.h" 00012 namespace ariba { 00013 typedef utility::Message Message; 00014 } 00015 #endif 00016 00017 namespace ariba { 00018 00019 // define sequence number type 00020 typedef uint16_t seqnum_t; 00021 00033 class DataMessage { 00034 private: 00035 void* data; 00036 size_t size; 00037 public: 00038 static const DataMessage UNSPECIFIED; 00039 00040 inline DataMessage() { 00041 this->data = NULL; 00042 this->size = 0; 00043 } 00044 00045 inline DataMessage( const void* data, const size_t size ) { 00046 this->data = const_cast<void*>(data); 00047 this->size = size; 00048 } 00049 00050 #ifdef USE_MESSAGE_UTILITY 00051 inline DataMessage( const Message* message ) { 00052 this->data = (void*)const_cast<Message*>(message); 00053 this->size = ~0; 00054 } 00055 00056 inline DataMessage( const Message& message ) { 00057 this->data = (void*)const_cast<Message*>(&message); 00058 this->size = ~0; 00059 } 00060 00061 inline Message* getMessage() const { 00062 return (Message*)data; 00063 } 00064 00065 inline operator Message* () const { 00066 return (Message*)data; 00067 } 00068 #endif 00069 00070 inline bool isMessage() const { 00071 return size >= 0; 00072 } 00073 00074 inline bool isData() const { 00075 return size == ~0; 00076 } 00077 00078 inline void* getData() const { 00079 return data; 00080 } 00081 00082 inline size_t getSize() const { 00083 return size; 00084 } 00085 00086 inline bool isUnspecified() const { 00087 return data == NULL; 00088 } 00089 }; 00090 00091 } // namespace ariba 00092 00093 #endif /* DATAMESSAGE_H_ */