SSM

include/ssmp.hpp

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 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines