/** * librdf_iterator_add_map - Add a librdf_iterator mapping function * @iterator: the iterator * @fn: the function to operate * @free_context: the function to use to free the context (or NULL) * @map_context: the context to pass to the map function * * Adds an iterator mapping function which operates over the iterator to * select which elements are returned; it will be applied as soon as * this method is called. * * Several mapping functions can be added and they are applied in * the order given * * The mapping function should return non 0 to allow the element to be * returned. * * Return value: Non 0 on failure **/ int librdf_iterator_add_map(librdf_iterator* iterator, librdf_iterator_map_handler map_function, librdf_iterator_map_free_context_handler free_context, void *map_context) { librdf_iterator_map *map; if(!iterator->map_list) { iterator->map_list=librdf_new_list(iterator->world); if(!iterator->map_list) return 1; } map=(librdf_iterator_map*)LIBRDF_CALLOC(librdf_iterator_map, sizeof(librdf_iterator_map), 1); if(!map) return 1; map->fn=map_function; map->free_context=free_context; map->context=map_context; if(librdf_list_add(iterator->map_list, map)) { LIBRDF_FREE(librdf_iterator_map, map); return 1; } return 0; }
/** * librdf_stream_add_map: * @stream: the stream * @map_function: the function to perform the mapping * @free_context: the function to use to free the context (or NULL) * @map_context: the context to pass to the map function * * Add a librdf_stream mapping function. * * Adds an stream mapping function which operates over the stream to * select which elements are returned; it will be applied as soon as * this method is called. * * Several mapping functions can be added and they are applied in * the order given. * * The mapping function should return the statement to return, or NULL * to remove it from the stream. * * Return value: Non 0 on failure **/ int librdf_stream_add_map(librdf_stream* stream, librdf_stream_map_handler map_function, librdf_stream_map_free_context_handler free_context, void *map_context) { librdf_stream_map *map; if(!stream->map_list) { stream->map_list=librdf_new_list(stream->world); if(!stream->map_list) { if(free_context && map_context) (*free_context)(map_context); return 1; } } map=(librdf_stream_map*)LIBRDF_CALLOC(librdf_stream_map, sizeof(librdf_stream_map), 1); if(!map) { if(free_context && map_context) (*free_context)(map_context); return 1; } map->fn=map_function; map->free_context=free_context; map->context=map_context; if(librdf_list_add(stream->map_list, map)) { LIBRDF_FREE(librdf_stream_map, map); if(free_context && map_context) (*free_context)(map_context); return 1; } return 0; }