#ifndef _ELEMENTO_PLANTA_H_
#define _ELEMENTO_PLANTA_H_
+#include <string>
#include "iconector.h"
#include "rgb.h"
class ElementoPlanta:public IConector {
public:
/// Constructor
- ElementoPlanta();
+ ElementoPlanta(const std::string &_name);
+ ElementoPlanta(unsigned ins, unsigned outs);
virtual ~ElementoPlanta();
// FIXME: ver que parametros seran necesarios
};
protected:
RGB fluid_color;
+ std::string name;
+
+private:
+ // Hago que no se puedan copiar objetos ElementosPlanta
+ ElementoPlanta(const ElementoPlanta &):IConector(0,0) {}
+ ElementoPlanta &operator = (const ElementoPlanta &) { return (*this); }
};
}
class IConector {
public:
/// Constructor
- IConector();
+ IConector(unsigned in, unsigned out);
/// Destructor
virtual ~IConector();
MSG_LAST
};
protected:
- std::list<IConector *> entradas;
- std::list<IConector *> salidas;
- unsigned int cant_entradas;
- unsigned int cant_salidas;
+ /// Lista de objetos conectados a las entradas
+ std::list<IConector *> in_list;
+ /// Lista de objetos conectados a las salidas
+ std::list<IConector *> out_list;
+ /// Cantidad de entradas disponibles
+ unsigned int in_slots;
+ /// Canitidad de salidas disponibles
+ unsigned int out_slots;
+
+private:
+ // Oculto copia entre clases
+ IConector() {}
+ IConector(const IConector &) {}
+ IConector &operator = (const IConector &) { return (*this); }
};
}
using namespace PlaQui;
-ElementoPlanta::ElementoPlanta()
+ElementoPlanta::ElementoPlanta(const std::string &_name):IConector(0, 0)
+{
+ name = _name;
+}
+
+ElementoPlanta::ElementoPlanta(unsigned ins, unsigned outs):IConector(ins, outs)
{
}
{
switch (msg) {
case MSG_QUERY_MAX_FLOW:
- /// TODO
+ // TODO
return;
break;
default:
using namespace PlaQui;
-IConector::IConector()
+IConector::IConector(unsigned in, unsigned out)
{
- cant_entradas = cant_salidas = 0;
+ in_slots = in;
+ out_slots = out;
}
IConector::~IConector()
{
// Limpio las listas. Los objetos no se destruyen!!
- entradas.clear();
- salidas.clear();
+ in_list.clear();
+ out_list.clear();
}
int IConector::send_msg(int where, int msg)
std::list<IConector *>::iterator it;
switch (where) {
case IN:
- for(it=entradas.begin(); it!=entradas.end(); it++)
+ for(it=in_list.begin(); it!=in_list.end(); it++)
(*it)->recieve_msg(msg, this);
break;
case OUT:
- for(it=salidas.begin(); it!=salidas.end(); it++)
+ for(it=out_list.begin(); it!=out_list.end(); it++)
(*it)->recieve_msg(msg, this);
}
case MSG_DISCONECT:
// Elimino el objeto de las listas, si es que
// existe en alguna de las dos.
- entradas.remove(who);
- salidas.remove(who);
+ in_list.remove(who);
+ out_list.remove(who);
}
}
{
switch (place) {
case IN:
- if (entradas.size() <= cant_entradas) {
- entradas.push_back(obj);
+ if (in_list.size() <= in_slots) {
+ in_list.push_back(obj);
} else {
return false; // no se pudo conectar!
}
case OUT:
- if (salidas.size() <= cant_salidas) {
- salidas.push_back(obj);
+ if (out_list.size() <= out_slots) {
+ out_list.push_back(obj);
} else {
return false; // no se pudo conectar!
}