Radu-Adrian Marcu / Mbed OS SOFT253_GroupA_AssignmentRepo

Dependencies:   LPS25H hts221

Fork of SOFT253_Template_Weather_OS_54 by Stage-1 Students SoCEM

Committer:
Netaphous
Date:
Fri Apr 07 12:43:03 2017 +0000
Branch:
feature/listOptimisation
Revision:
62:9cea49a2600d
Parent:
61:330fae754769
Child:
63:cb7b9d2ccfa5
Changed the ListAll and DeleteAll commands to call the ListX/DeleteX commands passing in the current size - removes duplicated code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
FairyMental 40:ba083993b481 1 #include "LinkedList.h"
FairyMental 40:ba083993b481 2 #include <stdio.h>
FairyMental 40:ba083993b481 3 #include <ctype.h>
Netaphous 54:53ee2d07d684 4 /*
Netaphous 54:53ee2d07d684 5 Constructor
Netaphous 54:53ee2d07d684 6 Initialises a linked list using the limit given
Netaphous 54:53ee2d07d684 7 */
Netaphous 53:abb161ed4c8c 8 LinkedList::LinkedList(int limit)
Netaphous 53:abb161ed4c8c 9 {
Netaphous 53:abb161ed4c8c 10 sizeLimit = limit;
Netaphous 53:abb161ed4c8c 11 currentSize = 0;
Netaphous 53:abb161ed4c8c 12 head = NULL;
Netaphous 53:abb161ed4c8c 13 }
Netaphous 53:abb161ed4c8c 14
Netaphous 61:330fae754769 15 void LinkedList::addValueFront(Measure _measure)
Netaphous 61:330fae754769 16 {
Netaphous 61:330fae754769 17 Node *n = mpool.alloc();
Netaphous 53:abb161ed4c8c 18 n->measure = _measure;
Netaphous 53:abb161ed4c8c 19 n->next = head;
Netaphous 53:abb161ed4c8c 20
Netaphous 53:abb161ed4c8c 21 head = n;
Netaphous 53:abb161ed4c8c 22
Netaphous 53:abb161ed4c8c 23 currentSize++;
Netaphous 53:abb161ed4c8c 24 }
Netaphous 54:53ee2d07d684 25 /*
Netaphous 54:53ee2d07d684 26 Adds a value to the end of the list - if the list is full, removes the
Netaphous 54:53ee2d07d684 27 oldest element first to create space
Netaphous 54:53ee2d07d684 28 */
Netaphous 53:abb161ed4c8c 29 void LinkedList::addValueEnd(Measure _measure)
Netaphous 53:abb161ed4c8c 30 {
Netaphous 53:abb161ed4c8c 31 if(head == NULL)
FairyMental 42:b1f29874ab70 32 {
Netaphous 61:330fae754769 33 Node *aux = mpool.alloc();
Netaphous 53:abb161ed4c8c 34 aux->measure = _measure;
Netaphous 53:abb161ed4c8c 35 aux->next = NULL;
Netaphous 53:abb161ed4c8c 36 head = aux;
FairyMental 42:b1f29874ab70 37 }
Netaphous 53:abb161ed4c8c 38 else
Netaphous 53:abb161ed4c8c 39 {
FairyMental 57:dfcdda1e42b6 40 while(currentSize >= sizeLimit)
Netaphous 53:abb161ed4c8c 41 {
Netaphous 53:abb161ed4c8c 42 popValueFRONT();
Netaphous 53:abb161ed4c8c 43 }
FairyMental 42:b1f29874ab70 44
Netaphous 53:abb161ed4c8c 45 Node *n = head;
Netaphous 53:abb161ed4c8c 46 while(n->next != NULL)
FairyMental 40:ba083993b481 47 {
Netaphous 53:abb161ed4c8c 48 n = n->next;
FairyMental 42:b1f29874ab70 49 }
Netaphous 61:330fae754769 50 Node *aux = mpool.alloc();
Netaphous 53:abb161ed4c8c 51 aux->measure = _measure;
Netaphous 53:abb161ed4c8c 52 aux->next = NULL;
Netaphous 53:abb161ed4c8c 53 n->next = aux;
FairyMental 40:ba083993b481 54 }
Netaphous 53:abb161ed4c8c 55 currentSize++;
Netaphous 53:abb161ed4c8c 56 }
Netaphous 53:abb161ed4c8c 57 Measure LinkedList::popValueFRONT()
Netaphous 53:abb161ed4c8c 58 {
Netaphous 53:abb161ed4c8c 59 Node *n = head;
Netaphous 53:abb161ed4c8c 60 Measure _measure = n->measure;
Netaphous 53:abb161ed4c8c 61
Netaphous 53:abb161ed4c8c 62 head = head->next;
Netaphous 61:330fae754769 63 mpool.free(n);
Netaphous 53:abb161ed4c8c 64
Netaphous 53:abb161ed4c8c 65 currentSize--;
Netaphous 53:abb161ed4c8c 66
Netaphous 53:abb161ed4c8c 67 return _measure;
Netaphous 53:abb161ed4c8c 68 }
Netaphous 53:abb161ed4c8c 69 void LinkedList::ListAll()
Netaphous 53:abb161ed4c8c 70 {
Netaphous 62:9cea49a2600d 71 ListX(currentSize);
Netaphous 53:abb161ed4c8c 72 }
Netaphous 53:abb161ed4c8c 73 void LinkedList::ListX(int x)
Netaphous 53:abb161ed4c8c 74 {
Netaphous 53:abb161ed4c8c 75 Node *n = head;
FairyMental 60:db8c5b7fc548 76 int i = 1;
FairyMental 60:db8c5b7fc548 77 while(n->next != NULL && i <= x)
Netaphous 53:abb161ed4c8c 78 {
Netaphous 53:abb161ed4c8c 79 char *ptr = n->measure.date.ToString();
Netaphous 53:abb161ed4c8c 80 printf("%i. %s T: %f | H: %f | P: %f |\r\n",i,ptr , n->measure.temperature, n->measure.humidity, n->measure.pressure);
Netaphous 53:abb161ed4c8c 81 i++;
Netaphous 53:abb161ed4c8c 82 n = n->next;
Netaphous 53:abb161ed4c8c 83 }
Netaphous 53:abb161ed4c8c 84 }
Netaphous 53:abb161ed4c8c 85 void LinkedList::DeleteAll()
Netaphous 53:abb161ed4c8c 86 {
Netaphous 62:9cea49a2600d 87 DeleteX(currentSize);
Netaphous 53:abb161ed4c8c 88 }
Netaphous 53:abb161ed4c8c 89 void LinkedList::DeleteX(int x)
Netaphous 53:abb161ed4c8c 90 {
Netaphous 53:abb161ed4c8c 91 int i = 0;
Netaphous 53:abb161ed4c8c 92 while(head->next != NULL && i < x)
FairyMental 40:ba083993b481 93 {
FairyMental 40:ba083993b481 94 Node *n = head;
FairyMental 40:ba083993b481 95 head = head->next;
Netaphous 53:abb161ed4c8c 96
Netaphous 61:330fae754769 97 mpool.free(n);
FairyMental 42:b1f29874ab70 98
Netaphous 53:abb161ed4c8c 99 i++;
Netaphous 53:abb161ed4c8c 100 }
Netaphous 53:abb161ed4c8c 101 currentSize -= x;
Netaphous 53:abb161ed4c8c 102 }
Netaphous 53:abb161ed4c8c 103 int LinkedList::GetSize()
Netaphous 53:abb161ed4c8c 104 {
Netaphous 53:abb161ed4c8c 105 return currentSize;
Netaphous 53:abb161ed4c8c 106 }