Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
71
Src/nu/bitbuffer.cpp
Normal file
71
Src/nu/bitbuffer.cpp
Normal file
|
@ -0,0 +1,71 @@
|
|||
#include "bitbuffer.h"
|
||||
#include <memory.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
BitBuffer::BitBuffer()
|
||||
{
|
||||
buffer=0;
|
||||
length=0;
|
||||
bits=0;
|
||||
}
|
||||
|
||||
void BitBuffer::WriteBit(char bit)
|
||||
{
|
||||
if (bits == 0)
|
||||
Resize(length+1);
|
||||
|
||||
bit = !!bit;
|
||||
unsigned char mask = 1 << (7-bits);
|
||||
buffer[length-1] &= ~mask;
|
||||
buffer[length-1] |= (bit << (7-bits));
|
||||
bits=(bits+1)%8;
|
||||
}
|
||||
|
||||
void BitBuffer::Resize(size_t newlen)
|
||||
{
|
||||
if (newlen > length)
|
||||
{
|
||||
unsigned char *new_buffer = (unsigned char *)realloc(buffer, newlen);
|
||||
if (new_buffer)
|
||||
{
|
||||
buffer = new_buffer;
|
||||
memset(buffer+length, 0, newlen-length); // zero out new data
|
||||
length=newlen;
|
||||
}
|
||||
else
|
||||
{
|
||||
new_buffer = (unsigned char *)malloc(newlen);
|
||||
if (new_buffer)
|
||||
{
|
||||
memcpy(new_buffer, buffer, length);
|
||||
free(buffer);
|
||||
buffer = new_buffer;
|
||||
memset(buffer+length, 0, newlen-length); // zero out new data
|
||||
length=newlen;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void BitBuffer::WriteBits(uintptr_t num, size_t bitlen)
|
||||
{
|
||||
for (size_t i=0;i!=bitlen;i++)
|
||||
{
|
||||
WriteBit((num >> (bitlen-i-1))&1);
|
||||
}
|
||||
}
|
||||
|
||||
void BitBuffer::WriteBytes(void *buffer, size_t bytes)
|
||||
{
|
||||
unsigned char *b = (unsigned char *)buffer;
|
||||
for (size_t i=0;i!=bytes;i++)
|
||||
WriteBits(b[i], 8);
|
||||
}
|
||||
|
||||
void BitBuffer::WriteByte(unsigned char byte)
|
||||
{
|
||||
for (size_t i=0;i!=8;i++)
|
||||
{
|
||||
WriteBit((byte >> (7-i))&1);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue