Fork of Sam Grove's Linked list library OS6 compliant.

Dependents:   DS1820

Committer:
star297
Date:
Tue Dec 29 13:07:51 2020 +0000
Revision:
0:27649dfdde4c
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
star297 0:27649dfdde4c 1
star297 0:27649dfdde4c 2 #include "LinkedList2.h"
star297 0:27649dfdde4c 3
star297 0:27649dfdde4c 4 template<class retT>
star297 0:27649dfdde4c 5 LinkedList2<retT>::LinkedList2()
star297 0:27649dfdde4c 6 {
star297 0:27649dfdde4c 7 _head = 0;
star297 0:27649dfdde4c 8 return;
star297 0:27649dfdde4c 9 }
star297 0:27649dfdde4c 10
star297 0:27649dfdde4c 11 template<class retT>
star297 0:27649dfdde4c 12 LinkedList2<retT>::~LinkedList2()
star297 0:27649dfdde4c 13 {
star297 0:27649dfdde4c 14 while(remove(1) != NULL);
star297 0:27649dfdde4c 15 return;
star297 0:27649dfdde4c 16 }
star297 0:27649dfdde4c 17
star297 0:27649dfdde4c 18 template<class retT>
star297 0:27649dfdde4c 19 retT *LinkedList2<retT>::push(void *data)
star297 0:27649dfdde4c 20 {
star297 0:27649dfdde4c 21 retT *new_node = new retT [1];
star297 0:27649dfdde4c 22 if (0 == new_node)
star297 0:27649dfdde4c 23 {
star297 0:27649dfdde4c 24 error("Memory allocation failed\n");
star297 0:27649dfdde4c 25 }
star297 0:27649dfdde4c 26 new_node->next = _head;
star297 0:27649dfdde4c 27 new_node->data = data;
star297 0:27649dfdde4c 28 _head = new_node;
star297 0:27649dfdde4c 29 return _head;
star297 0:27649dfdde4c 30 }
star297 0:27649dfdde4c 31
star297 0:27649dfdde4c 32 template<class retT>
star297 0:27649dfdde4c 33 retT *LinkedList2<retT>::append(void *data)
star297 0:27649dfdde4c 34 {
star297 0:27649dfdde4c 35 retT *current = _head;
star297 0:27649dfdde4c 36 retT *new_node = new retT [1];
star297 0:27649dfdde4c 37 if (0 == new_node)
star297 0:27649dfdde4c 38 {
star297 0:27649dfdde4c 39 error("Memory allocation failed\n");
star297 0:27649dfdde4c 40 }
star297 0:27649dfdde4c 41 new_node->data = data;
star297 0:27649dfdde4c 42 new_node->next = 0;
star297 0:27649dfdde4c 43 if (0 == current)
star297 0:27649dfdde4c 44 {
star297 0:27649dfdde4c 45 _head = new_node;
star297 0:27649dfdde4c 46 return _head;
star297 0:27649dfdde4c 47 }
star297 0:27649dfdde4c 48 else
star297 0:27649dfdde4c 49 {
star297 0:27649dfdde4c 50 while (current->next != 0)
star297 0:27649dfdde4c 51 {
star297 0:27649dfdde4c 52 current = current->next;
star297 0:27649dfdde4c 53 }
star297 0:27649dfdde4c 54 current->next = new_node;
star297 0:27649dfdde4c 55 }
star297 0:27649dfdde4c 56
star297 0:27649dfdde4c 57 return current->next;
star297 0:27649dfdde4c 58 }
star297 0:27649dfdde4c 59
star297 0:27649dfdde4c 60 template<class retT>
star297 0:27649dfdde4c 61 retT *LinkedList2<retT>::remove(uint32_t loc)
star297 0:27649dfdde4c 62 {
star297 0:27649dfdde4c 63 retT *current = _head;
star297 0:27649dfdde4c 64 retT *prev = 0;
star297 0:27649dfdde4c 65 if ((loc <= length()) && (loc > 0))
star297 0:27649dfdde4c 66 {
star297 0:27649dfdde4c 67 if (1 == loc)
star297 0:27649dfdde4c 68 {
star297 0:27649dfdde4c 69 _head = current->next;
star297 0:27649dfdde4c 70 delete [] current;
star297 0:27649dfdde4c 71 }
star297 0:27649dfdde4c 72 else
star297 0:27649dfdde4c 73 {
star297 0:27649dfdde4c 74 for (uint32_t i=2; i<=loc; ++i)
star297 0:27649dfdde4c 75 {
star297 0:27649dfdde4c 76 prev = current;
star297 0:27649dfdde4c 77 current = current->next;
star297 0:27649dfdde4c 78 }
star297 0:27649dfdde4c 79 prev->next = current->next;
star297 0:27649dfdde4c 80 delete [] current;
star297 0:27649dfdde4c 81 }
star297 0:27649dfdde4c 82 }
star297 0:27649dfdde4c 83
star297 0:27649dfdde4c 84 return _head;
star297 0:27649dfdde4c 85 }
star297 0:27649dfdde4c 86
star297 0:27649dfdde4c 87 template<class retT>
star297 0:27649dfdde4c 88 retT *LinkedList2<retT>::pop(uint32_t loc)
star297 0:27649dfdde4c 89 {
star297 0:27649dfdde4c 90 retT *current = _head;
star297 0:27649dfdde4c 91 if ((loc > length()) || (loc == 0))
star297 0:27649dfdde4c 92 {
star297 0:27649dfdde4c 93 return 0;
star297 0:27649dfdde4c 94 }
star297 0:27649dfdde4c 95 for (uint32_t i=2; i<=loc; ++i)
star297 0:27649dfdde4c 96 {
star297 0:27649dfdde4c 97 current = current->next;
star297 0:27649dfdde4c 98 }
star297 0:27649dfdde4c 99 return current;
star297 0:27649dfdde4c 100 }
star297 0:27649dfdde4c 101
star297 0:27649dfdde4c 102 template<class retT>
star297 0:27649dfdde4c 103 uint32_t LinkedList2<retT>::length(void)
star297 0:27649dfdde4c 104 {
star297 0:27649dfdde4c 105 int32_t count = 0;
star297 0:27649dfdde4c 106 retT *current = _head;
star297 0:27649dfdde4c 107 while (current != 0)
star297 0:27649dfdde4c 108 {
star297 0:27649dfdde4c 109 ++count;
star297 0:27649dfdde4c 110 current = current->next;
star297 0:27649dfdde4c 111 }
star297 0:27649dfdde4c 112 return count;
star297 0:27649dfdde4c 113 }
star297 0:27649dfdde4c 114 template class LinkedList2<node>;