/* Cerrar ciclo de votacion y procesar resultados */ bool comando_votar_fin(maquina_votacion_t* maquina) { #ifdef DEBUG printf("Comando votar fin ejecutado \n"); #endif if(maquina->estado < ABIERTA) return error_manager(MESA_CERRADA); if(maquina->estado < VOTACION) return error_manager(OTRO); if(maquina->votando_cargo < FIN) return error_manager(FALTA_VOTAR); while(!pila_esta_vacia(maquina->ciclo)) { voto_t* voto = pila_desapilar(maquina->ciclo); lista_iterar(maquina->listas, votar_partido, voto); destruir_voto(voto); } // Reset de variables. #ifdef DEBUG if(pila_esta_vacia(maquina->ciclo)) printf("Pila vacia\n"); #endif pila_destruir(maquina->ciclo, free); maquina->ciclo = NULL; maquina->estado = ABIERTA; return true; }
void Viewer::new_path_selected(){ try{ update_base_paths(); QDir currDir = path_annotations; if ( currDir.exists() == false ) { error_manager( 1 ); return; } if ( currDir.count() == 2 ) { error_manager( 3 ); return; } update_path_array(); QString filterStr = QString( "*.txt" ); currDir.setNameFilters( QStringList() << ( filterStr ) ); QStringList fileList = currDir.entryList(); frames_total = fileList.size(); ui->myLabel_Img_TotalNumb->setText( QString::number( frames_total ) ); ui->myGroupBox->setEnabled( true ); update_all( frames_start ); is_sequence_loaded = true; } catch ( ... ) { error_manager( 1 ); } }
/* Procesar todos los votos y volcar resultados */ bool comando_cerrar(maquina_votacion_t* maquina, char* entrada[]) { #ifdef DEBUG printf("Comando cerrar ejecutado\n"); #endif if(maquina->estado < ABIERTA) return error_manager(OTRO); if(maquina->estado > ABIERTA || !cola_esta_vacia(maquina->cola) ) return error_manager(COLA_NO_VACIA); lista_iter_t* iter = lista_iter_crear(maquina->listas); if(!iter) return error_manager(OTRO); while(!lista_iter_al_final(iter)) { partido_politico_t* partido = lista_iter_ver_actual(iter); if(!partido) { lista_iter_destruir(iter); return error_manager(OTRO); } printf("%s:\n", partido_nombre(partido)); for(size_t i=0;i<partido_largo(partido);i++) { size_t* votos = partido_votos(partido)[i]; printf("%s: %zu votos\n", CARGOS[i], *votos); } // Liberar memoria destruir_partido(partido); lista_iter_avanzar(iter); } lista_iter_destruir(iter); lista_destruir(maquina->listas, NULL); maquina->listas = NULL; return false; }
/* Almacenar en la pila de votacion el partido votado. Validar que exista ciclo de votacion. */ bool comando_votar_idPartido(maquina_votacion_t* maquina, char* id) { #ifdef DEBUG printf("Comando votar idPartido ejecutado \n"); #endif if(maquina->estado < VOTACION || (maquina->votando_cargo >= FIN) ) return error_manager(OTRO); long int idPartido_int = strtol(id, NULL, 10); if(idPartido_int < 1 || idPartido_int > maquina->cantidad_partidos) return error_manager(OTRO); voto_t* voto = malloc(sizeof(voto_t)); voto->partido_id = (size_t)strtol(id, NULL, 10); voto->cargo = maquina->votando_cargo; pila_apilar(maquina->ciclo, voto); maquina->votando_cargo++; imprimir_mensaje_ok(); if(maquina->votando_cargo < FIN) mostrar_menu_votacion(maquina); return true; }
/* Crear y encolar struct votante_t. */ bool comando_ingresar(maquina_votacion_t* maquina, char* entrada[]) { #ifdef DEBUG printf("Comando ingresar ejecutado: %s , %s \n", entrada[ENTRADA_DOC_TIPO], entrada[ENTRADA_DOC_NUM]); #endif // Error handling if(maquina->estado == CERRADA) { return error_manager(MESA_CERRADA); } if(!entrada[ENTRADA_DOC_TIPO] || !entrada[ENTRADA_DOC_NUM]) { return error_manager(NUMERO_NEGATIVO); } // Segun las pruebas if(strtol(entrada[ENTRADA_DOC_NUM], NULL, 10) < 1) { return error_manager(NUMERO_NEGATIVO); } char* doc_tipo_copia = copiar_clave(entrada[ENTRADA_DOC_TIPO]); char* doc_num_copia = copiar_clave(entrada[ENTRADA_DOC_NUM]); votante_t* votante = votante_crear(doc_tipo_copia, doc_num_copia); if(!votante) { return error_manager(OTRO); free(doc_num_copia); free(doc_tipo_copia); } #ifdef DEBUG printf("Votante ingresado: %s, %s\n", votante_ver_doc_tipo(votante), votante_ver_doc_num(votante)); #endif if( cola_encolar(maquina->cola, votante) ) return true; return error_manager(OTRO); }
void map_manager(t_map **map, t_path **antpit) { int i; i = 0; while ((*map)->cleanfile[i] != NULL) { if ((*map)->nb_ants == 0) check_ants(map, i, 0); i++; } i = (*map)->antindex + 1; while ((*map)->error != 1 && (*map)->cleanfile[i] != NULL) { if ((isroom(map, i, antpit)) == 0 && (istube(map, i, antpit)) == 0) { if (iscommand(map, i, antpit) <= 0) (*map)->error = 1; } i++; } error_manager(map, antpit); max_paths(antpit); matrix_duplicator(antpit); }
/* Retroceder la pila de votacion */ bool comando_votar_deshacer(maquina_votacion_t* maquina) { #ifdef DEBUG printf("Comando votar deshacer ejecutado \n"); #endif if(maquina->estado < ABIERTA) return error_manager(MESA_CERRADA); if(maquina->estado < VOTACION) return error_manager(OTRO); if(maquina->votando_cargo == PRESIDENTE) return error_manager(NO_DESHACER); maquina->votando_cargo--; destruir_voto(pila_desapilar(maquina->ciclo)); return true; }
/* Desencolar y realizar validacion del Documento tipo/numero del votante y no haber votado Crear pila para ciclo de votacion actual */ bool comando_votar_inicio(maquina_votacion_t* maquina) { #ifdef DEBUG printf("Comando votar inicio ejecutado.\n"); #endif // Error handling if(maquina->estado == CERRADA) { return error_manager(MESA_CERRADA); } if(maquina->estado == VOTACION) { return error_manager(OTRO); } if(cola_esta_vacia(maquina->cola)) { return error_manager(NO_VOTANTES); } votante_t* votante_padron = NULL; bool enpadronado = false; votante_t* votante_espera = cola_desencolar(maquina->cola); if(!votante_espera) return error_manager(OTRO); #ifdef DEBUG printf("Votante desencolado: %s, %s\n", votante_espera->documento_tipo, votante_espera->documento_numero); #endif pila_t* ciclo_votacion = pila_crear(); lista_iter_t* lista_iter = lista_iter_crear(maquina->padron); if(!ciclo_votacion || !lista_iter) { if(ciclo_votacion) pila_destruir(ciclo_votacion, NULL); if(lista_iter) free(lista_iter); return error_manager(OTRO); } while(!lista_iter_al_final(lista_iter)) { votante_padron = lista_iter_ver_actual(lista_iter); if(votante_iguales(votante_padron, votante_espera)) { enpadronado = true; break; } lista_iter_avanzar(lista_iter); } lista_iter_destruir(lista_iter); votante_destruir(votante_espera); if(!enpadronado || votante_get_voto_realizado(votante_padron)) { pila_destruir(ciclo_votacion, NULL); return enpadronado ? error_manager(VOTO_REALIZADO) : error_manager(NO_ENPADRONADO); } votante_set_voto_realizado(votante_padron); maquina->estado = VOTACION; maquina->ciclo = ciclo_votacion; maquina->votando_cargo = PRESIDENTE; mostrar_menu_votacion(maquina); return true; }
/* Si recibe parametros validos, llama a funciones abrir de listas y padron. */ bool comando_abrir(maquina_votacion_t* maquina, char* entrada[]) { #ifdef DEBUG printf("Comando abrir ejecutado."); #endif if(!entrada[ENTRADA_LISTAS] || !entrada[ENTRADA_PADRON]) return error_manager(LECTURA); if(maquina->estado >= ABIERTA) return error_manager(MESA_ABIERTA); maquina->listas = cargar_csv_en_lista(maquina, entrada[ENTRADA_LISTAS], enlistar_partido); if(!maquina->listas) return false; maquina->padron = cargar_csv_en_lista(maquina, entrada[ENTRADA_PADRON], enlistar_votante); if(!maquina->padron) { lista_destruir(maquina->listas, votante_destruir); return false; } maquina->cantidad_partidos = lista_largo(maquina->listas); maquina->estado = ABIERTA; return true; }