00001 #ifndef __si_sha_autopkt_h__00911341_b086_4066_8b09_3d6bf85f104f
00002 #define __si_sha_autopkt_h__00911341_b086_4066_8b09_3d6bf85f104f
00003
00013 #include <si_sys/defs.h>
00014 #include <si_std/ptrh.h>
00015 #include <si_std/listt.h>
00016
00017 #include <pthread.h>
00018
00026 typedef struct sc_automationPacket {
00027 sc_rep _rep;
00028 struct {
00029 s_uint8* buffer_;
00030 s_uint8* top_;
00031 s_int32 capacity_;
00032 s_int32 size_;
00033 s_bool own_;
00034 } priv_;
00035 } sc_automationPacket;
00036
00037 sc_status sc_automationPacket_construct(sc_automationPacket* ppkt,
00038 s_int32 capacity,
00039 s_uint8* pbuffer);
00056 sc_status sc_automationPacket_serializeToFd(sc_automationPacket* pkt, int fd);
00064 sc_status sc_automationPacket_deserializeFromFd(sc_automationPacket* pkt, int fd);
00073 sc_status sc_automationPacket_tell(sc_automationPacket* pkt, s_uint32* ppos);
00082 sc_status sc_automationPacket_setPos(sc_automationPacket* pkt, s_uint32 pos);
00094 sc_status sc_automationPacket_clear(sc_automationPacket* pkt);
00106
00107 sc_status sc_automationPacket_pushUInt8(sc_automationPacket* pkt, s_uint8 val);
00108 sc_status sc_automationPacket_popUInt8(sc_automationPacket* pkt, s_uint8* val);
00109 sc_status sc_automationPacket_pushInt8(sc_automationPacket* pkt, s_int8 val);
00110 sc_status sc_automationPacket_popInt8(sc_automationPacket* pkt, s_int8* val);
00111
00112 sc_status sc_automationPacket_pushUInt16(sc_automationPacket* pkt, s_uint16 v);
00113 sc_status sc_automationPacket_popUInt16(sc_automationPacket* pkt, s_uint16* v);
00114 sc_status sc_automationPacket_pushInt16(sc_automationPacket* pkt, s_int16 v);
00115 sc_status sc_automationPacket_popInt16(sc_automationPacket* pkt, s_int16* v);
00116
00117 sc_status sc_automationPacket_pushUInt32(sc_automationPacket* pkt, s_uint32 v);
00118 sc_status sc_automationPacket_popUInt32(sc_automationPacket* pkt, s_uint32* v);
00119 sc_status sc_automationPacket_pushInt32(sc_automationPacket* pkt, s_int32 v);
00120 sc_status sc_automationPacket_popInt32(sc_automationPacket* pkt, s_int32* v);
00121
00122 sc_status sc_automationPacket_pushUInt64(sc_automationPacket* pkt, s_uint64 v);
00123 sc_status sc_automationPacket_popUInt64(sc_automationPacket* pkt, s_uint64* v);
00124 sc_status sc_automationPacket_pushInt64(sc_automationPacket* pkt, s_int64 v);
00125 sc_status sc_automationPacket_popInt64(sc_automationPacket* pkt, s_int64* v);
00126
00127
00128 sc_status sc_automationPacket_pushBinary(sc_automationPacket* ppkt,
00129 const s_uint8* pdata,
00130 s_int32 nbytes);
00131 sc_status sc_automationPacket_popBinary(sc_automationPacket* ppkt,
00132 s_uint8* pdata,
00133 s_int32 nbytes);
00138 sm_ptrhDecl(sc_automationPacket);\
00139
00143 sm_listDecl(sc_automationPacketPtrh);
00144
00148 typedef struct sc_automationPacketPool {
00149 pthread_mutex_t mux_;
00150 sc_automationPacketPtrhList pool_;
00151 s_int32 packetSize_;
00152 s_int32 currCapacity_;
00153 s_int32 maxCapacity_;
00155 sc_blockAllocator al_;
00158 } sc_automationPacketPool;
00159
00160 sc_status sc_automationPacketPool_construct(sc_automationPacketPool* ppool,
00161 s_int32 pktSize,
00162 s_int32 initialCapacity,
00163 s_int32 maxCapacity);
00182 sc_status sc_automationPacketPool_destruct(sc_automationPacketPool* ppool);
00189 sc_status sc_automationPacketPool_allocate(sc_automationPacketPool* ppool,
00190 sc_automationPacketPtrh* pptrh);
00198 sc_status sc_automationPacketPool_free(sc_automationPacketPool* ppool,
00199 sc_automationPacketPtrh* pptrh);
00206 #endif