From be1908f8097dbbc871bfd7c55432de43d25647b7 Mon Sep 17 00:00:00 2001 From: Ricardo Markiewicz Date: Sun, 23 Nov 2003 23:48:27 +0000 Subject: [PATCH] * Se agregan #ifdef DEBUG a los simulate() del modelo, para poder sacar los mensages que tira el modelo * El modelo ahora destruye los items al ser destruido * Tambien todos los parsers de xml llaman a xmlFreeDoc para liberar la memoria --- Client/src/principal.cpp | 3 +++ Model/include/iconector.h | 6 +++--- Model/include/plantitem.h | 11 ++++++----- Model/include/simulator.h | 4 ++++ Model/src/conduct.cpp | 4 ++++ Model/src/drainage.cpp | 2 ++ Model/src/exclusa.cpp | 2 ++ Model/src/pump.cpp | 2 ++ Model/src/simulator.cpp | 18 +++++++++++++----- Model/src/source.cpp | 2 ++ Model/src/splitter.cpp | 4 ++++ Model/src/tank.cpp | 2 ++ Model/src/union.cpp | 2 ++ 13 files changed, 49 insertions(+), 13 deletions(-) diff --git a/Client/src/principal.cpp b/Client/src/principal.cpp index 1b42b2b..d5959a9 100644 --- a/Client/src/principal.cpp +++ b/Client/src/principal.cpp @@ -310,6 +310,8 @@ void Principal::loadXML() } } + xmlFreeDoc(document); + // Ya cargado el XML, mando un msg para empezar a recibir los frames! PlaQui::Server::Command c("transmission", "start"); c.add_arg("default"); @@ -578,6 +580,7 @@ void Principal::read_status_xml(const std::string &frame) items = items->next; } + xmlFreeDoc(document); // Actualizo la UI update_ui(); } diff --git a/Model/include/iconector.h b/Model/include/iconector.h index 2abcbfe..98455fc 100644 --- a/Model/include/iconector.h +++ b/Model/include/iconector.h @@ -32,7 +32,7 @@ public: * a la salida. * \param where Donde enviar el mensage, IConector::IN o IConector::OUT * \param msg Mensage a enviar - * \param data dato opcional a mandar, según el mensage que se envíe + * \param data Dato opcional a mandar, según el mensage que se envíe */ void send_msg(int where, int msg, void *data=NULL); @@ -74,13 +74,13 @@ public: * de evitar solapamiento de mensajes. * Por ejemplo, si tenemos una clase B con un mensaje TEST se declararía * como : - * \verbatim + * \code * class B:public IConector { * enum { * MSG_TEST=IConector::MSG_LAST, * MSG_LAST * }; - * \endverbatim + * \endcode */ enum { MSG_DISCONECT=0, ///< Desconectar el objeto que envía el mensaje diff --git a/Model/include/plantitem.h b/Model/include/plantitem.h index 2cfb5b6..29fd054 100644 --- a/Model/include/plantitem.h +++ b/Model/include/plantitem.h @@ -29,11 +29,6 @@ public: /// Destructor virtual ~PlantItem(); - // FIXME: ver que parametros seran necesarios - // TODO : ver si no son inutiles!!! - virtual void send_fluid() {} - virtual void receive_fluid() {} - /** Ejecuta la fase de actualización. * * Durante la fase de actualización los objetos se comunican entre @@ -71,6 +66,12 @@ public: /// Retorna el flujo actual que maneja el objeto. float get_actual_flow() { return actual_flow; } + + /** Genera la salida XML del estado del componente + * + * Esta función genera el estado actual de un objeto utilizando + * el formato XML + */ virtual void get_state_as_xml(std::stringstream &out); protected: RGB fluid_color; diff --git a/Model/include/simulator.h b/Model/include/simulator.h index e19a038..3802602 100644 --- a/Model/include/simulator.h +++ b/Model/include/simulator.h @@ -51,6 +51,9 @@ public: enum {PUMP, UNION, SPLITTER, CONDUCT, EXCLUSA, TANK, DRAINAGE}; bool set_open(const std::string &name, bool open = true); + + /// Dice si el simulador está simulando una planta + bool is_ok() { return is_load_ok; } protected: // Los mantengo en listas separadas para ahorrar // CPU y no tener que usar dinamic_cast @@ -83,6 +86,7 @@ protected: // Frame. Define el orden para los cuadros del XML unsigned long int frame; + bool is_load_ok; }; } diff --git a/Model/src/conduct.cpp b/Model/src/conduct.cpp index bc0e3f3..b6eb6f2 100644 --- a/Model/src/conduct.cpp +++ b/Model/src/conduct.cpp @@ -59,7 +59,9 @@ void Conduct::update(int dir) void Conduct::simulate() { if (!updated) { +#ifdef DEBUG std::cout << name << "::sin actualizar!" << std::endl; +#endif return; } @@ -68,7 +70,9 @@ void Conduct::simulate() PlantItem *o = (PlantItem *)(*i); set_color( o->get_color() ); } +#ifdef DEBUG std::cout << name << "::Flujo actual = " << actual_flow << " de " << max_flow << std::endl; +#endif updated = false; } diff --git a/Model/src/drainage.cpp b/Model/src/drainage.cpp index 09fd79d..bc83db6 100644 --- a/Model/src/drainage.cpp +++ b/Model/src/drainage.cpp @@ -32,7 +32,9 @@ void Drainage::simulate() PlantItem *o = (PlantItem *)(*i); set_color( o->get_color() ); } +#ifdef DEBUG std::cout << name << "::Flujo recibido = " << actual_flow << std::endl; +#endif updated = false; actual_flow = 0; } diff --git a/Model/src/exclusa.cpp b/Model/src/exclusa.cpp index 89554f8..ea62712 100644 --- a/Model/src/exclusa.cpp +++ b/Model/src/exclusa.cpp @@ -36,7 +36,9 @@ void Exclusa::simulate() PlantItem *o = (PlantItem *)(*i); set_color( o->get_color() ); } +#ifdef DEBUG std::cout << name << ": " << ((is_open)?"Abierta":"Cerrada") << std::endl; +#endif } void Exclusa::recieve_msg(int msg, IConector *who, void *data) diff --git a/Model/src/pump.cpp b/Model/src/pump.cpp index fb355a0..679866f 100644 --- a/Model/src/pump.cpp +++ b/Model/src/pump.cpp @@ -36,7 +36,9 @@ void Pump::update(int dir) void Pump::simulate() { +#ifdef DEBUG std::cout << ((active && open)?" (funcionando)":" (apagada)") << std::endl; +#endif updated = false; } diff --git a/Model/src/simulator.cpp b/Model/src/simulator.cpp index 2fe6f6e..72c59ca 100644 --- a/Model/src/simulator.cpp +++ b/Model/src/simulator.cpp @@ -10,9 +10,12 @@ Simulator::Simulator(const std::string &filename) xmlDocPtr document; document = xmlParseFile(filename.c_str()); if (document == NULL) { + is_load_ok = false; return; } + is_load_ok = true; + /* bien, el archivo se parseo bien! */ xmlNodePtr nodo, items; nodo = document->children; @@ -40,17 +43,25 @@ Simulator::Simulator(const std::string &filename) // Bien, la planta esta cargada, conectemos todo!! do_connections(nodo->children); } + xmlFreeDoc(document); } Simulator::~Simulator() { - // FIXME REMOVER TODOOOOOO + std::list::iterator i = items.begin(); + PlantItem *o; + + while (i != items.end()) { + o = (*i); + items.remove(o); + delete o; + i = items.begin(); + } } void Simulator::add_pump(const std::string &name, float max_flow, RGB color) { Pump *p = new Pump(name); - // FIXME no va!! p->set_max_flow(max_flow); p->set_color(color); pump_lst.push_back(p); @@ -60,7 +71,6 @@ void Simulator::add_pump(const std::string &name, float max_flow, RGB color) void Simulator::add_union(const std::string &name, float max_flow) { Union *u = new Union(name); - // FIXME no va!! u->set_max_flow(max_flow); union_lst.push_back(u); items.push_back(u); @@ -77,8 +87,6 @@ void Simulator::add_splitter(const std::string &name, float max_flow) void Simulator::add_conduct(const std::string &name, float flujo) { Conduct *p = new Conduct(name); - // FIXME no va!! - std::cout << flujo << std::endl; p->set_max_flow(flujo); conduct_lst.push_back(p); items.push_back(p); diff --git a/Model/src/source.cpp b/Model/src/source.cpp index 1362c1c..8161877 100644 --- a/Model/src/source.cpp +++ b/Model/src/source.cpp @@ -21,6 +21,8 @@ bool Source::get_output() void Source::simulate() { +#ifdef DEBUG std::cout << name << "::Flujo entregado : " << max_flow << std::endl; +#endif } diff --git a/Model/src/splitter.cpp b/Model/src/splitter.cpp index 7afa150..d973379 100644 --- a/Model/src/splitter.cpp +++ b/Model/src/splitter.cpp @@ -46,7 +46,9 @@ void Splitter::recieve_msg(int msg, IConector *who, void *data) break; case MSG_RESPONSE_MAX_FLOW: { float max = *((float *)data); +#ifdef DEBUG std::cout << name << ":Split " << max << std::endl; +#endif if (pos == OUT) { if (max < actual_flow) actual_flow = max; if (max_flow < actual_flow) actual_flow = max_flow; @@ -88,7 +90,9 @@ void Splitter::simulate() PlantItem *o = (PlantItem *)(*i); set_color( o->get_color() ); } +#ifdef DEBUG std::cout << name << "::Flujo actual = " << actual_flow << std::endl; +#endif updated = false; } diff --git a/Model/src/tank.cpp b/Model/src/tank.cpp index 93c8564..b3a940e 100644 --- a/Model/src/tank.cpp +++ b/Model/src/tank.cpp @@ -52,8 +52,10 @@ void Tank::simulate() // le resto lo que entrego litros -= actual_out_flow; +#ifdef DEBUG std::cout << name << "Capacidad: " << capacity; std::cout << " Litros : " << litros << std::endl; +#endif updated = false; } diff --git a/Model/src/union.cpp b/Model/src/union.cpp index 36ae347..26c404a 100644 --- a/Model/src/union.cpp +++ b/Model/src/union.cpp @@ -141,7 +141,9 @@ void Union::simulate() } } +#ifdef DEBUG std::cout << name << "::Flujo actual = " << actual_flow << std::endl; +#endif updated = false; in_on_zero = 0; in_ready = 0; -- 2.43.0