📄 memstream.c
字号:
#include "stream.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ALLOC_PIECE 1024
struct CMemStream //:pulbic IMemStream
{
struct IMemStream vt;
int pos;
int alloc;
};
static int CMemStream_Write(struct IMemStream *p, void * data, int cbData)
{
int n;
struct CMemStream * self = (struct CMemStream*) p;
if (self->alloc - self->vt.length < cbData)
{
n = (cbData/ALLOC_PIECE + 1)*ALLOC_PIECE;
self->alloc += n;
p->data = (char*) realloc(p->data , self->alloc);
}
memcpy(p->data + p->length, data, cbData);
p->length += cbData;
return cbData;
}
int CMemStream_Read(struct IMemStream *p, void * data, int cbData)
{
struct CMemStream * self = (struct CMemStream*) p;
int nRet = p->length - self->pos;
if (nRet > cbData)
nRet = cbData;
if (nRet)
{
memcpy(data, p->data + self->pos, nRet);
self->pos += nRet;
}
return nRet;
}
void CMemStream_Release(struct IMemStream* self)
{
free(self->data);
free(self);
}
struct IMemStream * CreateMemStream()
{
struct CMemStream * mem = (struct CMemStream*) malloc (sizeof(struct CMemStream));
mem->alloc = mem->vt.length = mem->pos = 0;
mem->vt.data = NULL;
mem->vt.Write = CMemStream_Write;
mem->vt.Read = CMemStream_Read;
mem->vt.Release = CMemStream_Release;
return (struct IMemStream *)mem;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -