Voili voilou

Dependencies:   RoboClaw StepperMotor mbed

Fork of Robot2016_2-0 by ARES

Committer:
IceTeam
Date:
Wed Apr 20 13:13:37 2016 +0000
Revision:
46:8eae88c45a78
Mise en static;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IceTeam 46:8eae88c45a78 1 #ifndef VECTOR_H
IceTeam 46:8eae88c45a78 2 #define VECTOR_H
IceTeam 46:8eae88c45a78 3
IceTeam 46:8eae88c45a78 4 template<class T>
IceTeam 46:8eae88c45a78 5 class elem {
IceTeam 46:8eae88c45a78 6 public:
IceTeam 46:8eae88c45a78 7 elem () { ; }
IceTeam 46:8eae88c45a78 8 elem (T nval) : val (nval) { next = NULL; prev = NULL; }
IceTeam 46:8eae88c45a78 9 elem (T nval, elem* nprev) : val (nval) { next = NULL; prev = nprev; }
IceTeam 46:8eae88c45a78 10
IceTeam 46:8eae88c45a78 11 elem<T> * gNext () { return next; }
IceTeam 46:8eae88c45a78 12 elem<T> * gprev () { return prev; }
IceTeam 46:8eae88c45a78 13 T& getVal () { return val; }
IceTeam 46:8eae88c45a78 14
IceTeam 46:8eae88c45a78 15 void sNext (elem<T> * nnext) { next = nnext; }
IceTeam 46:8eae88c45a78 16 void sPrev (elem<T> * nprev) { prev = nprev; }
IceTeam 46:8eae88c45a78 17
IceTeam 46:8eae88c45a78 18 private:
IceTeam 46:8eae88c45a78 19 T val;
IceTeam 46:8eae88c45a78 20 elem<T> * next;
IceTeam 46:8eae88c45a78 21 elem<T> * prev;
IceTeam 46:8eae88c45a78 22 };
IceTeam 46:8eae88c45a78 23
IceTeam 46:8eae88c45a78 24 template<class T>
IceTeam 46:8eae88c45a78 25 class nVector {
IceTeam 46:8eae88c45a78 26 public:
IceTeam 46:8eae88c45a78 27 nVector () {
IceTeam 46:8eae88c45a78 28 first = NULL;
IceTeam 46:8eae88c45a78 29 curr = NULL;
IceTeam 46:8eae88c45a78 30 init = false;
IceTeam 46:8eae88c45a78 31 VectorSize = 0;
IceTeam 46:8eae88c45a78 32 }
IceTeam 46:8eae88c45a78 33
IceTeam 46:8eae88c45a78 34 void push_back (T val) {
IceTeam 46:8eae88c45a78 35 if (init) {
IceTeam 46:8eae88c45a78 36 setCurrLast ();
IceTeam 46:8eae88c45a78 37 elem<T> * n = new elem<T> (val, curr);
IceTeam 46:8eae88c45a78 38 curr->sNext (n);
IceTeam 46:8eae88c45a78 39 n->sPrev (curr);
IceTeam 46:8eae88c45a78 40 VectorSize++;
IceTeam 46:8eae88c45a78 41 }
IceTeam 46:8eae88c45a78 42 else {
IceTeam 46:8eae88c45a78 43 init = true;
IceTeam 46:8eae88c45a78 44 first = new elem<T> (val);
IceTeam 46:8eae88c45a78 45 VectorSize = 1;
IceTeam 46:8eae88c45a78 46 }
IceTeam 46:8eae88c45a78 47 }
IceTeam 46:8eae88c45a78 48
IceTeam 46:8eae88c45a78 49 void push_first (T val) {
IceTeam 46:8eae88c45a78 50 if (init) {
IceTeam 46:8eae88c45a78 51 curr = first;
IceTeam 46:8eae88c45a78 52 elem<T> * n = new elem<T> (val);
IceTeam 46:8eae88c45a78 53 curr->sPrev (n);
IceTeam 46:8eae88c45a78 54 n->sNext (curr);
IceTeam 46:8eae88c45a78 55 first = n;
IceTeam 46:8eae88c45a78 56 VectorSize++;
IceTeam 46:8eae88c45a78 57 }
IceTeam 46:8eae88c45a78 58 else {
IceTeam 46:8eae88c45a78 59 init = true;
IceTeam 46:8eae88c45a78 60 first = new elem<T> (val);
IceTeam 46:8eae88c45a78 61 VectorSize = 1;
IceTeam 46:8eae88c45a78 62 }
IceTeam 46:8eae88c45a78 63 }
IceTeam 46:8eae88c45a78 64
IceTeam 46:8eae88c45a78 65 bool erase (int index) {
IceTeam 46:8eae88c45a78 66 bool worked = true;
IceTeam 46:8eae88c45a78 67
IceTeam 46:8eae88c45a78 68 if (init) {
IceTeam 46:8eae88c45a78 69 if (index > 0 && index < VectorSize) {
IceTeam 46:8eae88c45a78 70 if (setCurrIndex (index)) {
IceTeam 46:8eae88c45a78 71 elem<T>* p = curr->gprev ();
IceTeam 46:8eae88c45a78 72 if (p != NULL)
IceTeam 46:8eae88c45a78 73 p->sNext (curr->gNext ());
IceTeam 46:8eae88c45a78 74
IceTeam 46:8eae88c45a78 75 elem<T>* n = curr->gNext ();
IceTeam 46:8eae88c45a78 76 if (n != NULL)
IceTeam 46:8eae88c45a78 77 n->sPrev (p);
IceTeam 46:8eae88c45a78 78
IceTeam 46:8eae88c45a78 79 delete curr;
IceTeam 46:8eae88c45a78 80
IceTeam 46:8eae88c45a78 81 VectorSize--;
IceTeam 46:8eae88c45a78 82 if (VectorSize <= 0) {
IceTeam 46:8eae88c45a78 83 init = false;
IceTeam 46:8eae88c45a78 84 }
IceTeam 46:8eae88c45a78 85 }
IceTeam 46:8eae88c45a78 86 }
IceTeam 46:8eae88c45a78 87 else if (index == 0 && index < VectorSize) {
IceTeam 46:8eae88c45a78 88 elem<T> * n = first->gNext ();
IceTeam 46:8eae88c45a78 89
IceTeam 46:8eae88c45a78 90 if (n != NULL) {
IceTeam 46:8eae88c45a78 91 n->sPrev (NULL);
IceTeam 46:8eae88c45a78 92 delete first;
IceTeam 46:8eae88c45a78 93 first = n;
IceTeam 46:8eae88c45a78 94 VectorSize--;
IceTeam 46:8eae88c45a78 95 }
IceTeam 46:8eae88c45a78 96 else {
IceTeam 46:8eae88c45a78 97 init = false;
IceTeam 46:8eae88c45a78 98 delete first;
IceTeam 46:8eae88c45a78 99 VectorSize = 0;
IceTeam 46:8eae88c45a78 100 }
IceTeam 46:8eae88c45a78 101 }
IceTeam 46:8eae88c45a78 102 else {
IceTeam 46:8eae88c45a78 103 worked = false;
IceTeam 46:8eae88c45a78 104 }
IceTeam 46:8eae88c45a78 105 }
IceTeam 46:8eae88c45a78 106 else {
IceTeam 46:8eae88c45a78 107 worked = false;
IceTeam 46:8eae88c45a78 108 }
IceTeam 46:8eae88c45a78 109 return worked;
IceTeam 46:8eae88c45a78 110 }
IceTeam 46:8eae88c45a78 111
IceTeam 46:8eae88c45a78 112 void concatenate (nVector<T>& t) {
IceTeam 46:8eae88c45a78 113 for (int i = 0; i < t.size (); ++i)
IceTeam 46:8eae88c45a78 114 push_back (t[i]);
IceTeam 46:8eae88c45a78 115 }
IceTeam 46:8eae88c45a78 116
IceTeam 46:8eae88c45a78 117 int size () { return VectorSize; }
IceTeam 46:8eae88c45a78 118 bool empty () { return !init; }
IceTeam 46:8eae88c45a78 119
IceTeam 46:8eae88c45a78 120 T& operator[](int ind) {
IceTeam 46:8eae88c45a78 121 setCurrIndex (ind);
IceTeam 46:8eae88c45a78 122 return curr->getVal ();
IceTeam 46:8eae88c45a78 123 }
IceTeam 46:8eae88c45a78 124
IceTeam 46:8eae88c45a78 125 void show () {
IceTeam 46:8eae88c45a78 126 for (int i = 0; i < VectorSize; ++i) {
IceTeam 46:8eae88c45a78 127 setCurrIndex (i);
IceTeam 46:8eae88c45a78 128 std::cout << "(" << curr << ") Element " << i + 1 << " pere : " << curr->gprev() << ", fils " << curr->gNext () << std::endl;
IceTeam 46:8eae88c45a78 129 }
IceTeam 46:8eae88c45a78 130 }
IceTeam 46:8eae88c45a78 131
IceTeam 46:8eae88c45a78 132 void clear () {
IceTeam 46:8eae88c45a78 133 while (VectorSize != 0) {
IceTeam 46:8eae88c45a78 134 erase (0);
IceTeam 46:8eae88c45a78 135 }
IceTeam 46:8eae88c45a78 136 }
IceTeam 46:8eae88c45a78 137 private:
IceTeam 46:8eae88c45a78 138 void setCurrLast () {
IceTeam 46:8eae88c45a78 139 if (init) {
IceTeam 46:8eae88c45a78 140 curr = first;
IceTeam 46:8eae88c45a78 141 while (curr->gNext () != NULL) {
IceTeam 46:8eae88c45a78 142 curr = curr->gNext ();
IceTeam 46:8eae88c45a78 143 }
IceTeam 46:8eae88c45a78 144 }
IceTeam 46:8eae88c45a78 145 }
IceTeam 46:8eae88c45a78 146
IceTeam 46:8eae88c45a78 147 bool setCurrIndex (int index) {
IceTeam 46:8eae88c45a78 148 curr = first;
IceTeam 46:8eae88c45a78 149 bool worked = true;
IceTeam 46:8eae88c45a78 150
IceTeam 46:8eae88c45a78 151 for (int i = 0; i < index; ++i) {
IceTeam 46:8eae88c45a78 152 if (curr->gNext () != NULL)
IceTeam 46:8eae88c45a78 153 curr = curr->gNext ();
IceTeam 46:8eae88c45a78 154 else {
IceTeam 46:8eae88c45a78 155 worked = false;
IceTeam 46:8eae88c45a78 156 break;
IceTeam 46:8eae88c45a78 157 }
IceTeam 46:8eae88c45a78 158 }
IceTeam 46:8eae88c45a78 159 return worked;
IceTeam 46:8eae88c45a78 160 }
IceTeam 46:8eae88c45a78 161
IceTeam 46:8eae88c45a78 162 elem<T>* first;
IceTeam 46:8eae88c45a78 163 elem<T>* curr;
IceTeam 46:8eae88c45a78 164
IceTeam 46:8eae88c45a78 165 bool init;
IceTeam 46:8eae88c45a78 166 int VectorSize;
IceTeam 46:8eae88c45a78 167 };
IceTeam 46:8eae88c45a78 168 #endif