The MGC3130 is the world’s first electrical-field (E-field) based three-dimensional (3D) tracking and gesture controller

Dependencies:   BufferedArray

Dependents:   NucleoMGC3130 i2c_master

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?

UserRevisionLine numberNew 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 }