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:
Thu Oct 15 16:10:55 2015 +0000
Revision:
7:eacd776fce29
Parent:
6:b511421e7dc8
add sample code

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