Marcus Lee / LinearArray
Committer:
UHSLMarcus
Date:
Wed Mar 08 11:23:22 2017 +0000
Revision:
8:18c9d62b8f7c
Parent:
7:6e24d8ccecd4
Child:
11:1e27a6f0b0cf
added forced option. Pops oldest item on new push when full

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UHSLMarcus 3:8e9f85814809 1 template<class type>
UHSLMarcus 5:0f65cdadb1a4 2 LinearArray<type>::LinearArray(int size, bool forced) :
UHSLMarcus 5:0f65cdadb1a4 3 _elem_count(0), _array_size(size), _front(0), _rear(-1), _forced(forced) {
UHSLMarcus 5:0f65cdadb1a4 4 _array = new type[size];
UHSLMarcus 3:8e9f85814809 5 }
UHSLMarcus 1:49758f1e1317 6
UHSLMarcus 3:8e9f85814809 7 template<class type>
UHSLMarcus 3:8e9f85814809 8 LinearArray<type>::~LinearArray() {
UHSLMarcus 5:0f65cdadb1a4 9 delete[] _array;
UHSLMarcus 1:49758f1e1317 10 }
UHSLMarcus 1:49758f1e1317 11
UHSLMarcus 3:8e9f85814809 12 template<class type>
UHSLMarcus 3:8e9f85814809 13 int LinearArray<type>::push(type item) {
UHSLMarcus 3:8e9f85814809 14
UHSLMarcus 3:8e9f85814809 15 int ret = -1;
UHSLMarcus 8:18c9d62b8f7c 16 bool room = _elem_count < _array_size;
UHSLMarcus 8:18c9d62b8f7c 17 if (!room && _forced) {
UHSLMarcus 8:18c9d62b8f7c 18 if (++_front == _array_size) _front = 0;
UHSLMarcus 8:18c9d62b8f7c 19 _elem_count--;
UHSLMarcus 8:18c9d62b8f7c 20 room = true;
UHSLMarcus 8:18c9d62b8f7c 21 }
UHSLMarcus 8:18c9d62b8f7c 22 if (room) {
UHSLMarcus 5:0f65cdadb1a4 23 if (_rear == _array_size - 1) _rear = -1;
UHSLMarcus 5:0f65cdadb1a4 24 _array[++_rear] = item;
UHSLMarcus 6:314f180362cb 25 ret = _elem_count++;
UHSLMarcus 3:8e9f85814809 26 }
UHSLMarcus 3:8e9f85814809 27
UHSLMarcus 3:8e9f85814809 28 return ret;
UHSLMarcus 1:49758f1e1317 29 }
UHSLMarcus 1:49758f1e1317 30
UHSLMarcus 3:8e9f85814809 31 template<class type>
UHSLMarcus 5:0f65cdadb1a4 32 type& LinearArray<type>::pop() {
UHSLMarcus 5:0f65cdadb1a4 33
UHSLMarcus 5:0f65cdadb1a4 34 type item = NULL;
UHSLMarcus 5:0f65cdadb1a4 35
UHSLMarcus 7:6e24d8ccecd4 36 if (_elem_count > 0) {
UHSLMarcus 5:0f65cdadb1a4 37 item = _array[_front++];
UHSLMarcus 5:0f65cdadb1a4 38 if (_front == _array_size) _front = 0;
UHSLMarcus 6:314f180362cb 39 _elem_count--;
UHSLMarcus 5:0f65cdadb1a4 40 }
UHSLMarcus 5:0f65cdadb1a4 41
UHSLMarcus 5:0f65cdadb1a4 42 return item;
UHSLMarcus 5:0f65cdadb1a4 43
UHSLMarcus 5:0f65cdadb1a4 44 }
UHSLMarcus 5:0f65cdadb1a4 45
UHSLMarcus 5:0f65cdadb1a4 46 template<class type>
UHSLMarcus 4:7743528fb9e5 47 type& LinearArray<type>::peek() {
UHSLMarcus 3:8e9f85814809 48
UHSLMarcus 3:8e9f85814809 49 type item = NULL;
UHSLMarcus 3:8e9f85814809 50
UHSLMarcus 5:0f65cdadb1a4 51 if (_front <= _rear) {
UHSLMarcus 5:0f65cdadb1a4 52 item = _array[_front];
UHSLMarcus 3:8e9f85814809 53 }
UHSLMarcus 3:8e9f85814809 54
UHSLMarcus 3:8e9f85814809 55 return item;
UHSLMarcus 3:8e9f85814809 56
UHSLMarcus 1:49758f1e1317 57 }
UHSLMarcus 1:49758f1e1317 58
UHSLMarcus 3:8e9f85814809 59 template<class type>
UHSLMarcus 1:49758f1e1317 60 int LinearArray<type>::size() {
UHSLMarcus 5:0f65cdadb1a4 61 return _array_size;
UHSLMarcus 1:49758f1e1317 62 }
UHSLMarcus 1:49758f1e1317 63
UHSLMarcus 3:8e9f85814809 64 template<class type>
UHSLMarcus 4:7743528fb9e5 65 int LinearArray<type>::count() {
UHSLMarcus 6:314f180362cb 66 return _elem_count;
UHSLMarcus 3:8e9f85814809 67 }
UHSLMarcus 3:8e9f85814809 68
UHSLMarcus 3:8e9f85814809 69 template<class type>
UHSLMarcus 4:7743528fb9e5 70 bool LinearArray<type>::full() {
UHSLMarcus 6:314f180362cb 71 return _elem_count == _array_size;
UHSLMarcus 1:49758f1e1317 72 }