Initial commit of code for dopelib, and ch 1, 2, and 12
This commit is contained in:
56
libs/dope/linkedlist.cpp
Normal file
56
libs/dope/linkedlist.cpp
Normal file
@@ -0,0 +1,56 @@
|
||||
#include "linkedlist.hpp"
|
||||
|
||||
DopeLinkedList::DopeLinkedList(){
|
||||
for(int i = 0; i < MAX_DOPE_NODES; ++i){
|
||||
nodes[i].Reset();
|
||||
}
|
||||
head = &nodes[0];
|
||||
}
|
||||
|
||||
DopeNode::DopeNode(int init_data){
|
||||
data = init_data;
|
||||
next = NULL;
|
||||
state = NodeState::UnInitialized;
|
||||
}
|
||||
|
||||
DopeNode::DopeNode(){
|
||||
Reset();
|
||||
}
|
||||
|
||||
void DopeNode::Reset(){
|
||||
this->data = 0;
|
||||
this->next = NULL;
|
||||
this->state = NodeState::UnInitialized;
|
||||
}
|
||||
|
||||
void DopeLinkedList::AppendData(int init_data){
|
||||
DopeNode* new_node = head;
|
||||
DopeNode* node = head;
|
||||
// Find next free slot and allocate it for the new node
|
||||
for(int i=0; i < MAX_DOPE_NODES; ++i){
|
||||
if(nodes[i].GetState() == NodeState::UnInitialized){
|
||||
new_node = &nodes[i];
|
||||
new_node->SetNext(NULL);
|
||||
new_node->SetState(NodeState::Initialized);
|
||||
new_node->SetData(init_data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(head == new_node){
|
||||
// Just set first node, nothing else to do
|
||||
return;
|
||||
}
|
||||
|
||||
// Find last node in linked list
|
||||
if ((head->GetNext() == NULL) && (head->GetState() == NodeState::Initialized)){
|
||||
// Special case, only one node so far
|
||||
head->SetNext(new_node);
|
||||
} else {
|
||||
while(node->GetNext() != NULL){
|
||||
node = node->GetNext();
|
||||
}
|
||||
node->SetNext(new_node);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user