SSM
|
00001 #ifndef __SSMP_HPP__ 00002 #define __SSMP_HPP__ 00003 #include "ssm.hpp" 00004 #include <cstdlib> 00005 00006 #define SSMApiP SSMPApi 00007 00010 template <typename T, typename P = SSMDummy> 00011 class SSMPApi : public SSMApiBase 00012 { 00013 void setBuffer(void *data, size_t dataSize, void *property, size_t propertySize ); 00014 00015 void initApi() 00016 { 00017 data = NULL; 00018 writeData = NULL; 00019 readData = NULL; 00020 userData = NULL; 00021 00022 SSMApiBase::setBuffer( NULL, 0, &property, sizeof( P ) ); 00023 00024 } 00025 public: 00026 T *data; // @brief SSM Data. 00027 P property; // @brief Property of SSM Data. 00028 void ( *writeData )( void *ssmp, const void *data, void *userData ); 00029 void ( *readData )( const void *ssmp, void *data, void *userData ); 00030 void *userData; 00031 00032 00033 SSMPApi(){ initApi(); } 00034 SSMPApi(const char *streamName, int streamId = 0): SSMApiBase( streamName, streamId ) { initApi(); } 00035 ~SSMPApi(){ free(data); } 00036 00037 // @brief data格納用メモリの確保 00038 // @param dataSize[in] データのサイズ 00039 // @retrun メモリ確保に成功したらtrueを返す 00040 bool alloc( size_t dataSize ) 00041 { 00042 bool ret = true; 00043 data = (T*)malloc( dataSize ); 00044 00045 if( data ) 00046 SSMApiBase::setBuffer( data, dataSize, &property, sizeof( P ) ); 00047 else 00048 ret = false; 00049 00050 return ret; 00051 } 00052 00053 00054 // @brief timeを指定して書き込み 00055 // @param time[in] 時間。指定しないときは現在時刻を書き込み 00056 // @return 正しく書き込めたときtrueを返す 00057 bool write( ssmTimeT time = gettimeSSM() ) 00058 { 00059 int tid; 00060 if( writeData ) 00061 tid = writeSSMP( ssmId, data, time, writeData, userData ); 00062 else 00063 tid = writeSSM( ssmId, data, time ); 00064 if(tid >= 0){timeId = tid; this->time = time; return true;} 00065 return false; 00066 } 00067 00068 // @brief tidを指定して読み込み 00069 // @return 正しく読み込めたときtrueを返す 00070 bool read(int timeId = -1) 00071 { 00072 int tid; 00073 if( readData ) 00074 tid = readSSMP(ssmId, data, &time, timeId, readData, userData ); 00075 else 00076 tid = readSSM(ssmId, data, &time, timeId); 00077 if(tid >= 0){this->timeId = tid; return true;} 00078 return false; 00079 } 00080 }; 00081 00082 #endif //__SSMP_HPP__ 00083 00084