Marcus Lee / LinearArray
Committer:
UHSLMarcus
Date:
Tue Mar 14 12:16:34 2017 +0000
Revision:
11:1e27a6f0b0cf
Parent:
10:864b79e79ca8
Parent:
8:18c9d62b8f7c
acts more like a queue. removed mod maths

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UHSLMarcus 10:864b79e79ca8 1 //Serial pc(PTE0,NC);
UHSLMarcus 10:864b79e79ca8 2
UHSLMarcus 3:8e9f85814809 3 template<class type>
UHSLMarcus 5:0f65cdadb1a4 4 LinearArray<type>::LinearArray(int size, bool forced) :
UHSLMarcus 5:0f65cdadb1a4 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 3:8e9f85814809 10 }
UHSLMarcus 1:49758f1e1317 11
UHSLMarcus 3:8e9f85814809 12 template<class type>
UHSLMarcus 3:8e9f85814809 13 LinearArray<type>::~LinearArray() {
UHSLMarcus 5:0f65cdadb1a4 14 delete[] _array;
UHSLMarcus 1:49758f1e1317 15 }
UHSLMarcus 1:49758f1e1317 16
UHSLMarcus 3:8e9f85814809 17 template<class type>
UHSLMarcus 3:8e9f85814809 18 int LinearArray<type>::push(type item) {
UHSLMarcus 3:8e9f85814809 19
UHSLMarcus 3:8e9f85814809 20 int ret = -1;
UHSLMarcus 8:18c9d62b8f7c 21 bool room = _elem_count < _array_size;
UHSLMarcus 8:18c9d62b8f7c 22 if (!room && _forced) {
UHSLMarcus 8:18c9d62b8f7c 23 if (++_front == _array_size) _front = 0;
UHSLMarcus 8:18c9d62b8f7c 24 _elem_count--;
UHSLMarcus 8:18c9d62b8f7c 25 room = true;
UHSLMarcus 8:18c9d62b8f7c 26 }
UHSLMarcus 8:18c9d62b8f7c 27 if (room) {
UHSLMarcus 5:0f65cdadb1a4 28 if (_rear == _array_size - 1) _rear = -1;
UHSLMarcus 5:0f65cdadb1a4 29 _array[++_rear] = item;
UHSLMarcus 6:314f180362cb 30 ret = _elem_count++;
UHSLMarcus 3:8e9f85814809 31 }
UHSLMarcus 3:8e9f85814809 32
UHSLMarcus 3:8e9f85814809 33 return ret;
UHSLMarcus 1:49758f1e1317 34 }
UHSLMarcus 1:49758f1e1317 35
UHSLMarcus 3:8e9f85814809 36 template<class type>
UHSLMarcus 5:0f65cdadb1a4 37 type& LinearArray<type>::pop() {
UHSLMarcus 5:0f65cdadb1a4 38
UHSLMarcus 9:68d882e457c5 39 static type defaultType;
UHSLMarcus 9:68d882e457c5 40 type item = defaultType;
UHSLMarcus 5:0f65cdadb1a4 41
UHSLMarcus 7:6e24d8ccecd4 42 if (_elem_count > 0) {
UHSLMarcus 5:0f65cdadb1a4 43 item = _array[_front++];
UHSLMarcus 5:0f65cdadb1a4 44 if (_front == _array_size) _front = 0;
UHSLMarcus 6:314f180362cb 45 _elem_count--;
UHSLMarcus 5:0f65cdadb1a4 46 }
UHSLMarcus 5:0f65cdadb1a4 47
UHSLMarcus 5:0f65cdadb1a4 48 return item;
UHSLMarcus 5:0f65cdadb1a4 49
UHSLMarcus 5:0f65cdadb1a4 50 }
UHSLMarcus 5:0f65cdadb1a4 51
UHSLMarcus 5:0f65cdadb1a4 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 11:1e27a6f0b0cf 64 }
UHSLMarcus 3:8e9f85814809 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 3:8e9f85814809 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 3:8e9f85814809 79 }
UHSLMarcus 3:8e9f85814809 80
UHSLMarcus 3:8e9f85814809 81 return item;
UHSLMarcus 3:8e9f85814809 82
UHSLMarcus 1:49758f1e1317 83 }
UHSLMarcus 1:49758f1e1317 84
UHSLMarcus 3:8e9f85814809 85 template<class type>
UHSLMarcus 1:49758f1e1317 86 int LinearArray<type>::size() {
UHSLMarcus 5:0f65cdadb1a4 87 return _array_size;
UHSLMarcus 1:49758f1e1317 88 }
UHSLMarcus 1:49758f1e1317 89
UHSLMarcus 3:8e9f85814809 90 template<class type>
UHSLMarcus 4:7743528fb9e5 91 int LinearArray<type>::count() {
UHSLMarcus 6:314f180362cb 92 return _elem_count;
UHSLMarcus 3:8e9f85814809 93 }
UHSLMarcus 3:8e9f85814809 94
UHSLMarcus 3:8e9f85814809 95 template<class type>
UHSLMarcus 4:7743528fb9e5 96 bool LinearArray<type>::full() {
UHSLMarcus 6:314f180362cb 97 return _elem_count == _array_size;
UHSLMarcus 1:49758f1e1317 98 }