added gy80 dcm

Dependencies:   mbed DCM_AHRS_GY80 PID MMA8451Q

Fork of quadCommand by Greg Abdo

Committer:
oprospero
Date:
Sun Jul 28 21:46:54 2013 +0000
Revision:
64:2b6399fe00f6
Parent:
0:8681037b9a18
working state;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gabdo 0:8681037b9a18 1 /*************************** queue.cpp ***************************************/
gabdo 0:8681037b9a18 2 /* */
gabdo 0:8681037b9a18 3 /* Authers: Oanh Tran, Ling Lei, Sihao Xie, Greg Abdo. */
gabdo 0:8681037b9a18 4 /* Date: February 23, 2013 */
gabdo 0:8681037b9a18 5 /* Version: 1.0 */
gabdo 0:8681037b9a18 6 /* */
gabdo 0:8681037b9a18 7 /* The queue is used to stack StructureItem in order with a FILO */
gabdo 0:8681037b9a18 8 /*arrangement. */
gabdo 0:8681037b9a18 9 /*****************************************************************************/
gabdo 0:8681037b9a18 10
gabdo 0:8681037b9a18 11 #include "queue.h"
gabdo 0:8681037b9a18 12
gabdo 0:8681037b9a18 13 /***************************** constructor ***********************************/
gabdo 0:8681037b9a18 14 /* Description: */
gabdo 0:8681037b9a18 15 /*****************************************************************************/
gabdo 0:8681037b9a18 16
gabdo 0:8681037b9a18 17 queue::queue()
gabdo 0:8681037b9a18 18 {
gabdo 0:8681037b9a18 19 front = NULL; // Set front to NULL at the start.
gabdo 0:8681037b9a18 20 }
gabdo 0:8681037b9a18 21
gabdo 0:8681037b9a18 22 /******************************* distructor **********************************/
gabdo 0:8681037b9a18 23 /* Description: */
gabdo 0:8681037b9a18 24 /*****************************************************************************/
gabdo 0:8681037b9a18 25
gabdo 0:8681037b9a18 26 queue::~queue()
gabdo 0:8681037b9a18 27 {
gabdo 0:8681037b9a18 28 clear(); // Clear the entire queue.
gabdo 0:8681037b9a18 29 }
gabdo 0:8681037b9a18 30
gabdo 0:8681037b9a18 31 /*****************************************************************************/
gabdo 0:8681037b9a18 32 /* Description: */
gabdo 0:8681037b9a18 33 /* Accepts: */
gabdo 0:8681037b9a18 34 /* Returns: */
gabdo 0:8681037b9a18 35 /*****************************************************************************/
gabdo 0:8681037b9a18 36
gabdo 0:8681037b9a18 37 bool queue::isEmpty()
gabdo 0:8681037b9a18 38 {
gabdo 0:8681037b9a18 39 // Is the queue empty?
gabdo 0:8681037b9a18 40 if( front == NULL ) // Check the front pointer.
gabdo 0:8681037b9a18 41 return true; // Queue is empty, return true.
gabdo 0:8681037b9a18 42
gabdo 0:8681037b9a18 43 return false; // There is atleast one item, not empty.
gabdo 0:8681037b9a18 44 }
gabdo 0:8681037b9a18 45
gabdo 0:8681037b9a18 46 /*****************************************************************************/
gabdo 0:8681037b9a18 47 /* Description: */
gabdo 0:8681037b9a18 48 /* Accepts: */
gabdo 0:8681037b9a18 49 /* Returns: */
gabdo 0:8681037b9a18 50 /*****************************************************************************/
gabdo 0:8681037b9a18 51
gabdo 0:8681037b9a18 52 void queue::clear()
gabdo 0:8681037b9a18 53 {
gabdo 0:8681037b9a18 54 // Is the list already empty?
gabdo 0:8681037b9a18 55 if( isEmpty() ) // Check for an empty list.
gabdo 0:8681037b9a18 56 return; // List is empty, don't need to do anything.
gabdo 0:8681037b9a18 57
gabdo 0:8681037b9a18 58 queueNode * current = front; // Create node to help step through list.
gabdo 0:8681037b9a18 59 queueNode * placeHold = front; // Create node to keep place of delete.
gabdo 0:8681037b9a18 60
gabdo 0:8681037b9a18 61 // As long as were not at the end, keep stepping to the next node.
gabdo 0:8681037b9a18 62 while( current != NULL)
gabdo 0:8681037b9a18 63 {
gabdo 0:8681037b9a18 64 placeHold = current->next; // Hold where we have to go.
gabdo 0:8681037b9a18 65 delete current; // Delete the node.
gabdo 0:8681037b9a18 66 current = placeHold; // Set current to the next node.
gabdo 0:8681037b9a18 67 }
gabdo 0:8681037b9a18 68
gabdo 0:8681037b9a18 69 front = NULL; // Reset the front to NULL;
gabdo 0:8681037b9a18 70 length = 0;
gabdo 0:8681037b9a18 71 }
gabdo 0:8681037b9a18 72
gabdo 0:8681037b9a18 73 /*****************************************************************************/
gabdo 0:8681037b9a18 74 /* Description: */
gabdo 0:8681037b9a18 75 /* Accepts: */
gabdo 0:8681037b9a18 76 /* Returns: */
gabdo 0:8681037b9a18 77 /*****************************************************************************/
gabdo 0:8681037b9a18 78
gabdo 0:8681037b9a18 79 void queue::add( short * item )
gabdo 0:8681037b9a18 80 {
gabdo 0:8681037b9a18 81 // Were we passed an invalid object somehow?
gabdo 0:8681037b9a18 82 if( item == NULL ) // Check for NULL
gabdo 0:8681037b9a18 83 return; // If so, return.
gabdo 0:8681037b9a18 84
gabdo 0:8681037b9a18 85 if( queueLength() > MAXQUEUELENGTH )
gabdo 0:8681037b9a18 86 clear();
gabdo 0:8681037b9a18 87
gabdo 0:8681037b9a18 88 queueNode * newNode = new queueNode( item ); // Create the new node.
gabdo 0:8681037b9a18 89
gabdo 0:8681037b9a18 90 if( isEmpty() )
gabdo 0:8681037b9a18 91 front = newNode; // Set front to the new node.
gabdo 0:8681037b9a18 92
gabdo 0:8681037b9a18 93 else
gabdo 0:8681037b9a18 94 {
gabdo 0:8681037b9a18 95 queueNode *temp = front;
gabdo 0:8681037b9a18 96 while( temp->next != NULL )
gabdo 0:8681037b9a18 97 temp = temp->next;
gabdo 0:8681037b9a18 98
gabdo 0:8681037b9a18 99 temp->next = newNode;
gabdo 0:8681037b9a18 100 }
gabdo 0:8681037b9a18 101 length++;
gabdo 0:8681037b9a18 102 }
gabdo 0:8681037b9a18 103
gabdo 0:8681037b9a18 104 /*****************************************************************************/
gabdo 0:8681037b9a18 105 /* Description: */
gabdo 0:8681037b9a18 106 /* Accepts: */
gabdo 0:8681037b9a18 107 /* Returns: */
gabdo 0:8681037b9a18 108 /*****************************************************************************/
gabdo 0:8681037b9a18 109
gabdo 0:8681037b9a18 110 short * queue::pop()
gabdo 0:8681037b9a18 111 {
gabdo 0:8681037b9a18 112 // Is the list already empty?
gabdo 0:8681037b9a18 113 if( isEmpty() ) // Check for an empty list.
gabdo 0:8681037b9a18 114 return NULL; // List is empty, don't need to do anything.
gabdo 0:8681037b9a18 115
gabdo 0:8681037b9a18 116 short* dataHold = front->data; // Keep track of what were returning.
gabdo 0:8681037b9a18 117 queueNode * oldNode = front; // Save the old node to be deleted
gabdo 0:8681037b9a18 118 front = front->next; // Set front to next object.
gabdo 0:8681037b9a18 119
gabdo 0:8681037b9a18 120 delete oldNode; // Delete the front node.
gabdo 0:8681037b9a18 121 length--; // Remove one from the length.
gabdo 0:8681037b9a18 122 return dataHold; // return the stuctureItem.
gabdo 0:8681037b9a18 123 }
gabdo 0:8681037b9a18 124
gabdo 0:8681037b9a18 125 /*****************************************************************************/
gabdo 0:8681037b9a18 126 /* Description: */
gabdo 0:8681037b9a18 127 /* Accepts: */
gabdo 0:8681037b9a18 128 /* Returns: */
gabdo 0:8681037b9a18 129 /*****************************************************************************/
gabdo 0:8681037b9a18 130
gabdo 0:8681037b9a18 131 short * queue::peek()
gabdo 0:8681037b9a18 132 {
gabdo 0:8681037b9a18 133 if( front != NULL )
gabdo 0:8681037b9a18 134 return front->data;
gabdo 0:8681037b9a18 135
gabdo 0:8681037b9a18 136 return NULL;
gabdo 0:8681037b9a18 137 }
gabdo 0:8681037b9a18 138
gabdo 0:8681037b9a18 139 /*****************************************************************************/
gabdo 0:8681037b9a18 140 /* Description: */
gabdo 0:8681037b9a18 141 /* Accepts: */
gabdo 0:8681037b9a18 142 /* Returns: */
gabdo 0:8681037b9a18 143 /*****************************************************************************/
gabdo 0:8681037b9a18 144
gabdo 0:8681037b9a18 145 short queue::queueLength()
gabdo 0:8681037b9a18 146 {
gabdo 0:8681037b9a18 147 return length;
gabdo 0:8681037b9a18 148 }