+void Simulator::do_connections(xmlNodePtr nodo)
+{
+ // Intengo conectar los elementos :)
+ IConector *current_item, *to_connect;
+ xmlNodePtr props; // propiedades del item actual
+ xmlNodePtr conector1, conector2, conector3;
+
+ while (nodo != NULL) {
+ if (nodo->type != XML_ELEMENT_NODE) {
+ nodo = nodo->next;
+ continue;
+ }
+ // obtengo el items actual por su nombre
+ std::string s = (char *)xmlGetProp(nodo, BAD_CAST"nombre");
+ current_item = find((char *)xmlGetProp(nodo, BAD_CAST"nombre"));
+ props = nodo->children;
+ conector3 = conector2 = conector1 = NULL;
+ while (props != NULL) {
+ if (nodo->type == XML_ELEMENT_NODE) {
+ if (xmlStrcmp(props->name, BAD_CAST"conector") == 0) {
+ xmlNodePtr temp = props->children;
+ while ((temp != NULL) && (conector1 == NULL))
+ if (temp->type == XML_ELEMENT_NODE) {
+ conector1 = temp;
+ temp = temp->next;
+ break;
+ } else {
+ temp = temp->next;
+ }
+ while ((temp != NULL) && (conector2 == NULL))
+ if (temp->type == XML_ELEMENT_NODE) {
+ conector2 = temp;
+ temp = temp->next;
+ break;
+ } else {
+ temp = temp->next;
+ }
+ while ((temp != NULL) && (conector3 == NULL))
+ if (temp->type == XML_ELEMENT_NODE) {
+ conector3 = temp;
+ temp = temp->next;
+ break;
+ } else {
+ temp = temp->next;
+ }
+ }
+ }
+ props = props->next;
+ }
+ // Bien, conector1 y 2 deberian estar apuntando a <entrada> y/o <salida>
+ if (conector1 != NULL) {
+ // si, aca hay un conector!, veamos cual es
+ if (xmlStrcmp(conector1->name, BAD_CAST"entrada") == 0) {
+ // bien, es a la entrada!, obtengo el item al cual lo tengo que conectar
+ to_connect = find((char *)XML_GET_CONTENT(conector1->children));
+ // y lo conecto
+ current_item->connect(to_connect, IConector::IN);
+ } else if (xmlStrcmp(conector1->name, BAD_CAST"salida") == 0) {
+ // Era a salida, es casi lo mismo que arriba
+ to_connect = find((char *)XML_GET_CONTENT(conector1->children));
+ current_item->connect(to_connect, IConector::OUT);
+ }
+ }
+ if (conector2 != NULL) {
+ // si, aca hay un conector!, veamos cual es
+ if (xmlStrcmp(conector2->name, BAD_CAST"entrada") == 0) {
+ // bien, es a la entrada!, obtengo el item al cual lo tengo que conectar
+ to_connect = find((char *)XML_GET_CONTENT(conector2->children));
+ // y lo conecto
+ current_item->connect(to_connect, IConector::IN);
+ } else if (xmlStrcmp(conector2->name, BAD_CAST"salida") == 0) {
+ // Era a salida, es casi lo mismo que arriba
+ to_connect = find((char *)XML_GET_CONTENT(conector2->children));
+ current_item->connect(to_connect, IConector::OUT);
+ }
+ }
+ if (conector3 != NULL) {
+ // si, aca hay un conector!, veamos cual es
+ if (xmlStrcmp(conector3->name, BAD_CAST"entrada") == 0) {
+ // bien, es a la entrada!, obtengo el item al cual lo tengo que conectar
+ to_connect = find((char *)XML_GET_CONTENT(conector3->children));
+ // y lo conecto
+ current_item->connect(to_connect, IConector::IN);
+ } else if (xmlStrcmp(conector3->name, BAD_CAST"salida") == 0) {
+ // Era a salida, es casi lo mismo que arriba
+ to_connect = find((char *)XML_GET_CONTENT(conector3->children));
+ current_item->connect(to_connect, IConector::OUT);
+ }
+ }
+ nodo = nodo->next;
+ }
+ // Fin de las conexiones
+}