jedioutcast/code/encryption/buffer.cpp
2013-04-04 09:52:42 -05:00

99 lines
1.5 KiB
C++

#include "encryption.h"
#ifdef _ENCRYPTION_
#pragma warning (disable : 4514) //unref inline removed
#pragma warning (disable : 4711) //func selected for auto inline
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "buffer.h"
const int BufferIncrease = 1024;
cBuffer::cBuffer(int InitIncrease)
:Buffer(NULL),
Size(0),
Pos(0),
ActualSize(0),
FreeNextAdd(false)
{
Increase = InitIncrease;
}
char *cBuffer::Add(char *Data, int Amount)
{
if (FreeNextAdd)
{
Free();
FreeNextAdd = false;
}
if (Pos + Amount >= ActualSize)
{
ActualSize += Amount;
ActualSize -= ActualSize % Increase;
ActualSize += Increase;
Buffer = (char *)realloc(Buffer, ActualSize);
}
if (Data)
{
memcpy(Buffer+Pos, Data, Amount);
}
Pos += Amount;
Size += Amount;
return Buffer + Pos - Amount;
}
void cBuffer::Read(void)
{
ResetPos();
}
char *cBuffer::Read(int Amount)
{
Pos += Amount;
if (Pos < Size)
{
return Buffer + Pos - Amount;
}
return NULL;
}
size_t cBuffer::strcspn(const char *notin)
{
const char *s1, *s2;
for (s1 = Buffer+Pos; *s1; s1++)
{
for(s2 = notin; *s2 != *s1 && *s2; s2++)
{
}
if (*s2)
{
break;
}
}
return s1 - Buffer + Pos;
}
void cBuffer::Free(void)
{
if (Buffer)
{
free(Buffer);
Buffer = NULL;
Size= 0;
Pos = 0;
ActualSize = 0;
}
}
#endif