Skip to content

Instantly share code, notes, and snippets.

@colltoaction
Last active August 29, 2015 14:07
Show Gist options
  • Save colltoaction/c7348efb36cc115d8b85 to your computer and use it in GitHub Desktop.
Save colltoaction/c7348efb36cc115d8b85 to your computer and use it in GitHub Desktop.
Ejemplos de iterador interno
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;
}
// 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