68 lines
1.1 KiB
C
68 lines
1.1 KiB
C
|
#ifndef NULLSOFT_REMAININGH
|
||
|
#define NULLSOFT_REMAININGH
|
||
|
#include <assert.h>
|
||
|
#include <memory.h>
|
||
|
/* this class is used to store leftover samples */
|
||
|
|
||
|
class Remaining
|
||
|
{
|
||
|
public:
|
||
|
Remaining()
|
||
|
: store(0), size(0), used(0)
|
||
|
{}
|
||
|
|
||
|
void Allocate(unsigned long _size)
|
||
|
{
|
||
|
assert(_size);
|
||
|
used=0;
|
||
|
size=_size;
|
||
|
if (store)
|
||
|
delete [] store;
|
||
|
store = new unsigned char [size];
|
||
|
}
|
||
|
|
||
|
/* Saves the incoming data and updates the pointer positions */
|
||
|
template <class storage_t>
|
||
|
void UpdatingWrite(storage_t *&data, unsigned long &bytes)
|
||
|
{
|
||
|
unsigned long bytesToWrite = min(bytes, SizeRemaining());
|
||
|
Write(data, bytesToWrite);
|
||
|
assert(bytesToWrite);
|
||
|
data = (storage_t *)((char *)data + bytesToWrite);
|
||
|
bytes -= bytesToWrite;
|
||
|
}
|
||
|
|
||
|
void Write(void *data, unsigned long bytes)
|
||
|
{
|
||
|
unsigned char *copy = (unsigned char *)store;
|
||
|
copy+=used;
|
||
|
memcpy(copy, data, bytes);
|
||
|
used+=bytes;
|
||
|
}
|
||
|
|
||
|
unsigned long SizeRemaining()
|
||
|
{
|
||
|
return size-used;
|
||
|
}
|
||
|
|
||
|
bool Empty()
|
||
|
{
|
||
|
return !used;
|
||
|
}
|
||
|
bool Full()
|
||
|
{
|
||
|
return size == used;
|
||
|
}
|
||
|
void *GetData()
|
||
|
{
|
||
|
return (void *)store;
|
||
|
}
|
||
|
|
||
|
void Flush()
|
||
|
{
|
||
|
used=0;
|
||
|
}
|
||
|
unsigned char *store;
|
||
|
long size, used;
|
||
|
};
|
||
|
#endif
|