added gy80 dcm
Dependencies: mbed DCM_AHRS_GY80 PID MMA8451Q
Fork of quadCommand by
quadCommand/com/queue/queue.cpp@0:8681037b9a18, 2013-06-09 (annotated)
- Committer:
- gabdo
- Date:
- Sun Jun 09 22:13:59 2013 +0000
- Revision:
- 0:8681037b9a18
quadCommand!
Who changed what in which revision?
User | Revision | Line number | New 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 | } |