00001
00013 #ifndef DKUTIL_C_MEMORYSTREAM_H
00014 #define DKUTIL_C_MEMORYSTREAM_H
00015
00016 #include <stdio.h>
00017 #include "dkcOSIndependent.h"
00018
00019 #include "dkcDefined.h"
00020 #include "dkcBuffer.h"
00021 #include "dkcSerialize.h"
00026 typedef struct dkc_MemoryStream{
00028 BYTE *mBuffer;
00030 size_t mSize;
00032 size_t mNowOffset;
00033
00034 }DKC_MEMORYSTREAM;
00035
00036
00037
00038
00039
00040 enum edkcMemoryStream{
00042 edkcMemoryStreamSeekCurrent = SEEK_CUR,
00044 edkcMemoryStreamSeekEnd = SEEK_END,
00046 edkcMemoryStreamSeekSet = SEEK_SET,
00047 };
00048
00049
00050
00060
00061 DKC_EXTERN DKC_MEMORYSTREAM * WINAPI dkcAllocMemoryStream(size_t size);
00062
00063
00067
00068 DKC_EXTERN int WINAPI dkcFreeMemoryStream(DKC_MEMORYSTREAM **ptr);
00069
00070
00072 DKC_EXTERN int WINAPI dkcMemoryStreamSeek(DKC_MEMORYSTREAM *ptr,int offset,int origin);
00073
00075 DKC_EXTERN size_t WINAPI dkcMemoryStreamGetSeekPoint(DKC_MEMORYSTREAM *ptr);
00076
00077 #define dkcMemoryStreamTell(tt) dkcMemoryStreamGetSeekPoint(tt)
00078
00085
00086 DKC_EXTERN int WINAPI dkcMemoryStreamRead(DKC_MEMORYSTREAM *ptr,void *buffer,size_t size,size_t *readsize);
00093
00094 DKC_EXTERN int WINAPI dkcMemoryStreamWrite(DKC_MEMORYSTREAM *ptr,const void *buffer,size_t size);
00095
00097 DKC_EXTERN int WINAPI dkcMemoryStreamDynamicWrite(DKC_MEMORYSTREAM *ptr,const void *buffer,size_t size);
00098
00100 DKC_EXTERN int WINAPI dkcMemoryStreamResize(DKC_MEMORYSTREAM *ptr,size_t want_size);
00102 DKC_EXTERN size_t WINAPI dkcMemoryStreamNowOffset(DKC_MEMORYSTREAM *p);
00104 DKC_EXTERN BYTE *WINAPI dkcMemoryStreamPointer(DKC_MEMORYSTREAM *p);
00105
00107 DKC_EXTERN DKC_MEMORYSTREAM * WINAPI dkcAllocMemoryStreamDeserialize(DKC_DESERIALIZE *se);
00108
00109
00111 DKC_EXTERN void dkcMemoryStreamSerialize(const DKC_MEMORYSTREAM *ptr,DKC_SERIALIZE *se);
00112
00113
00115 DKC_EXTERN int WINAPI dkcMemoryStreamClear(DKC_MEMORYSTREAM *ptr);
00116
00117
00124 DKC_EXTERN DKC_MEMORYSTREAM * WINAPI dkcAllocMemoryStreamCopy(const DKC_MEMORYSTREAM *ptr);
00125
00126
00127
00128
00129
00130 typedef struct dkc_MemoryStreamAdapter{
00131 BYTE *mBuff;
00132 size_t mSize;
00133 size_t mNowOffset;
00134 }DKC_MEMORYSTREAM_ADAPTER;
00135
00136 DKC_EXTERN void WINAPI dkcMemoryStreamAdapterInit(DKC_MEMORYSTREAM_ADAPTER *p,BYTE *buff,size_t size);
00137
00138 DKC_EXTERN int WINAPI dkcMemoryStreamAdapterPushBack(DKC_MEMORYSTREAM_ADAPTER *p,const BYTE *buff,size_t size);
00139
00141 #define dkcMemoryStreamAdapterPushBackMacro(type,p,x) {\
00142 *((type *)&( (p)->mBuff[(p)->mNowOffset])) = (type)x;(p)->mNowOffset += sizeof(type);\
00143 }
00144 #define dkcMemoryStreamAdapterIsEnd(p) ( (p)->mNowOffset >= (p)->mSize )
00145
00146 DKC_EXTERN int WINAPI dkcMemoryStreamAdapterPopBack(DKC_MEMORYSTREAM_ADAPTER *p,size_t size);
00147
00148 DKC_EXTERN BYTE *WINAPI dkcMemoryStreamAdapterPointer(DKC_MEMORYSTREAM_ADAPTER *p);
00149
00150 DKC_EXTERN size_t WINAPI dkcMemoryStreamAdapterSize(DKC_MEMORYSTREAM_ADAPTER *p);
00151
00152 DKC_EXTERN int WINAPI dkcMemoryStreamAdapterSetOffset(DKC_MEMORYSTREAM_ADAPTER *ptr,size_t offset);
00153
00154 DKC_EXTERN size_t WINAPI dkcMemoryStreamAdapterGetOffset(DKC_MEMORYSTREAM_ADAPTER *p);
00155
00156
00157
00158
00159 #endif