Marcus Lee / LinearArray
Committer:
UHSLMarcus
Date:
Tue Mar 14 10:05:47 2017 +0000
Revision:
9:68d882e457c5
Parent:
2:92576523c23e
Child:
10:864b79e79ca8
better item defaults. Allow peeks at any item in array

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UHSLMarcus 9:68d882e457c5 1 template<class type>
UHSLMarcus 9:68d882e457c5 2 LinearArray<type>::LinearArray(int size, bool forced) :
UHSLMarcus 9:68d882e457c5 3 _elem_count(0), _array_size(size), _front(0), _rear(-1), _forced(forced) {
UHSLMarcus 9:68d882e457c5 4 _array = new (std::nothrow) type[size];
UHSLMarcus 9:68d882e457c5 5 }
UHSLMarcus 1:49758f1e1317 6
UHSLMarcus 9:68d882e457c5 7 template<class type>
UHSLMarcus 9:68d882e457c5 8 LinearArray<type>::~LinearArray() {
UHSLMarcus 9:68d882e457c5 9 delete[] _array;
UHSLMarcus 1:49758f1e1317 10 }
UHSLMarcus 1:49758f1e1317 11
UHSLMarcus 9:68d882e457c5 12 template<class type>
UHSLMarcus 9:68d882e457c5 13 int LinearArray<type>::push(type item) {
UHSLMarcus 9:68d882e457c5 14
UHSLMarcus 9:68d882e457c5 15 int ret = -1;
UHSLMarcus 9:68d882e457c5 16 bool room = _elem_count < _array_size;
UHSLMarcus 9:68d882e457c5 17 if (!room && _forced) {
UHSLMarcus 9:68d882e457c5 18 if (++_front == _array_size) _front = 0;
UHSLMarcus 9:68d882e457c5 19 _elem_count--;
UHSLMarcus 9:68d882e457c5 20 room = true;
UHSLMarcus 9:68d882e457c5 21 }
UHSLMarcus 9:68d882e457c5 22 if (room) {
UHSLMarcus 9:68d882e457c5 23 if (_rear == _array_size - 1) _rear = -1;
UHSLMarcus 9:68d882e457c5 24 _array[++_rear] = item;
UHSLMarcus 9:68d882e457c5 25 ret = _elem_count++;
UHSLMarcus 9:68d882e457c5 26 }
UHSLMarcus 9:68d882e457c5 27
UHSLMarcus 9:68d882e457c5 28 return ret;
UHSLMarcus 1:49758f1e1317 29 }
UHSLMarcus 1:49758f1e1317 30
UHSLMarcus 9:68d882e457c5 31 template<class type>
UHSLMarcus 9:68d882e457c5 32 type& LinearArray<type>::pop() {
UHSLMarcus 9:68d882e457c5 33
UHSLMarcus 9:68d882e457c5 34 static type defaultType;
UHSLMarcus 9:68d882e457c5 35 type item = defaultType;
UHSLMarcus 9:68d882e457c5 36
UHSLMarcus 9:68d882e457c5 37 if (_elem_count > 0) {
UHSLMarcus 9:68d882e457c5 38 item = _array[_front++];
UHSLMarcus 9:68d882e457c5 39 if (_front == _array_size) _front = 0;
UHSLMarcus 9:68d882e457c5 40 _elem_count--;
UHSLMarcus 9:68d882e457c5 41 }
UHSLMarcus 9:68d882e457c5 42
UHSLMarcus 9:68d882e457c5 43 return item;
UHSLMarcus 9:68d882e457c5 44
UHSLMarcus 1:49758f1e1317 45 }
UHSLMarcus 1:49758f1e1317 46
UHSLMarcus 9:68d882e457c5 47 template<class type>
UHSLMarcus 9:68d882e457c5 48 bool LinearArray<type>::try_pop(type& item) {
UHSLMarcus 9:68d882e457c5 49 bool success = false;
UHSLMarcus 1:49758f1e1317 50
UHSLMarcus 9:68d882e457c5 51 if (_elem_count > 0) {
UHSLMarcus 9:68d882e457c5 52 item = _array[_front++];
UHSLMarcus 9:68d882e457c5 53 if (_front == _array_size) _front = 0;
UHSLMarcus 9:68d882e457c5 54 _elem_count--;
UHSLMarcus 9:68d882e457c5 55 success = true;
UHSLMarcus 9:68d882e457c5 56 }
UHSLMarcus 9:68d882e457c5 57
UHSLMarcus 9:68d882e457c5 58 return success;
UHSLMarcus 1:49758f1e1317 59 }
UHSLMarcus 1:49758f1e1317 60
UHSLMarcus 9:68d882e457c5 61 template<class type>
UHSLMarcus 9:68d882e457c5 62 type& LinearArray<type>::peek(int idx) {
UHSLMarcus 9:68d882e457c5 63
UHSLMarcus 9:68d882e457c5 64 static type defaultType;
UHSLMarcus 9:68d882e457c5 65 type item = defaultType;
UHSLMarcus 9:68d882e457c5 66
UHSLMarcus 9:68d882e457c5 67 if (idx <= _elem_count) {
UHSLMarcus 9:68d882e457c5 68 int real_loc = _front + idx;
UHSLMarcus 9:68d882e457c5 69 if (real_loc >= _array_size) {
UHSLMarcus 9:68d882e457c5 70 real_loc = real_loc - _array_size;
UHSLMarcus 9:68d882e457c5 71 }
UHSLMarcus 9:68d882e457c5 72
UHSLMarcus 9:68d882e457c5 73 item = _array[real_loc];
UHSLMarcus 9:68d882e457c5 74 }
UHSLMarcus 9:68d882e457c5 75
UHSLMarcus 9:68d882e457c5 76 return item;
UHSLMarcus 9:68d882e457c5 77
UHSLMarcus 1:49758f1e1317 78 }
UHSLMarcus 1:49758f1e1317 79
UHSLMarcus 9:68d882e457c5 80 template<class type>
UHSLMarcus 9:68d882e457c5 81 int LinearArray<type>::size() {
UHSLMarcus 9:68d882e457c5 82 return _array_size;
UHSLMarcus 1:49758f1e1317 83 }
UHSLMarcus 1:49758f1e1317 84
UHSLMarcus 9:68d882e457c5 85 template<class type>
UHSLMarcus 9:68d882e457c5 86 int LinearArray<type>::count() {
UHSLMarcus 9:68d882e457c5 87 return _elem_count;
UHSLMarcus 1:49758f1e1317 88 }
UHSLMarcus 9:68d882e457c5 89
UHSLMarcus 9:68d882e457c5 90 template<class type>
UHSLMarcus 9:68d882e457c5 91 bool LinearArray<type>::full() {
UHSLMarcus 9:68d882e457c5 92 return _elem_count == _array_size;
UHSLMarcus 9:68d882e457c5 93 }