Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: RoboClaw StepperMotor mbed
Fork of Robot2016_2-0 by
nVector.h
00001 #ifndef VECTOR_H 00002 #define VECTOR_H 00003 00004 template<class T> 00005 class elem { 00006 public: 00007 elem () { ; } 00008 elem (T nval) : val (nval) { next = NULL; prev = NULL; } 00009 elem (T nval, elem* nprev) : val (nval) { next = NULL; prev = nprev; } 00010 00011 elem<T> * gNext () { return next; } 00012 elem<T> * gprev () { return prev; } 00013 T& getVal () { return val; } 00014 00015 void sNext (elem<T> * nnext) { next = nnext; } 00016 void sPrev (elem<T> * nprev) { prev = nprev; } 00017 00018 private: 00019 T val; 00020 elem<T> * next; 00021 elem<T> * prev; 00022 }; 00023 00024 template<class T> 00025 class nVector { 00026 public: 00027 nVector () { 00028 first = NULL; 00029 curr = NULL; 00030 init = false; 00031 VectorSize = 0; 00032 } 00033 00034 void push_back (T val) { 00035 if (init) { 00036 setCurrLast (); 00037 elem<T> * n = new elem<T> (val, curr); 00038 curr->sNext (n); 00039 n->sPrev (curr); 00040 VectorSize++; 00041 } 00042 else { 00043 init = true; 00044 first = new elem<T> (val); 00045 VectorSize = 1; 00046 } 00047 } 00048 00049 void push_first (T val) { 00050 if (init) { 00051 curr = first; 00052 elem<T> * n = new elem<T> (val); 00053 curr->sPrev (n); 00054 n->sNext (curr); 00055 first = n; 00056 VectorSize++; 00057 } 00058 else { 00059 init = true; 00060 first = new elem<T> (val); 00061 VectorSize = 1; 00062 } 00063 } 00064 00065 bool erase (int index) { 00066 bool worked = true; 00067 00068 if (init) { 00069 if (index > 0 && index < VectorSize) { 00070 if (setCurrIndex (index)) { 00071 elem<T>* p = curr->gprev (); 00072 if (p != NULL) 00073 p->sNext (curr->gNext ()); 00074 00075 elem<T>* n = curr->gNext (); 00076 if (n != NULL) 00077 n->sPrev (p); 00078 00079 delete curr; 00080 00081 VectorSize--; 00082 if (VectorSize <= 0) { 00083 init = false; 00084 } 00085 } 00086 } 00087 else if (index == 0 && index < VectorSize) { 00088 elem<T> * n = first->gNext (); 00089 00090 if (n != NULL) { 00091 n->sPrev (NULL); 00092 delete first; 00093 first = n; 00094 VectorSize--; 00095 } 00096 else { 00097 init = false; 00098 delete first; 00099 VectorSize = 0; 00100 } 00101 } 00102 else { 00103 worked = false; 00104 } 00105 } 00106 else { 00107 worked = false; 00108 } 00109 return worked; 00110 } 00111 00112 void concatenate (nVector<T>& t) { 00113 for (int i = 0; i < t.size (); ++i) 00114 push_back (t[i]); 00115 } 00116 00117 int size () { return VectorSize; } 00118 bool empty () { return !init; } 00119 00120 T& operator[](int ind) { 00121 setCurrIndex (ind); 00122 return curr->getVal (); 00123 } 00124 00125 void show () { 00126 for (int i = 0; i < VectorSize; ++i) { 00127 setCurrIndex (i); 00128 std::cout << "(" << curr << ") Element " << i + 1 << " pere : " << curr->gprev() << ", fils " << curr->gNext () << std::endl; 00129 } 00130 } 00131 00132 void clear () { 00133 while (VectorSize != 0) { 00134 erase (0); 00135 } 00136 } 00137 private: 00138 void setCurrLast () { 00139 if (init) { 00140 curr = first; 00141 while (curr->gNext () != NULL) { 00142 curr = curr->gNext (); 00143 } 00144 } 00145 } 00146 00147 bool setCurrIndex (int index) { 00148 curr = first; 00149 bool worked = true; 00150 00151 for (int i = 0; i < index; ++i) { 00152 if (curr->gNext () != NULL) 00153 curr = curr->gNext (); 00154 else { 00155 worked = false; 00156 break; 00157 } 00158 } 00159 return worked; 00160 } 00161 00162 elem<T>* first; 00163 elem<T>* curr; 00164 00165 bool init; 00166 int VectorSize; 00167 }; 00168 #endif
Generated on Wed Jul 13 2022 04:42:26 by
 1.7.2
 1.7.2 
    