Marcus Lee / LinearArray
Committer:
UHSLMarcus
Date:
Fri Mar 17 10:54:09 2017 +0000
Revision:
13:db9ebea23baf
Parent:
12:e4f557b33732
fixed some errors

Who changed what in which revision?

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