Multi-Hackers / SocketModem

Dependents:   M2X_dev axeda_wrapper_dev MTS_M2x_Example1 MTS_Cellular_Connect_Example ... more

Committer:
sgodinez
Date:
Mon Dec 23 19:55:31 2013 +0000
Revision:
67:1003b410f781
Parent:
65:ed113472b2c1
Child:
84:77c5ab16534d
Changed MTSCircularBuffer names for size, capacity, and remaining

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jengbrecht 0:563b70517320 1 #ifndef MTSCIRCULARBUFFER_CPP
jengbrecht 0:563b70517320 2 #define MTSCIRCULARBUFFER_CPP
jengbrecht 0:563b70517320 3
jengbrecht 0:563b70517320 4 #include "MTSCircularBuffer.h"
jengbrecht 0:563b70517320 5
mfiore 39:6e94520a3217 6 using namespace mts;
mfiore 39:6e94520a3217 7
sgodinez 64:0ca9c7123ffc 8 MTSCircularBuffer::MTSCircularBuffer(int bufferSize) : bufferSize(bufferSize), readIndex(0), writeIndex(0), bytes(0), _threshold(-1), _op(Vars::GREATER)
jengbrecht 0:563b70517320 9 {
jengbrecht 0:563b70517320 10 buffer = new char[bufferSize];
jengbrecht 0:563b70517320 11 }
jengbrecht 0:563b70517320 12
jengbrecht 0:563b70517320 13 MTSCircularBuffer::~MTSCircularBuffer()
jengbrecht 0:563b70517320 14 {
jengbrecht 0:563b70517320 15 delete[] buffer;
jengbrecht 0:563b70517320 16 }
jengbrecht 0:563b70517320 17
sgodinez 67:1003b410f781 18 int MTSCircularBuffer::capacity()
jengbrecht 0:563b70517320 19 {
jengbrecht 0:563b70517320 20 return bufferSize;
jengbrecht 0:563b70517320 21 }
jengbrecht 0:563b70517320 22
jengbrecht 0:563b70517320 23 int MTSCircularBuffer::read(char* data, int length)
jengbrecht 0:563b70517320 24 {
jengbrecht 0:563b70517320 25 int i = 0;
sgodinez 64:0ca9c7123ffc 26 while ((i < length) && (bytes > 0)) {
jengbrecht 0:563b70517320 27 if (readIndex == bufferSize) {
jengbrecht 0:563b70517320 28 readIndex = 0;
jengbrecht 0:563b70517320 29 }
jengbrecht 0:563b70517320 30 data[i++] = buffer[readIndex++];
sgodinez 64:0ca9c7123ffc 31 bytes--;
mfiore 60:ee9c7a700330 32 checkThreshold();
jengbrecht 0:563b70517320 33 }
jengbrecht 0:563b70517320 34 return i;
jengbrecht 0:563b70517320 35 }
jengbrecht 0:563b70517320 36
sgodinez 17:2d7c4ea7491b 37 int MTSCircularBuffer::read(char& data)
jengbrecht 0:563b70517320 38 {
sgodinez 64:0ca9c7123ffc 39 if (bytes == 0) {
sgodinez 35:f28acb1be52d 40 return 0;
jengbrecht 0:563b70517320 41 }
jengbrecht 0:563b70517320 42 if (readIndex == bufferSize) {
jengbrecht 0:563b70517320 43 readIndex = 0;
jengbrecht 0:563b70517320 44 }
sgodinez 17:2d7c4ea7491b 45 data = buffer[readIndex++];
sgodinez 64:0ca9c7123ffc 46 bytes--;
jengbrecht 0:563b70517320 47 checkThreshold();
sgodinez 17:2d7c4ea7491b 48 return 1;
jengbrecht 0:563b70517320 49 }
jengbrecht 0:563b70517320 50
sgodinez 41:81d035fb0b6a 51 int MTSCircularBuffer::write(const char* data, int length)
jengbrecht 0:563b70517320 52 {
jengbrecht 0:563b70517320 53 int i = 0;
sgodinez 64:0ca9c7123ffc 54 while((i < length) && (bytes < bufferSize)) {
jengbrecht 0:563b70517320 55 if(writeIndex == bufferSize) {
jengbrecht 0:563b70517320 56 writeIndex = 0;
jengbrecht 0:563b70517320 57 }
jengbrecht 0:563b70517320 58 buffer[writeIndex++] = data[i++];
sgodinez 64:0ca9c7123ffc 59 bytes++;
mfiore 60:ee9c7a700330 60 checkThreshold();
jengbrecht 0:563b70517320 61 }
mfiore 2:8d3ea0dfce39 62 return i;
jengbrecht 0:563b70517320 63 }
jengbrecht 0:563b70517320 64
jengbrecht 0:563b70517320 65 int MTSCircularBuffer::write(char data)
jengbrecht 0:563b70517320 66 {
sgodinez 64:0ca9c7123ffc 67 if (bytes == bufferSize) {
sgodinez 35:f28acb1be52d 68 return 0;
jengbrecht 0:563b70517320 69 }
jengbrecht 0:563b70517320 70 if(writeIndex == bufferSize) {
jengbrecht 0:563b70517320 71 writeIndex = 0;
jengbrecht 0:563b70517320 72 }
jengbrecht 0:563b70517320 73 buffer[writeIndex++] = data;
sgodinez 64:0ca9c7123ffc 74 bytes++;
jengbrecht 0:563b70517320 75 checkThreshold();
mfiore 2:8d3ea0dfce39 76 return 1;
jengbrecht 0:563b70517320 77 }
jengbrecht 0:563b70517320 78
sgodinez 67:1003b410f781 79 int MTSCircularBuffer::remaining()
jengbrecht 0:563b70517320 80 {
sgodinez 64:0ca9c7123ffc 81 return bufferSize - bytes;
jengbrecht 0:563b70517320 82 }
jengbrecht 0:563b70517320 83
sgodinez 67:1003b410f781 84 int MTSCircularBuffer::size()
jengbrecht 0:563b70517320 85 {
sgodinez 64:0ca9c7123ffc 86 return bytes;
jengbrecht 0:563b70517320 87 }
jengbrecht 0:563b70517320 88
jengbrecht 0:563b70517320 89 bool MTSCircularBuffer::isFull()
jengbrecht 0:563b70517320 90 {
sgodinez 64:0ca9c7123ffc 91 if (bytes == bufferSize) {
jengbrecht 0:563b70517320 92 return true;
jengbrecht 0:563b70517320 93 } else {
jengbrecht 0:563b70517320 94 return false;
jengbrecht 0:563b70517320 95 }
jengbrecht 0:563b70517320 96 }
jengbrecht 0:563b70517320 97
jengbrecht 0:563b70517320 98 bool MTSCircularBuffer::isEmpty()
jengbrecht 0:563b70517320 99 {
sgodinez 64:0ca9c7123ffc 100 if (bytes == 0) {
jengbrecht 0:563b70517320 101 return true;
jengbrecht 0:563b70517320 102 } else {
jengbrecht 0:563b70517320 103 return false;
jengbrecht 0:563b70517320 104 }
jengbrecht 0:563b70517320 105 }
jengbrecht 0:563b70517320 106
jengbrecht 0:563b70517320 107 void MTSCircularBuffer::clear()
jengbrecht 0:563b70517320 108 {
sgodinez 64:0ca9c7123ffc 109 writeIndex = readIndex = bytes = 0;
jengbrecht 0:563b70517320 110 }
jengbrecht 0:563b70517320 111
jengbrecht 0:563b70517320 112 void MTSCircularBuffer::checkThreshold()
jengbrecht 0:563b70517320 113 {
mfiore 2:8d3ea0dfce39 114 if (_threshold == -1) {
jengbrecht 0:563b70517320 115 return;
jengbrecht 0:563b70517320 116 }
mfiore 2:8d3ea0dfce39 117 switch (_op) {
jengbrecht 0:563b70517320 118 case Vars::GREATER:
sgodinez 64:0ca9c7123ffc 119 if (bytes > _threshold) {
jengbrecht 0:563b70517320 120 notify.call();
jengbrecht 0:563b70517320 121 }
jengbrecht 0:563b70517320 122 break;
jengbrecht 0:563b70517320 123 case Vars::LESS:
sgodinez 64:0ca9c7123ffc 124 if (bytes < _threshold) {
jengbrecht 0:563b70517320 125 notify.call();
jengbrecht 0:563b70517320 126 }
jengbrecht 0:563b70517320 127 break;
jengbrecht 0:563b70517320 128 case Vars::GREATER_EQUAL:
sgodinez 64:0ca9c7123ffc 129 if (bytes >= _threshold) {
jengbrecht 0:563b70517320 130 notify.call();
jengbrecht 0:563b70517320 131 }
jengbrecht 0:563b70517320 132 break;
jengbrecht 0:563b70517320 133 case Vars::LESS_EQUAL:
sgodinez 64:0ca9c7123ffc 134 if (bytes <= _threshold) {
jengbrecht 0:563b70517320 135 notify.call();
jengbrecht 0:563b70517320 136 }
jengbrecht 0:563b70517320 137 break;
jengbrecht 0:563b70517320 138 case Vars::EQUAL:
sgodinez 64:0ca9c7123ffc 139 if (bytes == _threshold) {
jengbrecht 0:563b70517320 140 notify.call();
jengbrecht 0:563b70517320 141 }
jengbrecht 0:563b70517320 142 break;
jengbrecht 0:563b70517320 143 }
jengbrecht 0:563b70517320 144 }
jengbrecht 0:563b70517320 145
jengbrecht 0:563b70517320 146 #endif /* MTSCIRCULARBUFFER_CPP */