Adeon
Loading...
Searching...
No Matches
list.cpp
Go to the documentation of this file.
1
25#include "utility/list.h"
26
31
32}
33
43ItemList::Item* ItemList::addItem(const char* pId, uint16_t val){
44 if(isIdLenValid(pId) && !isInList(findItem(pId)) && *pId != 0){
45 Item* pItem = new Item(pId, val);
46 if(_pHead == nullptr){
47 _pHead = pItem;
48 _pLast = pItem;
49 pItem->setPointToPrevItem(nullptr);
50 pItem->setPointToNextItem(nullptr);
51 }
52 else{
53 _pLast->setPointToNextItem(pItem);
54 pItem->setPointToPrevItem(_pLast);
55 pItem->setPointToNextItem(nullptr);
56 _pLast = pItem;
57 }
58 _numOfItems++;
59 return pItem;
60 }
61 return nullptr;
62}
63
73 if(pItem != nullptr){
74 if(pItem != _pHead){
75 Item* pPrev = pItem->getPointToPrevItem();
77 Item* pNext = pItem->getPointToNextItem();
78 if(pNext == nullptr){
79 _pLast = pPrev;
80 }
81 else{
83 }
84 }
85 else if(pItem != _pLast){
86 _pHead = pItem->getPointToNextItem();
87 _pHead->setPointToPrevItem(nullptr);
88 }
89 else{
90 deleteHead();
91 }
92 delete[]pItem;
93 _numOfItems--;
94 }
95}
96
103 _pHead = nullptr;
104 _pLast = nullptr;
105}
106
113char* ItemList::editItemId(Item* pItem, const char* pNewId){
114 if(pItem != nullptr){
115 pItem->saveId(pNewId);
116 return pItem->id;
117 }
118 return nullptr;
119}
120
128void ItemList::editItemVal(Item* pItem, uint16_t val){
129 if(pItem != nullptr){
130 pItem->value = val;
131 if(pItem->_pCallback != nullptr){
132 pItem->_pCallback(pItem->value);
133 }
134 }
135}
136
143 if(isIdLenValid(pId) && !isListEmpty()){
144 Item* pItem = _pHead;
145 while(strcmp(pId, pItem->id) != 0){
146 pItem = pItem->getPointToNextItem();
147 if(pItem == nullptr){
148 return nullptr;
149 }
150 }
151 return pItem;
152 }
153 return nullptr;
154}
155
163 return pItem != nullptr;
164}
165
171bool ItemList::isIdLenValid(const char* pId){
172 return strlen(pId) < LIST_ITEM_LENGTH;
173}
174
175bool ItemList::isListEmpty(){
176 return _pHead == nullptr;
177}
178
184 return _numOfItems;
185}
186
191uint16_t ItemList::getItemVal(Item* pItem){
192 if(pItem != nullptr){
193 return pItem->value;
194 }
195 return 0;
196}
197
204 if(Serial && !isListEmpty()){
205 Item* pItem = _pHead;
206 Serial.println(F("*********************"));
207 while(pItem != nullptr){
208 Serial.print(F("LIST ITEM ID: "));
209 Serial.println(pItem->id);
210 Serial.print(F("LIST ITEM VALUE: "));
211 Serial.println(pItem->value);
212 Serial.println();
213 pItem = pItem->getPointToNextItem();
214 }
215 Serial.println(F("*********************"));
216 }
217}
218
224ItemList::Item::Item(const char* pId, uint16_t val){
225 saveId(pId);
226 value = val;
227}
228
234 _pNext = pItem;
235}
236
242 return _pNext;
243}
244
250 _pPrev = pItem;
251}
252
258 return _pPrev;
259}
260
265void ItemList::Item::saveId(const char* pSrc){
266 id = (char*) malloc (sizeof(char) * (strlen(pSrc) + 1));
267 strncpy(id, pSrc, strlen(pSrc));
268 id[strlen(pSrc)] = '\0';
269}
Item * getPointToNextItem()
Get pointer to next object.
Definition: list.cpp:241
void setPointToPrevItem(Item *pItem)
Set pointer to previous object.
Definition: list.cpp:249
void saveId(const char *pSrc)
Save id of an object.
Definition: list.cpp:265
void setPointToNextItem(Item *pItem)
Set pointer to next object.
Definition: list.cpp:233
Item(const char *pId, uint16_t val)
Constructor for nested class Item.
Definition: list.cpp:224
Item * getPointToPrevItem()
Get pointer to next object.
Definition: list.cpp:257
void editItemVal(Item *pItem, uint16_t val)
Edit item value in a list.
Definition: list.cpp:128
bool isIdLenValid(const char *pId)
Check if lingth of id is valid.
Definition: list.cpp:171
bool isInList(Item *pItem)
Check if item is in a list.
Definition: list.cpp:162
void deleteItem(Item *pItem)
Delete item from a list.
Definition: list.cpp:72
Item * findItem(const char *pId)
Find item in a list.
Definition: list.cpp:142
void printData()
Print data from list to serial.
Definition: list.cpp:203
char * editItemId(Item *pItem, const char *pNewId)
Edit item id in a list.
Definition: list.cpp:113
uint16_t getItemVal(Item *pItem)
Get item value.
Definition: list.cpp:191
ItemList()
Empty constructor for the class ItemList.
Definition: list.cpp:30
uint8_t getNumOfItems()
Get number of item in a list.
Definition: list.cpp:183
Item * addItem(const char *pId, uint16_t val)
Add item into a list.
Definition: list.cpp:43
void deleteHead()
Delete head of list.
Definition: list.cpp:102
Library for linked list.