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; //< internal buffer pointer 00036 size_t size; //< internal buffer pointer size 00037 public: 00038 static const DataMessage UNSPECIFIED; //< default implementation of a data message 00039 00043 inline DataMessage() { 00044 this->data = NULL; 00045 this->size = 0; 00046 } 00047 00053 inline DataMessage( const void* data, const size_t size ) { 00054 this->data = const_cast<void*>(data); 00055 this->size = size; 00056 } 00057 00062 inline DataMessage(const DataMessage& message){ 00063 this->data = message.data; 00064 this->size = message.size; 00065 } 00066 00067 #ifdef USE_MESSAGE_UTILITY 00068 00072 inline DataMessage( const Message* message ) { 00073 this->data = (void*)const_cast<Message*>(message); 00074 this->size = ~0; 00075 } 00076 00081 inline DataMessage( const Message& message ) { 00082 this->data = (void*)const_cast<Message*>(&message); 00083 this->size = ~0; 00084 } 00085 00090 inline Message* getMessage() const { 00091 if (isData()) { 00092 return new Message( Data((uint8_t*)data,size*8) ); 00093 } 00094 return (Message*)data; 00095 } 00096 00101 inline operator Message* () const { 00102 return getMessage(); 00103 } 00104 #endif 00105 00110 inline bool isMessage() const { 00111 return size == ~(size_t)0; 00112 } 00113 00118 inline bool isData() const { 00119 return !isMessage(); 00120 } 00121 00126 inline void* getData() const { 00127 return data; 00128 } 00129 00134 inline size_t getSize() const { 00135 return size; 00136 } 00137 00142 inline bool isUnspecified() const { 00143 return data == NULL; 00144 } 00145 00146 }; 00147 00148 } // namespace ariba 00149 00150 #endif /* DATAMESSAGE_H_ */