<pre name="code" class="cpp">#ifndef _CLIB__H
#define _CLIB__H
struct Cs
{
public:
void init(int sz);
int add(const void *p);
void *fin(int n);
void insert(int n);
int conut();
void clocr();
private:
int size;
int next;
int whensize;
unsigned char*st;
};
#endif
#include "Clib..h"
#include <cstdlib>
#include <cassert>
const int inert = 100;
void Cs::init(int sz)
{
size = sz;
next = 0;
st = 0;
whensize = 0;
}
int Cs::add(const void *p)
{
if (next >= whensize)
{
insert(inert);
}
int len = next*size;
unsigned char *e = (unsigned char*)p;
for (int i = 0; i < size; i++)
{
st[len + i] = e[i];
}
next++;
return next - 1;
}
void Cs::insert(int n)
{
assert(n > 0);
int newnext = whensize + n;
int olsiz = whensize*size;
int newwhen = newnext*size;
unsigned char *p = (unsigned char *)calloc(newwhen*sizeof(unsigned char), sizeof(unsigned char));
for (int i = 0; i < olsiz; i++)
{
p[i] = st[i];
}
free(st);
st = p;
whensize = newwhen;
}
void *Cs::fin(int n)
{
assert(n >= 0);
if (n&&n >= next)return 0;
return &st[n*size];
}
int Cs::conut()
{
return next;
}
void Cs::clocr()
{
if (st == 0)
return;
else
{
free(st);
st = 0;
}
}