XBee and XBee-PRO ZigBee RF modules provide cost-effective wireless connectivity to electronic devices. They are interoperable with other ZigBee PRO feature set devices, including devices from other vendors.
Diff: Core/BufferedArray.cpp
- Revision:
- 0:837e6c48e90d
- Child:
- 1:3dc0ec2f9fd6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Core/BufferedArray.cpp Thu Oct 22 12:28:26 2015 +0000 @@ -0,0 +1,132 @@ +#include "BufferedArray.h" + +BufferedArray::BufferedArray() +{ + max = EXPANDSIZE; + data = new char[EXPANDSIZE]; + index = 0; +} + +BufferedArray::BufferedArray(int size) +{ + max = size; + data = new char[size]; + index = 0; +} + +BufferedArray::BufferedArray(BufferedArray * bufferedArray) +{ + if (bufferedArray != NULL) { + this->data = bufferedArray->data; + this->index = bufferedArray->index; + this->max = bufferedArray->max; + } +} + +BufferedArray::~BufferedArray() +{ + if (data == NULL) + return; + + delete[] data; +} + +char * BufferedArray::gets() +{ + return data; +} + +char * BufferedArray::gets(int position) +{ + return data + position; +} + +char BufferedArray::get(int position) +{ + return *(data + position); +} + +int BufferedArray::getPosition() +{ + return index; +} + +void BufferedArray::setPosition(int position) +{ + if (this->index > max) + this->index = max; + else this->index = position; +} + +void BufferedArray::allocate(int length) +{ + if (length <= 0) + return; + + if (length > max) { + delete[] data; + data = new char[length]; + } + + rewind(); +} + +void BufferedArray::rewind() +{ + index = 0; +} + +void BufferedArray::expandSpace(int length) +{ + max += EXPANDSIZE * (1 + length / EXPANDSIZE); + char * temp = new char[max]; + memcpy(temp, data, index); + delete[] data; + data = temp; +} + +void BufferedArray::set(int position, char value) +{ + if (position < 0) + return; + + if (position >= max) + expandSpace(1); + + data[position] = value; +} + +void BufferedArray::set(char value) +{ + set(index, value); + index++; +} + +void BufferedArray::sets(const char * value, int offset, int length) +{ + if (length <= 0) + return; + + if (offset < 0) + return; + + sets(index, value, offset, length); + index += length; +} + +void BufferedArray::sets(int position, const char * value, int offset, int length) +{ + if (position < 0) + return; + + if (length <= 0) + return; + + if (offset < 0) + return; + + if (position + length - offset > max) + expandSpace(position + length - offset - max); + + memcpy(data + position, value + offset, length); +} \ No newline at end of file