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.
Core/BufferedArray.cpp@0:837e6c48e90d, 2015-10-22 (annotated)
- Committer:
- yangcq88517
- Date:
- Thu Oct 22 12:28:26 2015 +0000
- Revision:
- 0:837e6c48e90d
- Child:
- 1:3dc0ec2f9fd6
initial upload
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yangcq88517 | 0:837e6c48e90d | 1 | #include "BufferedArray.h" |
yangcq88517 | 0:837e6c48e90d | 2 | |
yangcq88517 | 0:837e6c48e90d | 3 | BufferedArray::BufferedArray() |
yangcq88517 | 0:837e6c48e90d | 4 | { |
yangcq88517 | 0:837e6c48e90d | 5 | max = EXPANDSIZE; |
yangcq88517 | 0:837e6c48e90d | 6 | data = new char[EXPANDSIZE]; |
yangcq88517 | 0:837e6c48e90d | 7 | index = 0; |
yangcq88517 | 0:837e6c48e90d | 8 | } |
yangcq88517 | 0:837e6c48e90d | 9 | |
yangcq88517 | 0:837e6c48e90d | 10 | BufferedArray::BufferedArray(int size) |
yangcq88517 | 0:837e6c48e90d | 11 | { |
yangcq88517 | 0:837e6c48e90d | 12 | max = size; |
yangcq88517 | 0:837e6c48e90d | 13 | data = new char[size]; |
yangcq88517 | 0:837e6c48e90d | 14 | index = 0; |
yangcq88517 | 0:837e6c48e90d | 15 | } |
yangcq88517 | 0:837e6c48e90d | 16 | |
yangcq88517 | 0:837e6c48e90d | 17 | BufferedArray::BufferedArray(BufferedArray * bufferedArray) |
yangcq88517 | 0:837e6c48e90d | 18 | { |
yangcq88517 | 0:837e6c48e90d | 19 | if (bufferedArray != NULL) { |
yangcq88517 | 0:837e6c48e90d | 20 | this->data = bufferedArray->data; |
yangcq88517 | 0:837e6c48e90d | 21 | this->index = bufferedArray->index; |
yangcq88517 | 0:837e6c48e90d | 22 | this->max = bufferedArray->max; |
yangcq88517 | 0:837e6c48e90d | 23 | } |
yangcq88517 | 0:837e6c48e90d | 24 | } |
yangcq88517 | 0:837e6c48e90d | 25 | |
yangcq88517 | 0:837e6c48e90d | 26 | BufferedArray::~BufferedArray() |
yangcq88517 | 0:837e6c48e90d | 27 | { |
yangcq88517 | 0:837e6c48e90d | 28 | if (data == NULL) |
yangcq88517 | 0:837e6c48e90d | 29 | return; |
yangcq88517 | 0:837e6c48e90d | 30 | |
yangcq88517 | 0:837e6c48e90d | 31 | delete[] data; |
yangcq88517 | 0:837e6c48e90d | 32 | } |
yangcq88517 | 0:837e6c48e90d | 33 | |
yangcq88517 | 0:837e6c48e90d | 34 | char * BufferedArray::gets() |
yangcq88517 | 0:837e6c48e90d | 35 | { |
yangcq88517 | 0:837e6c48e90d | 36 | return data; |
yangcq88517 | 0:837e6c48e90d | 37 | } |
yangcq88517 | 0:837e6c48e90d | 38 | |
yangcq88517 | 0:837e6c48e90d | 39 | char * BufferedArray::gets(int position) |
yangcq88517 | 0:837e6c48e90d | 40 | { |
yangcq88517 | 0:837e6c48e90d | 41 | return data + position; |
yangcq88517 | 0:837e6c48e90d | 42 | } |
yangcq88517 | 0:837e6c48e90d | 43 | |
yangcq88517 | 0:837e6c48e90d | 44 | char BufferedArray::get(int position) |
yangcq88517 | 0:837e6c48e90d | 45 | { |
yangcq88517 | 0:837e6c48e90d | 46 | return *(data + position); |
yangcq88517 | 0:837e6c48e90d | 47 | } |
yangcq88517 | 0:837e6c48e90d | 48 | |
yangcq88517 | 0:837e6c48e90d | 49 | int BufferedArray::getPosition() |
yangcq88517 | 0:837e6c48e90d | 50 | { |
yangcq88517 | 0:837e6c48e90d | 51 | return index; |
yangcq88517 | 0:837e6c48e90d | 52 | } |
yangcq88517 | 0:837e6c48e90d | 53 | |
yangcq88517 | 0:837e6c48e90d | 54 | void BufferedArray::setPosition(int position) |
yangcq88517 | 0:837e6c48e90d | 55 | { |
yangcq88517 | 0:837e6c48e90d | 56 | if (this->index > max) |
yangcq88517 | 0:837e6c48e90d | 57 | this->index = max; |
yangcq88517 | 0:837e6c48e90d | 58 | else this->index = position; |
yangcq88517 | 0:837e6c48e90d | 59 | } |
yangcq88517 | 0:837e6c48e90d | 60 | |
yangcq88517 | 0:837e6c48e90d | 61 | void BufferedArray::allocate(int length) |
yangcq88517 | 0:837e6c48e90d | 62 | { |
yangcq88517 | 0:837e6c48e90d | 63 | if (length <= 0) |
yangcq88517 | 0:837e6c48e90d | 64 | return; |
yangcq88517 | 0:837e6c48e90d | 65 | |
yangcq88517 | 0:837e6c48e90d | 66 | if (length > max) { |
yangcq88517 | 0:837e6c48e90d | 67 | delete[] data; |
yangcq88517 | 0:837e6c48e90d | 68 | data = new char[length]; |
yangcq88517 | 0:837e6c48e90d | 69 | } |
yangcq88517 | 0:837e6c48e90d | 70 | |
yangcq88517 | 0:837e6c48e90d | 71 | rewind(); |
yangcq88517 | 0:837e6c48e90d | 72 | } |
yangcq88517 | 0:837e6c48e90d | 73 | |
yangcq88517 | 0:837e6c48e90d | 74 | void BufferedArray::rewind() |
yangcq88517 | 0:837e6c48e90d | 75 | { |
yangcq88517 | 0:837e6c48e90d | 76 | index = 0; |
yangcq88517 | 0:837e6c48e90d | 77 | } |
yangcq88517 | 0:837e6c48e90d | 78 | |
yangcq88517 | 0:837e6c48e90d | 79 | void BufferedArray::expandSpace(int length) |
yangcq88517 | 0:837e6c48e90d | 80 | { |
yangcq88517 | 0:837e6c48e90d | 81 | max += EXPANDSIZE * (1 + length / EXPANDSIZE); |
yangcq88517 | 0:837e6c48e90d | 82 | char * temp = new char[max]; |
yangcq88517 | 0:837e6c48e90d | 83 | memcpy(temp, data, index); |
yangcq88517 | 0:837e6c48e90d | 84 | delete[] data; |
yangcq88517 | 0:837e6c48e90d | 85 | data = temp; |
yangcq88517 | 0:837e6c48e90d | 86 | } |
yangcq88517 | 0:837e6c48e90d | 87 | |
yangcq88517 | 0:837e6c48e90d | 88 | void BufferedArray::set(int position, char value) |
yangcq88517 | 0:837e6c48e90d | 89 | { |
yangcq88517 | 0:837e6c48e90d | 90 | if (position < 0) |
yangcq88517 | 0:837e6c48e90d | 91 | return; |
yangcq88517 | 0:837e6c48e90d | 92 | |
yangcq88517 | 0:837e6c48e90d | 93 | if (position >= max) |
yangcq88517 | 0:837e6c48e90d | 94 | expandSpace(1); |
yangcq88517 | 0:837e6c48e90d | 95 | |
yangcq88517 | 0:837e6c48e90d | 96 | data[position] = value; |
yangcq88517 | 0:837e6c48e90d | 97 | } |
yangcq88517 | 0:837e6c48e90d | 98 | |
yangcq88517 | 0:837e6c48e90d | 99 | void BufferedArray::set(char value) |
yangcq88517 | 0:837e6c48e90d | 100 | { |
yangcq88517 | 0:837e6c48e90d | 101 | set(index, value); |
yangcq88517 | 0:837e6c48e90d | 102 | index++; |
yangcq88517 | 0:837e6c48e90d | 103 | } |
yangcq88517 | 0:837e6c48e90d | 104 | |
yangcq88517 | 0:837e6c48e90d | 105 | void BufferedArray::sets(const char * value, int offset, int length) |
yangcq88517 | 0:837e6c48e90d | 106 | { |
yangcq88517 | 0:837e6c48e90d | 107 | if (length <= 0) |
yangcq88517 | 0:837e6c48e90d | 108 | return; |
yangcq88517 | 0:837e6c48e90d | 109 | |
yangcq88517 | 0:837e6c48e90d | 110 | if (offset < 0) |
yangcq88517 | 0:837e6c48e90d | 111 | return; |
yangcq88517 | 0:837e6c48e90d | 112 | |
yangcq88517 | 0:837e6c48e90d | 113 | sets(index, value, offset, length); |
yangcq88517 | 0:837e6c48e90d | 114 | index += length; |
yangcq88517 | 0:837e6c48e90d | 115 | } |
yangcq88517 | 0:837e6c48e90d | 116 | |
yangcq88517 | 0:837e6c48e90d | 117 | void BufferedArray::sets(int position, const char * value, int offset, int length) |
yangcq88517 | 0:837e6c48e90d | 118 | { |
yangcq88517 | 0:837e6c48e90d | 119 | if (position < 0) |
yangcq88517 | 0:837e6c48e90d | 120 | return; |
yangcq88517 | 0:837e6c48e90d | 121 | |
yangcq88517 | 0:837e6c48e90d | 122 | if (length <= 0) |
yangcq88517 | 0:837e6c48e90d | 123 | return; |
yangcq88517 | 0:837e6c48e90d | 124 | |
yangcq88517 | 0:837e6c48e90d | 125 | if (offset < 0) |
yangcq88517 | 0:837e6c48e90d | 126 | return; |
yangcq88517 | 0:837e6c48e90d | 127 | |
yangcq88517 | 0:837e6c48e90d | 128 | if (position + length - offset > max) |
yangcq88517 | 0:837e6c48e90d | 129 | expandSpace(position + length - offset - max); |
yangcq88517 | 0:837e6c48e90d | 130 | |
yangcq88517 | 0:837e6c48e90d | 131 | memcpy(data + position, value + offset, length); |
yangcq88517 | 0:837e6c48e90d | 132 | } |