Calculates azimuth and elevation of a satellite dish based on its longitude, latitude and selected satellite.

Dependencies:   PinDetect TextLCD mbed MODGPS

Committer:
BartJanssens
Date:
Thu Mar 29 09:26:14 2012 +0000
Revision:
0:fe8decc6a938

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
BartJanssens 0:fe8decc6a938 1
BartJanssens 0:fe8decc6a938 2 /* A circular double linked list
BartJanssens 0:fe8decc6a938 3 *
BartJanssens 0:fe8decc6a938 4 * Copyright (c) 2012 Bart Janssens
BartJanssens 0:fe8decc6a938 5 *
BartJanssens 0:fe8decc6a938 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
BartJanssens 0:fe8decc6a938 7 * of this software and associated documentation files (the "Software"), to deal
BartJanssens 0:fe8decc6a938 8 * in the Software without restriction, including without limitation the rights
BartJanssens 0:fe8decc6a938 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
BartJanssens 0:fe8decc6a938 10 * copies of the Software, and to permit persons to whom the Software is
BartJanssens 0:fe8decc6a938 11 * furnished to do so, subject to the following conditions:
BartJanssens 0:fe8decc6a938 12 *
BartJanssens 0:fe8decc6a938 13 * The above copyright notice and this permission notice shall be included in
BartJanssens 0:fe8decc6a938 14 * all copies or substantial portions of the Software.
BartJanssens 0:fe8decc6a938 15 *
BartJanssens 0:fe8decc6a938 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
BartJanssens 0:fe8decc6a938 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
BartJanssens 0:fe8decc6a938 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
BartJanssens 0:fe8decc6a938 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
BartJanssens 0:fe8decc6a938 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
BartJanssens 0:fe8decc6a938 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
BartJanssens 0:fe8decc6a938 22 * THE SOFTWARE.
BartJanssens 0:fe8decc6a938 23 */
BartJanssens 0:fe8decc6a938 24 template <typename T>
BartJanssens 0:fe8decc6a938 25 class Node
BartJanssens 0:fe8decc6a938 26 {
BartJanssens 0:fe8decc6a938 27 public:
BartJanssens 0:fe8decc6a938 28 Node(T data) : data(data), next(NULL) {}
BartJanssens 0:fe8decc6a938 29 //private:
BartJanssens 0:fe8decc6a938 30 Node *next;
BartJanssens 0:fe8decc6a938 31 Node *prev;
BartJanssens 0:fe8decc6a938 32 T data;
BartJanssens 0:fe8decc6a938 33 };
BartJanssens 0:fe8decc6a938 34
BartJanssens 0:fe8decc6a938 35 template <typename T>
BartJanssens 0:fe8decc6a938 36 class CircularLinkedList
BartJanssens 0:fe8decc6a938 37 {
BartJanssens 0:fe8decc6a938 38 public:
BartJanssens 0:fe8decc6a938 39 CircularLinkedList() : head(NULL),size(0) {} //constructor
BartJanssens 0:fe8decc6a938 40 ~CircularLinkedList(); // decunstructor
BartJanssens 0:fe8decc6a938 41 bool isEmpty() { return (head == NULL);} // is list Empty ?
BartJanssens 0:fe8decc6a938 42 void moveForward(); // move cursor forward
BartJanssens 0:fe8decc6a938 43 void moveBackward(); // move cursor backward
BartJanssens 0:fe8decc6a938 44 void toHead(); // move cursor to head
BartJanssens 0:fe8decc6a938 45 T * getNode();
BartJanssens 0:fe8decc6a938 46 void addNode(T data);
BartJanssens 0:fe8decc6a938 47 void deleteNode(T data);
BartJanssens 0:fe8decc6a938 48 int getSize();
BartJanssens 0:fe8decc6a938 49 private:
BartJanssens 0:fe8decc6a938 50 Node<T> *head;
BartJanssens 0:fe8decc6a938 51 Node<T> *cursor;
BartJanssens 0:fe8decc6a938 52 int size;
BartJanssens 0:fe8decc6a938 53 };
BartJanssens 0:fe8decc6a938 54
BartJanssens 0:fe8decc6a938 55 template <typename T>
BartJanssens 0:fe8decc6a938 56 CircularLinkedList<T>::~CircularLinkedList()
BartJanssens 0:fe8decc6a938 57 {
BartJanssens 0:fe8decc6a938 58 if (!isEmpty()) {
BartJanssens 0:fe8decc6a938 59 Node<T> *tmp = head;
BartJanssens 0:fe8decc6a938 60 while (tmp->next != head) {
BartJanssens 0:fe8decc6a938 61 Node<T> *t = tmp;
BartJanssens 0:fe8decc6a938 62 tmp = tmp->next;
BartJanssens 0:fe8decc6a938 63 delete(t);
BartJanssens 0:fe8decc6a938 64 }
BartJanssens 0:fe8decc6a938 65 delete tmp;
BartJanssens 0:fe8decc6a938 66 head = NULL;
BartJanssens 0:fe8decc6a938 67 }
BartJanssens 0:fe8decc6a938 68 }
BartJanssens 0:fe8decc6a938 69
BartJanssens 0:fe8decc6a938 70
BartJanssens 0:fe8decc6a938 71
BartJanssens 0:fe8decc6a938 72 template <typename T>
BartJanssens 0:fe8decc6a938 73 T * CircularLinkedList<T>::getNode()
BartJanssens 0:fe8decc6a938 74 {
BartJanssens 0:fe8decc6a938 75 return &(cursor->data);
BartJanssens 0:fe8decc6a938 76 }
BartJanssens 0:fe8decc6a938 77
BartJanssens 0:fe8decc6a938 78 template <typename T>
BartJanssens 0:fe8decc6a938 79 void CircularLinkedList<T>::addNode(T data)
BartJanssens 0:fe8decc6a938 80 {
BartJanssens 0:fe8decc6a938 81 Node<T> * t = new Node<T>(data);
BartJanssens 0:fe8decc6a938 82
BartJanssens 0:fe8decc6a938 83 if (isEmpty())
BartJanssens 0:fe8decc6a938 84 {
BartJanssens 0:fe8decc6a938 85 t->next = t;
BartJanssens 0:fe8decc6a938 86 t->prev = t;
BartJanssens 0:fe8decc6a938 87 head = t;
BartJanssens 0:fe8decc6a938 88 size++;
BartJanssens 0:fe8decc6a938 89 cursor = head;
BartJanssens 0:fe8decc6a938 90 return;
BartJanssens 0:fe8decc6a938 91 }
BartJanssens 0:fe8decc6a938 92
BartJanssens 0:fe8decc6a938 93 Node<T> *tmp = head;
BartJanssens 0:fe8decc6a938 94 while (tmp->next != head)
BartJanssens 0:fe8decc6a938 95 {
BartJanssens 0:fe8decc6a938 96 tmp = tmp->next;
BartJanssens 0:fe8decc6a938 97 }
BartJanssens 0:fe8decc6a938 98
BartJanssens 0:fe8decc6a938 99 tmp->next = t;
BartJanssens 0:fe8decc6a938 100 t->next = head;
BartJanssens 0:fe8decc6a938 101 t->prev = tmp;
BartJanssens 0:fe8decc6a938 102 head->prev = t;
BartJanssens 0:fe8decc6a938 103 size++;
BartJanssens 0:fe8decc6a938 104 }
BartJanssens 0:fe8decc6a938 105
BartJanssens 0:fe8decc6a938 106 template <typename T>
BartJanssens 0:fe8decc6a938 107 void CircularLinkedList<T>::deleteNode(T data)
BartJanssens 0:fe8decc6a938 108 {
BartJanssens 0:fe8decc6a938 109 Node<T> *tmp = head;
BartJanssens 0:fe8decc6a938 110 Node<T> *prev = NULL;
BartJanssens 0:fe8decc6a938 111 while (tmp->next != head)
BartJanssens 0:fe8decc6a938 112 {
BartJanssens 0:fe8decc6a938 113 if (tmp->data == data) break;
BartJanssens 0:fe8decc6a938 114 prev = tmp;
BartJanssens 0:fe8decc6a938 115 tmp = tmp->next;
BartJanssens 0:fe8decc6a938 116 }
BartJanssens 0:fe8decc6a938 117
BartJanssens 0:fe8decc6a938 118 if (tmp == head)
BartJanssens 0:fe8decc6a938 119 {
BartJanssens 0:fe8decc6a938 120 while (tmp->next != head)
BartJanssens 0:fe8decc6a938 121 {
BartJanssens 0:fe8decc6a938 122 tmp = tmp->next;
BartJanssens 0:fe8decc6a938 123 }
BartJanssens 0:fe8decc6a938 124 tmp->next = head->next;
BartJanssens 0:fe8decc6a938 125 head->next->prev = tmp
BartJanssens 0:fe8decc6a938 126 delete head;
BartJanssens 0:fe8decc6a938 127 size--;
BartJanssens 0:fe8decc6a938 128 head = tmp->next;
BartJanssens 0:fe8decc6a938 129 }
BartJanssens 0:fe8decc6a938 130 else
BartJanssens 0:fe8decc6a938 131 {
BartJanssens 0:fe8decc6a938 132 prev->next = tmp->next;
BartJanssens 0:fe8decc6a938 133 tmp->next->prev = prev;
BartJanssens 0:fe8decc6a938 134 delete tmp;
BartJanssens 0:fe8decc6a938 135 size--;
BartJanssens 0:fe8decc6a938 136 }
BartJanssens 0:fe8decc6a938 137 }
BartJanssens 0:fe8decc6a938 138
BartJanssens 0:fe8decc6a938 139 template <typename T>
BartJanssens 0:fe8decc6a938 140 void CircularLinkedList<T>::moveForward()
BartJanssens 0:fe8decc6a938 141 {
BartJanssens 0:fe8decc6a938 142 if (!isEmpty()) cursor = cursor->next;
BartJanssens 0:fe8decc6a938 143 }
BartJanssens 0:fe8decc6a938 144
BartJanssens 0:fe8decc6a938 145 template <typename T>
BartJanssens 0:fe8decc6a938 146 void CircularLinkedList<T>::moveBackward()
BartJanssens 0:fe8decc6a938 147 {
BartJanssens 0:fe8decc6a938 148 if (!isEmpty()) cursor = cursor->prev;
BartJanssens 0:fe8decc6a938 149 }
BartJanssens 0:fe8decc6a938 150
BartJanssens 0:fe8decc6a938 151 template <typename T>
BartJanssens 0:fe8decc6a938 152 void CircularLinkedList<T>::toHead()
BartJanssens 0:fe8decc6a938 153 {
BartJanssens 0:fe8decc6a938 154 cursor = head;
BartJanssens 0:fe8decc6a938 155 }
BartJanssens 0:fe8decc6a938 156
BartJanssens 0:fe8decc6a938 157 template <typename T>
BartJanssens 0:fe8decc6a938 158 int CircularLinkedList<T>::getSize()
BartJanssens 0:fe8decc6a938 159 {
BartJanssens 0:fe8decc6a938 160 return size;
BartJanssens 0:fe8decc6a938 161 }