Last active
August 29, 2015 14:07
-
-
Save colltoaction/c7348efb36cc115d8b85 to your computer and use it in GitHub Desktop.
Ejemplos de iterador interno
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct paramentro_buscador_de_persona { | |
char* nombre; | |
persona_t* salida; | |
}; | |
// Función usada para buscar una persona con un nombre usando | |
// struct paramentro_buscador_de_persona como extra | |
bool buscador_de_persona(void* dato, void* extra){ | |
struct paramentro_buscador_de_persona* param = extra; | |
char* nombre = param->nombre; | |
persona_t* persona = dato; | |
if (strcmp(persona_nombre(persona),nombre) == 0){ | |
param->salida = persona; | |
return false; | |
} | |
return true; | |
} | |
/*Recibe el sistema y un nombre, busca si la persona con ese nombre esta en el sistema, si la encuentra devuelve a la persona, si no la encuentra o falla devuelve NULL*/ | |
persona_t* sistema_buscar_persona(lista_t* sistema,char* nombre){ | |
struct paramentro_buscador_de_persona extra = { .nombre = nombre }; | |
lista_iterar(sistema, buscador_de_persona, &extra); | |
return extra.salida; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Función usada para buscar una persona con un nombre usando | |
// un vector extra { nombre, salida } | |
bool buscador_de_persona(void* dato, void* extra){ | |
char* nombre = ((void**)extra)[0]; | |
persona_t* persona = dato; | |
if (strcmp(persona_nombre(persona),nombre) == 0){ | |
((void**)extra)[1] = persona; | |
return false; | |
} | |
return true; | |
} | |
/*Recibe el sistema y un nombre, busca si la persona con ese nombre esta en el sistema, si la encuentra devuelve a la persona, si no la encuentra o falla devuelve NULL*/ | |
persona_t* sistema_buscar_persona(lista_t* sistema,char* nombre){ | |
void* extra[2] = { nombre }; | |
lista_iterar(sistema, buscador_de_persona, &extra); | |
return extra[1]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment