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.

Dependencies:   BufferedArray

Dependents:   MBEDminiproject

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?

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