Marcus Lee / LinearArray
Committer:
UHSLMarcus
Date:
Tue Mar 14 12:24:59 2017 +0000
Revision:
12:e4f557b33732
Parent:
10:864b79e79ca8
Child:
13:db9ebea23baf
added debug lines

Who changed what in which revision?

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