flann 0.1.0

Bindings for the FLANN library
use raw::{flann_index_t, FLANNParameters};
use std::fmt::Debug;
use std::os::raw::{c_int, c_uint};

pub unsafe trait Indexable: Clone + Debug + Default {
    type ResultType: Clone + Debug + Default;

    unsafe fn build_index(
        dataset: *mut Self,
        rows: c_int,
        cols: c_int,
        speedup: *mut f32,
        flann_params: *mut FLANNParameters,
    ) -> flann_index_t;

    unsafe fn add_points(
        index_ptr: flann_index_t,
        points: *mut Self,
        rows: c_int,
        columns: c_int,
        rebuild_threshold: f32,
    ) -> c_int;

    unsafe fn remove_point(index_ptr: flann_index_t, point_id: c_uint) -> c_int;

    unsafe fn get_point(index_ptr: flann_index_t, point_id: c_uint) -> *mut Self;

    unsafe fn veclen(index_ptr: flann_index_t) -> c_uint;

    unsafe fn size(index_ptr: flann_index_t) -> c_uint;

    unsafe fn used_memory(index_ptr: flann_index_t) -> c_int;

    unsafe fn find_nearest_neighbors_index(
        index_id: flann_index_t,
        testset: *mut Self,
        trows: c_int,
        indices: *mut c_int,
        dists: *mut Self::ResultType,
        nn: c_int,
        flann_params: *mut FLANNParameters,
    ) -> c_int;

    unsafe fn radius_search(
        index_ptr: flann_index_t,
        query: *mut Self,
        indices: *mut c_int,
        dists: *mut Self::ResultType,
        max_nn: c_int,
        radius: f32,
        flann_params: *mut FLANNParameters,
    ) -> c_int;

    unsafe fn free_index(index_id: flann_index_t, flann_params: *mut FLANNParameters) -> c_int;
}