]> git.llucax.com Git - z.facultad/75.42/euler-oo.git/blobdiff - dllist.cpp
Primera version de Rectangulo.
[z.facultad/75.42/euler-oo.git] / dllist.cpp
index a2994fd467a6f8a75e7f0132bc3d4c883ee92d85..605c159991696e6b1308d0ad4a8726956e809b62 100644 (file)
@@ -2,8 +2,8 @@
  *
  * Taller de Programación (75.42).
  *
- * Ejercicio Número 2:
- * Programa calculadora.
+ * Ejercicio Número 3:
+ * Lista de figuras.
  *
  * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
  * Puede copiar, modificar y distribuir este programa bajo los términos de
  * $Id$
  */
 
-// TODO metodos que devuelven NULL si la lista esta vacia.
-//      poner comentarios en línea simple?
 #include "dllist.h"
+#include <cstdlib>
 
-DLList::DLList(void): first(NULL), current(NULL), last(NULL) {}
+DLList::DLList(void): _first(NULL), _current(NULL), _last(NULL) {}
 
 DLList::~DLList(void) {
     /* Elimino los nodos. */
-    while (!DLList_empty(list)) {
-        DLList_pop(list);
+    while (!empty()) {
+        pop();
     }
 }
 
 bool DLList::empty(void) {
-    return this->first == NULL;
+    return _first == NULL;
 }
 
 void* DLList::begin(void) {
-    this->current = this->first;
+    _current = _first;
     /* Si hay un nodo, devulevo sus datos, si no NULL. */
-    return this->current ? this->current->data : NULL;
+    return _current ? _current->data : NULL;
 }
 
 void* DLList::end(void) {
-    this->current = this->last;
+    _current = _last;
     /* Si hay un nodo, devulevo sus datos, si no NULL. */
-    return this->current ? this->current->data : NULL;
+    return _current ? _current->data : NULL;
 }
 
 bool DLList::have_more(void) {
-    return this->current != NULL;
+    return _current != NULL;
 }
 
 void* DLList::current(void) {
-    return this->current ? this->current->data : NULL;
+    return _current ? _current->data : NULL;
 }
 
 void* DLList::next(void) {
-    DLListNode* cur = this->current;
+    DLListNode* current = _current;
     /* Si no está vacía ni ya fue terminada de recorrer. */
-    if (cur) {
+    if (current) {
         /* Apuntamos el actual al próximo. */
-        this->current = cur->next;
+        _current = current->next;
         /* Devolvemos los datos del próximo o NULL si no había otro. */
-        return this->current ? this->current->data : NULL;
+        return _current ? _current->data : NULL;
     /* Si está vacía o ya fue terminada de recorrer devolvemos NULL. */
     } else {
         return NULL;
@@ -66,13 +65,13 @@ void* DLList::next(void) {
 }
 
 void* DLList::prev(void) {
-    DLListNode* cur = this->current;
+    DLListNode* current = _current;
     /* Si no está vacía ni ya fue terminada de recorrer. */
-    if (cur) {
+    if (current) {
         /* Apuntamos el actual al anterior. */
-        this->current = cur->prev;
+        _current = current->prev;
         /* Devolvemos los datos del anterior o NULL si no había otro. */
-        return this->current ? this->current->data : NULL;
+        return _current ? _current->data : NULL;
     /* Si está vacía o ya fue terminada de recorrer devolvemos NULL. */
     } else {
         return NULL;
@@ -80,21 +79,21 @@ void* DLList::prev(void) {
 }
 
 bool DLList::unshift(void* data) {
-    DLListNode* node = new DLListNode(NULL, data, this->first);
+    DLListNode* node = new DLListNode(NULL, data, _first);
     /* Si obtenemos la memoria bien, actualizamos lo que sea necesario. */
     if (node) {
         /* Apunto el nodo actual al nuevo nodo. */
-        this->current = node;
+        _current = node;
         /* Si la lista está vacía hay que hacer apuntar todo al nuevo nodo. */
-        if (this->first == NULL) {
-            this->first = node;
-            this->last  = node;
+        if (_first == NULL) {
+            _first = node;
+            _last  = node;
         /* Si no está vacía. */
         } else {
             /* Apunto el nodo anterior al primer nodo de la lista al nuevo. */
-            this->first->prev = node;
+            _first->prev = node;
             /* Apunto el primer nodo de la lista al nuevo. */
-            this->first = node;
+            _first = node;
         }
         return true;
     } else {
@@ -103,21 +102,21 @@ bool DLList::unshift(void* data) {
 }
 
 bool DLList::push(void* data) {
-    DLListNode* node = new DLListNode(this->last, data, NULL);
+    DLListNode* node = new DLListNode(_last, data, NULL);
     /* Si obtenemos la memoria bien, actualizamos lo que sea necesario. */
     if (node) {
         /* Apunto el nodo actual al nuevo nodo. */
-        this->current = node;
+        _current = node;
         /* Si la lista está vacía hay que hacer apuntar todo al nuevo nodo. */
-        if (this->first == NULL) {
-            this->first = node;
-            this->last  = node;
+        if (_first == NULL) {
+            _first = node;
+            _last  = node;
         /* Si no está vacía. */
         } else {
             /* Apunto el próximo nodo del último nodo de la lista al nuevo. */
-            this->last->next = node;
+            _last->next = node;
             /* Apunto el último nodo de la lista al nuevo. */
-            this->last = node;
+            _last = node;
         }
         return true;
     } else {
@@ -126,20 +125,24 @@ bool DLList::push(void* data) {
 }
 
 void* DLList::shift(void) {
+    // Si está vacía devuelve NULL.
+    if (_first == NULL)  {
+        return NULL;
+    }
     /* Primer nodo */
-    DLListNode* node = this->first;
+    DLListNode* node = _first;
     /* Datos del primer nodo. */
     void* data = node->data;
     /* Pongo como primer nodo al siguiente. */
-    this->first = node->next;
+    _first = node->next;
     /* Pongo al primero como nodo actual. */
-    this->current = this->first;
+    _current = _first;
     /* Si era el único pongo el último en NULL. */
-    if (!this->first) {
-        this->last = NULL;
+    if (!_first) {
+        _last = NULL;
     /* Si no, pongo el anterior en NULL. */
     } else {
-        this->first->prev = NULL;
+        _first->prev = NULL;
     }
     /* Libero memoria del nodo. */
     delete node;
@@ -147,20 +150,24 @@ void* DLList::shift(void) {
 }
 
 void* DLList::pop(void) {
+    // Si está vacía devuelve NULL.
+    if (_first == NULL)  {
+        return NULL;
+    }
     /* Último nodo */
-    DLListNode* node = this->last;
+    DLListNode* node = _last;
     /* Datos del último nodo. */
     void* data = node->data;
     /* Pongo como último nodo al anterior. */
-    this->last = node->prev;
+    _last = node->prev;
     /* Pongo al último como nodo actual. */
-    this->current = this->last;
+    _current = _last;
     /* Si era el único pongo el primero en NULL. */
-    if (!this->last) {
-        this->first = NULL;
+    if (!_last) {
+        _first = NULL;
     /* Si no, pongo el siguiente en NULL. */
     } else {
-        this->last->next = NULL;
+        _last->next = NULL;
     }
     /* Libero memoria del nodo. */
     delete node;
@@ -168,8 +175,12 @@ void* DLList::pop(void) {
 }
 
 void* DLList::remove_current(void) {
+    // Si no hay un nodo seleccionado devuelve NULL.
+    if (_current == NULL)  {
+        return NULL;
+    }
     /* Nodo actual */
-    DLListNode* current = this->current;
+    DLListNode* current = _current;
     /* Datos del nodo actual. */
     void* data = current->data;
     /* Si tiene siguiente. */
@@ -178,7 +189,7 @@ void* DLList::remove_current(void) {
         current->next->prev = current->prev;
     /* Si no tiene siguiente, se pone como último al anterior del actual. */
     } else {
-        this->last = current->prev;
+        _last = current->prev;
     }
     /* Si tiene anterior. */
     if (current->prev) {
@@ -186,10 +197,10 @@ void* DLList::remove_current(void) {
         current->prev->next = current->next;
     /* Si no tiene anterior, se pone como primero al siguiente del actual. */
     } else {
-        this->first = current->next;
+        _first = current->next;
     }
     /* Pongo como elemento actual al próximo elemento. */
-    this->current = current->next;
+    _current = current->next;
     /* Libero memoria del nodo. */
     delete current;
     return data;