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.
Fork of TestMyPathFind by
Diff: map/nVector.h
- Revision:
- 39:ca4dd3faffa8
diff -r da3a2c781672 -r ca4dd3faffa8 map/nVector.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/map/nVector.h Wed Apr 13 11:27:01 2016 +0000
@@ -0,0 +1,162 @@
+#ifndef VECTOR_H
+#define VECTOR_H
+
+template<class T>
+class elem {
+public:
+ elem () { ; }
+ elem (T nval) : val (nval) { next = NULL; prev = NULL; }
+ elem (T nval, elem* nprev) : val (nval) { next = NULL; prev = nprev; }
+
+ elem<T> * gNext () { return next; }
+ elem<T> * gprev () { return prev; }
+ T& getVal () { return val; }
+
+ void sNext (elem<T> * nnext) { next = nnext; }
+ void sPrev (elem<T> * nprev) { prev = nprev; }
+
+private:
+ T val;
+ elem<T> * next;
+ elem<T> * prev;
+};
+
+template<class T>
+class nVector {
+public:
+ nVector () {
+ first = NULL;
+ curr = NULL;
+ init = false;
+ VectorSize = 0;
+ }
+
+ void push_back (T val) {
+ if (init) {
+ setCurrLast ();
+ elem<T> * n = new elem<T> (val, curr);
+ curr->sNext (n);
+ n->sPrev (curr);
+ VectorSize++;
+ }
+ else {
+ init = true;
+ first = new elem<T> (val);
+ VectorSize = 1;
+ }
+ }
+
+ void push_first (T val) {
+ if (init) {
+ curr = first;
+ elem<T> * n = new elem<T> (val);
+ curr->sPrev (n);
+ n->sNext (curr);
+ first = n;
+ VectorSize++;
+ }
+ else {
+ init = true;
+ first = new elem<T> (val);
+ VectorSize = 1;
+ }
+ }
+
+ bool erase (int index) {
+ bool worked = true;
+
+ if (init) {
+ if (index > 0 && index < VectorSize) {
+ if (setCurrIndex (index)) {
+ elem<T>* p = curr->gprev ();
+ if (p != NULL)
+ p->sNext (curr->gNext ());
+
+ elem<T>* n = curr->gNext ();
+ if (n != NULL)
+ n->sPrev (p);
+
+ delete curr;
+
+ VectorSize--;
+ if (VectorSize <= 0) {
+ init = false;
+ }
+ }
+ }
+ else if (index == 0 && index < VectorSize) {
+ elem<T> * n = first->gNext ();
+
+ if (n != NULL) {
+ n->sPrev (NULL);
+ delete first;
+ first = n;
+ VectorSize--;
+ }
+ else {
+ init = false;
+ delete first;
+ VectorSize = 0;
+ }
+ }
+ else {
+ worked = false;
+ }
+ }
+ else {
+ worked = false;
+ }
+ return worked;
+ }
+
+ void concatenate (nVector<T>& t) {
+ for (int i = 0; i < t.size (); ++i)
+ push_back (t[i]);
+ }
+
+ int size () { return VectorSize; }
+ bool empty () { return !init; }
+
+ T& operator[](int ind) {
+ setCurrIndex (ind);
+ return curr->getVal ();
+ }
+
+ void show () {
+ for (int i = 0; i < VectorSize; ++i) {
+ setCurrIndex (i);
+ std::cout << "(" << curr << ") Element " << i + 1 << " pere : " << curr->gprev() << ", fils " << curr->gNext () << std::endl;
+ }
+ }
+private:
+ void setCurrLast () {
+ if (init) {
+ curr = first;
+ while (curr->gNext () != NULL) {
+ curr = curr->gNext ();
+ }
+ }
+ }
+
+ bool setCurrIndex (int index) {
+ curr = first;
+ bool worked = true;
+
+ for (int i = 0; i < index; ++i) {
+ if (curr->gNext () != NULL)
+ curr = curr->gNext ();
+ else {
+ worked = false;
+ break;
+ }
+ }
+ return worked;
+ }
+
+ elem<T>* first;
+ elem<T>* curr;
+
+ bool init;
+ int VectorSize;
+};
+#endif
\ No newline at end of file
