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@6:b511421e7dc8, 2015-10-13 (annotated)
- Committer:
- yangcq88517
- Date:
- Tue Oct 13 19:59:27 2015 +0000
- Revision:
- 6:b511421e7dc8
- Child:
- 7:eacd776fce29
bug fix
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 | 6:b511421e7dc8 | 10 | BufferedArray::BufferedArray(BufferedArray * bufferedArray) |
yangcq88517 | 6:b511421e7dc8 | 11 | { |
yangcq88517 | 6:b511421e7dc8 | 12 | this->data = bufferedArray->data; |
yangcq88517 | 6:b511421e7dc8 | 13 | this->index = bufferedArray->index; |
yangcq88517 | 6:b511421e7dc8 | 14 | } |
yangcq88517 | 6:b511421e7dc8 | 15 | |
yangcq88517 | 6:b511421e7dc8 | 16 | BufferedArray::~BufferedArray() |
yangcq88517 | 6:b511421e7dc8 | 17 | { |
yangcq88517 | 6:b511421e7dc8 | 18 | if (data == NULL) |
yangcq88517 | 6:b511421e7dc8 | 19 | return; |
yangcq88517 | 6:b511421e7dc8 | 20 | |
yangcq88517 | 6:b511421e7dc8 | 21 | delete[] data; |
yangcq88517 | 6:b511421e7dc8 | 22 | } |
yangcq88517 | 6:b511421e7dc8 | 23 | |
yangcq88517 | 6:b511421e7dc8 | 24 | char * BufferedArray::gets() |
yangcq88517 | 6:b511421e7dc8 | 25 | { |
yangcq88517 | 6:b511421e7dc8 | 26 | return data; |
yangcq88517 | 6:b511421e7dc8 | 27 | } |
yangcq88517 | 6:b511421e7dc8 | 28 | |
yangcq88517 | 6:b511421e7dc8 | 29 | char * BufferedArray::gets(int position) |
yangcq88517 | 6:b511421e7dc8 | 30 | { |
yangcq88517 | 6:b511421e7dc8 | 31 | return data + position; |
yangcq88517 | 6:b511421e7dc8 | 32 | } |
yangcq88517 | 6:b511421e7dc8 | 33 | |
yangcq88517 | 6:b511421e7dc8 | 34 | char BufferedArray::get(int position) |
yangcq88517 | 6:b511421e7dc8 | 35 | { |
yangcq88517 | 6:b511421e7dc8 | 36 | return *(data + position); |
yangcq88517 | 6:b511421e7dc8 | 37 | } |
yangcq88517 | 6:b511421e7dc8 | 38 | |
yangcq88517 | 6:b511421e7dc8 | 39 | int BufferedArray::getPosition() |
yangcq88517 | 6:b511421e7dc8 | 40 | { |
yangcq88517 | 6:b511421e7dc8 | 41 | return index; |
yangcq88517 | 6:b511421e7dc8 | 42 | } |
yangcq88517 | 6:b511421e7dc8 | 43 | |
yangcq88517 | 6:b511421e7dc8 | 44 | void BufferedArray::setPosition(int position) |
yangcq88517 | 6:b511421e7dc8 | 45 | { |
yangcq88517 | 6:b511421e7dc8 | 46 | if (this->index > max) |
yangcq88517 | 6:b511421e7dc8 | 47 | this->index = max; |
yangcq88517 | 6:b511421e7dc8 | 48 | else this->index = position; |
yangcq88517 | 6:b511421e7dc8 | 49 | } |
yangcq88517 | 6:b511421e7dc8 | 50 | |
yangcq88517 | 6:b511421e7dc8 | 51 | void BufferedArray::allocate(int length) |
yangcq88517 | 6:b511421e7dc8 | 52 | { |
yangcq88517 | 6:b511421e7dc8 | 53 | if (length <= 0) |
yangcq88517 | 6:b511421e7dc8 | 54 | return; |
yangcq88517 | 6:b511421e7dc8 | 55 | |
yangcq88517 | 6:b511421e7dc8 | 56 | if (length > max) { |
yangcq88517 | 6:b511421e7dc8 | 57 | delete[] data; |
yangcq88517 | 6:b511421e7dc8 | 58 | data = new char[length]; |
yangcq88517 | 6:b511421e7dc8 | 59 | } |
yangcq88517 | 6:b511421e7dc8 | 60 | |
yangcq88517 | 6:b511421e7dc8 | 61 | rewind(); |
yangcq88517 | 6:b511421e7dc8 | 62 | } |
yangcq88517 | 6:b511421e7dc8 | 63 | |
yangcq88517 | 6:b511421e7dc8 | 64 | void BufferedArray::rewind() |
yangcq88517 | 6:b511421e7dc8 | 65 | { |
yangcq88517 | 6:b511421e7dc8 | 66 | index = 0; |
yangcq88517 | 6:b511421e7dc8 | 67 | } |
yangcq88517 | 6:b511421e7dc8 | 68 | |
yangcq88517 | 6:b511421e7dc8 | 69 | void BufferedArray::expandSpace(int length) |
yangcq88517 | 6:b511421e7dc8 | 70 | { |
yangcq88517 | 6:b511421e7dc8 | 71 | max += EXPANDSIZE * (1 + length / EXPANDSIZE); |
yangcq88517 | 6:b511421e7dc8 | 72 | char * temp = new char[max]; |
yangcq88517 | 6:b511421e7dc8 | 73 | memcpy(temp, data, index); |
yangcq88517 | 6:b511421e7dc8 | 74 | delete[] data; |
yangcq88517 | 6:b511421e7dc8 | 75 | data = temp; |
yangcq88517 | 6:b511421e7dc8 | 76 | } |
yangcq88517 | 6:b511421e7dc8 | 77 | |
yangcq88517 | 6:b511421e7dc8 | 78 | void BufferedArray::set(int position, char value) |
yangcq88517 | 6:b511421e7dc8 | 79 | { |
yangcq88517 | 6:b511421e7dc8 | 80 | if (position < 0) |
yangcq88517 | 6:b511421e7dc8 | 81 | return; |
yangcq88517 | 6:b511421e7dc8 | 82 | |
yangcq88517 | 6:b511421e7dc8 | 83 | if (position >= max) |
yangcq88517 | 6:b511421e7dc8 | 84 | expandSpace(1); |
yangcq88517 | 6:b511421e7dc8 | 85 | |
yangcq88517 | 6:b511421e7dc8 | 86 | data[position] = value; |
yangcq88517 | 6:b511421e7dc8 | 87 | } |
yangcq88517 | 6:b511421e7dc8 | 88 | |
yangcq88517 | 6:b511421e7dc8 | 89 | void BufferedArray::set(char value) |
yangcq88517 | 6:b511421e7dc8 | 90 | { |
yangcq88517 | 6:b511421e7dc8 | 91 | set(index, value); |
yangcq88517 | 6:b511421e7dc8 | 92 | index++; |
yangcq88517 | 6:b511421e7dc8 | 93 | } |
yangcq88517 | 6:b511421e7dc8 | 94 | |
yangcq88517 | 6:b511421e7dc8 | 95 | void BufferedArray::sets(char * value, int offset, int length) |
yangcq88517 | 6:b511421e7dc8 | 96 | { |
yangcq88517 | 6:b511421e7dc8 | 97 | if (length <= 0) |
yangcq88517 | 6:b511421e7dc8 | 98 | return; |
yangcq88517 | 6:b511421e7dc8 | 99 | |
yangcq88517 | 6:b511421e7dc8 | 100 | if (offset < 0) |
yangcq88517 | 6:b511421e7dc8 | 101 | return; |
yangcq88517 | 6:b511421e7dc8 | 102 | |
yangcq88517 | 6:b511421e7dc8 | 103 | sets(index, value, offset, length); |
yangcq88517 | 6:b511421e7dc8 | 104 | index += length; |
yangcq88517 | 6:b511421e7dc8 | 105 | } |
yangcq88517 | 6:b511421e7dc8 | 106 | |
yangcq88517 | 6:b511421e7dc8 | 107 | void BufferedArray::sets(int position, char * value, int offset, int length) |
yangcq88517 | 6:b511421e7dc8 | 108 | { |
yangcq88517 | 6:b511421e7dc8 | 109 | if (position < 0) |
yangcq88517 | 6:b511421e7dc8 | 110 | return; |
yangcq88517 | 6:b511421e7dc8 | 111 | |
yangcq88517 | 6:b511421e7dc8 | 112 | if (length <= 0) |
yangcq88517 | 6:b511421e7dc8 | 113 | return; |
yangcq88517 | 6:b511421e7dc8 | 114 | |
yangcq88517 | 6:b511421e7dc8 | 115 | if (offset < 0) |
yangcq88517 | 6:b511421e7dc8 | 116 | return; |
yangcq88517 | 6:b511421e7dc8 | 117 | |
yangcq88517 | 6:b511421e7dc8 | 118 | if (position + length - offset > max) |
yangcq88517 | 6:b511421e7dc8 | 119 | expandSpace(position + length - offset - max); |
yangcq88517 | 6:b511421e7dc8 | 120 | |
yangcq88517 | 6:b511421e7dc8 | 121 | memcpy(data + position, value + offset, length); |
yangcq88517 | 6:b511421e7dc8 | 122 | } |