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 20:02:11 2015 +0000
Revision:
1:3dc0ec2f9fd6
Parent:
0:837e6c48e90d
bug fix

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 1:3dc0ec2f9fd6 67 if (data != NULL)
yangcq88517 1:3dc0ec2f9fd6 68 delete[] data;
yangcq88517 0:837e6c48e90d 69 data = new char[length];
yangcq88517 0:837e6c48e90d 70 }
yangcq88517 0:837e6c48e90d 71
yangcq88517 0:837e6c48e90d 72 rewind();
yangcq88517 0:837e6c48e90d 73 }
yangcq88517 0:837e6c48e90d 74
yangcq88517 0:837e6c48e90d 75 void BufferedArray::rewind()
yangcq88517 0:837e6c48e90d 76 {
yangcq88517 0:837e6c48e90d 77 index = 0;
yangcq88517 0:837e6c48e90d 78 }
yangcq88517 0:837e6c48e90d 79
yangcq88517 0:837e6c48e90d 80 void BufferedArray::expandSpace(int length)
yangcq88517 0:837e6c48e90d 81 {
yangcq88517 0:837e6c48e90d 82 max += EXPANDSIZE * (1 + length / EXPANDSIZE);
yangcq88517 0:837e6c48e90d 83 char * temp = new char[max];
yangcq88517 0:837e6c48e90d 84 memcpy(temp, data, index);
yangcq88517 0:837e6c48e90d 85 delete[] data;
yangcq88517 0:837e6c48e90d 86 data = temp;
yangcq88517 0:837e6c48e90d 87 }
yangcq88517 0:837e6c48e90d 88
yangcq88517 0:837e6c48e90d 89 void BufferedArray::set(int position, char value)
yangcq88517 0:837e6c48e90d 90 {
yangcq88517 0:837e6c48e90d 91 if (position < 0)
yangcq88517 0:837e6c48e90d 92 return;
yangcq88517 0:837e6c48e90d 93
yangcq88517 0:837e6c48e90d 94 if (position >= max)
yangcq88517 0:837e6c48e90d 95 expandSpace(1);
yangcq88517 0:837e6c48e90d 96
yangcq88517 0:837e6c48e90d 97 data[position] = value;
yangcq88517 0:837e6c48e90d 98 }
yangcq88517 0:837e6c48e90d 99
yangcq88517 0:837e6c48e90d 100 void BufferedArray::set(char value)
yangcq88517 0:837e6c48e90d 101 {
yangcq88517 0:837e6c48e90d 102 set(index, value);
yangcq88517 0:837e6c48e90d 103 index++;
yangcq88517 0:837e6c48e90d 104 }
yangcq88517 0:837e6c48e90d 105
yangcq88517 0:837e6c48e90d 106 void BufferedArray::sets(const char * value, int offset, int length)
yangcq88517 0:837e6c48e90d 107 {
yangcq88517 0:837e6c48e90d 108 if (length <= 0)
yangcq88517 0:837e6c48e90d 109 return;
yangcq88517 0:837e6c48e90d 110
yangcq88517 0:837e6c48e90d 111 if (offset < 0)
yangcq88517 0:837e6c48e90d 112 return;
yangcq88517 0:837e6c48e90d 113
yangcq88517 0:837e6c48e90d 114 sets(index, value, offset, length);
yangcq88517 0:837e6c48e90d 115 index += length;
yangcq88517 0:837e6c48e90d 116 }
yangcq88517 0:837e6c48e90d 117
yangcq88517 0:837e6c48e90d 118 void BufferedArray::sets(int position, const char * value, int offset, int length)
yangcq88517 0:837e6c48e90d 119 {
yangcq88517 0:837e6c48e90d 120 if (position < 0)
yangcq88517 0:837e6c48e90d 121 return;
yangcq88517 0:837e6c48e90d 122
yangcq88517 0:837e6c48e90d 123 if (length <= 0)
yangcq88517 0:837e6c48e90d 124 return;
yangcq88517 0:837e6c48e90d 125
yangcq88517 0:837e6c48e90d 126 if (offset < 0)
yangcq88517 0:837e6c48e90d 127 return;
yangcq88517 0:837e6c48e90d 128
yangcq88517 0:837e6c48e90d 129 if (position + length - offset > max)
yangcq88517 0:837e6c48e90d 130 expandSpace(position + length - offset - max);
yangcq88517 0:837e6c48e90d 131
yangcq88517 0:837e6c48e90d 132 memcpy(data + position, value + offset, length);
yangcq88517 0:837e6c48e90d 133 }