diff options
Diffstat (limited to 'arduino_libs_0022/ByteBuffer/.svn/text-base')
| -rwxr-xr-x | arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.cpp.svn-base | 205 | ||||
| -rwxr-xr-x | arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.h.svn-base | 57 |
2 files changed, 262 insertions, 0 deletions
diff --git a/arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.cpp.svn-base b/arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.cpp.svn-base new file mode 100755 index 0000000..b91a586 --- /dev/null +++ b/arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.cpp.svn-base @@ -0,0 +1,205 @@ +/* + ByteBuffer.cpp - A circular buffer implementation for Arduino + Created by Sigurdur Orn, July 19, 2010. + */ + +#include "WProgram.h" +#include "ByteBuffer.h" + + +ByteBuffer::ByteBuffer(){ + +} + +void ByteBuffer::init(unsigned int buf_length){ + data = (byte*)malloc(sizeof(byte)*buf_length); + float_bytes = (byte*)malloc(sizeof(byte)*8); + capacity = buf_length; + position = 0; + length = 0; +} + +void ByteBuffer::clear(){ + position = 0; + length = 0; +} + +int ByteBuffer::getSize(){ + return length; +} + +int ByteBuffer::getCapacity(){ + return capacity; +} + +byte ByteBuffer::peek(unsigned int index){ + byte b = data[(position+index)%capacity]; + return b; +} + +int ByteBuffer::put(byte in){ + if(length < capacity){ + // save data byte at end of buffer + data[(position+length) % capacity] = in; + // increment the length + length++; + return 1; + } + // return failure + return 0; +} + +int ByteBuffer::putInFront(byte in){ + if(length < capacity){ + // save data byte at end of buffer + if( position == 0 ) + position = capacity-1; + else + position = (position-1)%capacity; + data[position] = in; + // increment the length + length++; + return 1; + } + // return failure + return 0; +} + +byte ByteBuffer::get(){ + byte b = 0; + if(length > 0){ + b = data[position]; + // move index down and decrement length + position = (position+1)%capacity; + length--; + } + + return b; +} + +byte ByteBuffer::getFromBack(){ + byte b = 0; + if(length > 0){ + b = data[(position+length-1)%capacity]; + length--; + } + + return b; +} + +// +// Ints +// + +int ByteBuffer::putIntInFront(int in){ + byte *pointer = (byte *)∈ + putInFront(pointer[0]); + putInFront(pointer[1]); +} + +int ByteBuffer::putInt(int in){ + byte *pointer = (byte *)∈ + put(pointer[1]); + put(pointer[0]); +} + + +int ByteBuffer::getInt(){ + int ret; + byte *pointer = (byte *)&ret; + pointer[1] = get(); + pointer[0] = get(); + return ret; +} + +int ByteBuffer::getIntFromBack(){ + int ret; + byte *pointer = (byte *)&ret; + pointer[0] = getFromBack(); + pointer[1] = getFromBack(); + return ret; +} + +// +// Longs +// + +int ByteBuffer::putLongInFront(long in){ + byte *pointer = (byte *)∈ + putInFront(pointer[0]); + putInFront(pointer[1]); + putInFront(pointer[2]); + putInFront(pointer[3]); +} + +int ByteBuffer::putLong(long in){ + byte *pointer = (byte *)∈ + put(pointer[3]); + put(pointer[2]); + put(pointer[1]); + put(pointer[0]); +} + + +long ByteBuffer::getLong(){ + long ret; + byte *pointer = (byte *)&ret; + pointer[3] = get(); + pointer[2] = get(); + pointer[1] = get(); + pointer[0] = get(); + return ret; +} + +long ByteBuffer::getLongFromBack(){ + long ret; + byte *pointer = (byte *)&ret; + pointer[0] = getFromBack(); + pointer[1] = getFromBack(); + pointer[2] = getFromBack(); + pointer[3] = getFromBack(); + return ret; +} + + +// +// Floats +// + +int ByteBuffer::putFloatInFront(float in){ + byte *pointer = (byte *)∈ + putInFront(pointer[0]); + putInFront(pointer[1]); + putInFront(pointer[2]); + putInFront(pointer[3]); +} + +int ByteBuffer::putFloat(float in){ + byte *pointer = (byte *)∈ + put(pointer[3]); + put(pointer[2]); + put(pointer[1]); + put(pointer[0]); +} + +float ByteBuffer::getFloat(){ + float ret; + byte *pointer = (byte *)&ret; + pointer[3] = get(); + pointer[2] = get(); + pointer[1] = get(); + pointer[0] = get(); + return ret; +} + +float ByteBuffer::getFloatFromBack(){ + float ret; + byte *pointer = (byte *)&ret; + pointer[0] = getFromBack(); + pointer[1] = getFromBack(); + pointer[2] = getFromBack(); + pointer[3] = getFromBack(); + return ret; +} + + diff --git a/arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.h.svn-base b/arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.h.svn-base new file mode 100755 index 0000000..b100c2f --- /dev/null +++ b/arduino_libs_0022/ByteBuffer/.svn/text-base/ByteBuffer.h.svn-base @@ -0,0 +1,57 @@ +/* + ByteBuffer.h - A circular buffer implementation for Arduino + Created by Sigurdur Orn, July 19, 2010. + */ +#ifndef ByteBuffer_h +#define ByteBuffer_h + +#include "WProgram.h" + +class ByteBuffer +{ +public: + ByteBuffer(); + + void init(unsigned int buf_size); + + void clear(); + int getSize(); + int getCapacity(); + + int putInFront(byte in); + int put(byte in); + + byte get(); + byte getFromBack(); + + byte peek(unsigned int index); + + int putIntInFront(int in); + int putInt(int in); + + int putLongInFront(long in); + int putLong(long in); + + int getInt(); + int getIntFromBack(); + + long getLong(); + long getLongFromBack(); + + int putFloatInFront(float in); + int putFloat(float in); + + float getFloat(); + float getFloatFromBack(); + +private: + byte* data; + byte* float_bytes; + + unsigned int capacity; + unsigned int position; + unsigned int length; +}; + +#endif + |
