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