Marcus Lee / LinearArray
Committer:
UHSLMarcus
Date:
Tue Mar 14 12:12:53 2017 +0000
Revision:
10:864b79e79ca8
Parent:
9:68d882e457c5
Child:
11:1e27a6f0b0cf
Child:
12:e4f557b33732
added debug lines

Who changed what in which revision?

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