]> git.llucax.com Git - z.facultad/75.42/plaqui.git/commitdiff
* Se agregan #ifdef DEBUG a los simulate() del modelo, para poder sacar
authorRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 23 Nov 2003 23:48:27 +0000 (23:48 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 23 Nov 2003 23:48:27 +0000 (23:48 +0000)
   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

13 files changed:
Client/src/principal.cpp
Model/include/iconector.h
Model/include/plantitem.h
Model/include/simulator.h
Model/src/conduct.cpp
Model/src/drainage.cpp
Model/src/exclusa.cpp
Model/src/pump.cpp
Model/src/simulator.cpp
Model/src/source.cpp
Model/src/splitter.cpp
Model/src/tank.cpp
Model/src/union.cpp

index 1b42b2b8a6742b158dc5362f0ea6329042f3db3c..d5959a9476b01513ee4cee83f9ed8f70532bd27d 100644 (file)
@@ -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");
        // 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;
                }
 
                        items = items->next;
                }
 
+               xmlFreeDoc(document);
                // Actualizo la UI
                update_ui();
        }
                // Actualizo la UI
                update_ui();
        }
index 2abcbfe0f4bb5977c5da9ac0ac66a72657916091..98455fca00c0fae6564c56fa489b5559f91c0af9 100644 (file)
@@ -32,7 +32,7 @@ public:
         *  a la salida.
         *  \param where Donde enviar el mensage, IConector::IN o IConector::OUT
         *  \param msg Mensage a enviar
         *  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);
        
         */
        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 :
         *  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
         *      };
         *      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
         */
        enum {
                MSG_DISCONECT=0, ///< Desconectar el objeto que envía el mensaje
index 2cfb5b67fa235c43ea8999986ba9a7aace15f385..29fd05416447681537c28a191f41c1526c524292 100644 (file)
@@ -29,11 +29,6 @@ public:
        /// Destructor
        virtual ~PlantItem();
 
        /// 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
        /** 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; }
        
        /// 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;
        virtual void get_state_as_xml(std::stringstream &out); 
 protected:
        RGB fluid_color;
index e19a038b4c589b6ba85a6638473bb0fce1148764..38026026050d44cccb2040f3e90ec3b5dea00229 100644 (file)
@@ -51,6 +51,9 @@ public:
        enum {PUMP, UNION, SPLITTER, CONDUCT, EXCLUSA, TANK, DRAINAGE};
 
        bool set_open(const std::string &name, bool open = true);
        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
 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;
 
        // Frame. Define el orden para los cuadros del XML
        unsigned long int frame;
+       bool is_load_ok;
 };
 
 }
 };
 
 }
index bc0e3f352a2a341644967fd104a0969457b30601..b6eb6f2672f49149cbfdd8170333d41bde38f511 100644 (file)
@@ -59,7 +59,9 @@ void Conduct::update(int dir)
 void Conduct::simulate()
 {
        if (!updated) {
 void Conduct::simulate()
 {
        if (!updated) {
+#ifdef DEBUG
                std::cout << name << "::sin actualizar!" << std::endl;
                std::cout << name << "::sin actualizar!" << std::endl;
+#endif
                return;
        }
 
                return;
        }
 
@@ -68,7 +70,9 @@ void Conduct::simulate()
                PlantItem *o = (PlantItem *)(*i);
                set_color( o->get_color() );
        }
                PlantItem *o = (PlantItem *)(*i);
                set_color( o->get_color() );
        }
+#ifdef DEBUG
        std::cout << name << "::Flujo actual = " << actual_flow << " de " << max_flow << std::endl;
        std::cout << name << "::Flujo actual = " << actual_flow << " de " << max_flow << std::endl;
+#endif
        updated = false;
 }
 
        updated = false;
 }
 
index 09fd79d133cd5f6e1bab6ab8e6b51ff788460844..bc83db6a42e2359fedffd56fe42bf0928b81cce7 100644 (file)
@@ -32,7 +32,9 @@ void Drainage::simulate()
                PlantItem *o = (PlantItem *)(*i);
                set_color( o->get_color() );
        }
                PlantItem *o = (PlantItem *)(*i);
                set_color( o->get_color() );
        }
+#ifdef DEBUG
        std::cout << name << "::Flujo recibido = " << actual_flow << std::endl;
        std::cout << name << "::Flujo recibido = " << actual_flow << std::endl;
+#endif
        updated = false;
        actual_flow = 0;
 }
        updated = false;
        actual_flow = 0;
 }
index 89554f858ccf61117bc22b07a852ea3800a36e74..ea627121f792239c6fc51ca165b3668008d28ff2 100644 (file)
@@ -36,7 +36,9 @@ void Exclusa::simulate()
                PlantItem *o = (PlantItem *)(*i);
                set_color( o->get_color() );
        }
                PlantItem *o = (PlantItem *)(*i);
                set_color( o->get_color() );
        }
+#ifdef DEBUG
        std::cout << name << ": " << ((is_open)?"Abierta":"Cerrada") << std::endl;
        std::cout << name << ": " << ((is_open)?"Abierta":"Cerrada") << std::endl;
+#endif
 }
 
 void Exclusa::recieve_msg(int msg, IConector *who, void *data)
 }
 
 void Exclusa::recieve_msg(int msg, IConector *who, void *data)
index fb355a06e23c9c167a6136b6106bc758b997e1ab..679866f02c4f080118b8a3e286b7e781eeb535ba 100644 (file)
@@ -36,7 +36,9 @@ void Pump::update(int dir)
 
 void Pump::simulate()
 {
 
 void Pump::simulate()
 {
+#ifdef DEBUG
        std::cout << ((active && open)?" (funcionando)":" (apagada)") << std::endl;
        std::cout << ((active && open)?" (funcionando)":" (apagada)") << std::endl;
+#endif
        updated = false;
 }
 
        updated = false;
 }
 
index 2fe6f6ecb586672da5cb106ce0eecb7b7e634d6e..72c59ca61561f2888b6413d106613f680339e0a9 100644 (file)
@@ -10,9 +10,12 @@ Simulator::Simulator(const std::string &filename)
        xmlDocPtr document;
        document = xmlParseFile(filename.c_str());
        if (document == NULL) {
        xmlDocPtr document;
        document = xmlParseFile(filename.c_str());
        if (document == NULL) {
+               is_load_ok = false;
                return;
        }
 
                return;
        }
 
+       is_load_ok = true;
+
        /* bien, el archivo se parseo bien! */
        xmlNodePtr nodo, items;
        nodo = document->children;
        /* 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);
        }
                // Bien, la planta esta cargada, conectemos todo!!
                do_connections(nodo->children);
        }
+       xmlFreeDoc(document);
 }
 
 Simulator::~Simulator()
 {
 }
 
 Simulator::~Simulator()
 {
-       // FIXME REMOVER TODOOOOOO
+       std::list<PlantItem *>::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);
 }
 
 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);
        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);
 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);
        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);
 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);
        p->set_max_flow(flujo);
        conduct_lst.push_back(p);
        items.push_back(p);
index 1362c1cfc293d573ed1705dcae25a66a45ae95e6..8161877a0c1e53e1960b4c766e20eb919d31c074 100644 (file)
@@ -21,6 +21,8 @@ bool Source::get_output()
 
 void Source::simulate()
 {
 
 void Source::simulate()
 {
+#ifdef DEBUG
        std::cout << name << "::Flujo entregado : " << max_flow << std::endl;
        std::cout << name << "::Flujo entregado : " << max_flow << std::endl;
+#endif
 }
 
 }
 
index 7afa150e9ea85328a2528c6b9c147ed6126f073b..d9733794166ad84b1a88bcd369cb6c295bbb7d68 100644 (file)
@@ -46,7 +46,9 @@ void Splitter::recieve_msg(int msg, IConector *who, void *data)
                break;
                case MSG_RESPONSE_MAX_FLOW: {
                        float max = *((float *)data);
                break;
                case MSG_RESPONSE_MAX_FLOW: {
                        float max = *((float *)data);
+#ifdef DEBUG
                        std::cout << name << ":Split " << max << std::endl;
                        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;
                        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() );
        }
                PlantItem *o = (PlantItem *)(*i);
                set_color( o->get_color() );
        }
+#ifdef DEBUG
        std::cout << name << "::Flujo actual = " << actual_flow << std::endl;
        std::cout << name << "::Flujo actual = " << actual_flow << std::endl;
+#endif
        updated = false;
 }
 
        updated = false;
 }
 
index 93c8564dd77231064f71735c78a698c365cb3eca..b3a940e79688e48624749cb428eca0b42a488c98 100644 (file)
@@ -52,8 +52,10 @@ void Tank::simulate()
        // le resto lo que entrego
        litros -= actual_out_flow;
 
        // le resto lo que entrego
        litros -= actual_out_flow;
 
+#ifdef DEBUG
        std::cout << name << "Capacidad: " << capacity;
        std::cout << "  Litros : " << litros << std::endl;
        std::cout << name << "Capacidad: " << capacity;
        std::cout << "  Litros : " << litros << std::endl;
+#endif
        updated = false;
 }
 
        updated = false;
 }
 
index 36ae347b7e1ad6ad716d46181a8c9cec701e170e..26c404a5697db4afb24442262eca5ae289941fbd 100644 (file)
@@ -141,7 +141,9 @@ void Union::simulate()
                }
        }
                
                }
        }
                
+#ifdef DEBUG
        std::cout << name << "::Flujo actual = " << actual_flow << std::endl;
        std::cout << name << "::Flujo actual = " << actual_flow << std::endl;
+#endif
        updated = false;
        in_on_zero = 0;
        in_ready = 0;
        updated = false;
        in_on_zero = 0;
        in_ready = 0;