- Se ocultan (private) constructores por default, de copia y operador =
para evitar que se creen objetos sin utilizar new.
#ifndef _ELEMENTO_PLANTA_H_
#define _ELEMENTO_PLANTA_H_
#ifndef _ELEMENTO_PLANTA_H_
#define _ELEMENTO_PLANTA_H_
#include "iconector.h"
#include "rgb.h"
#include "iconector.h"
#include "rgb.h"
class ElementoPlanta:public IConector {
public:
/// Constructor
class ElementoPlanta:public IConector {
public:
/// Constructor
+ ElementoPlanta(const std::string &_name);
+ ElementoPlanta(unsigned ins, unsigned outs);
virtual ~ElementoPlanta();
// FIXME: ver que parametros seran necesarios
virtual ~ElementoPlanta();
// FIXME: ver que parametros seran necesarios
};
protected:
RGB fluid_color;
};
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
class IConector {
public:
/// Constructor
+ IConector(unsigned in, unsigned out);
/// Destructor
virtual ~IConector();
/// Destructor
virtual ~IConector();
- 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); }
-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:
{
switch (msg) {
case MSG_QUERY_MAX_FLOW:
+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!!
}
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)
}
int IConector::send_msg(int where, int msg)
std::list<IConector *>::iterator it;
switch (where) {
case IN:
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:
(*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);
}
(*it)->recieve_msg(msg, this);
}
case MSG_DISCONECT:
// Elimino el objeto de las listas, si es que
// existe en alguna de las dos.
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:
{
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:
} 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!
}
} else {
return false; // no se pudo conectar!
}