Sha256: edc944a2cf22ea95ce80394b6d92636c48a69fae2582687034972e2021339f63

Contents?: true

Size: 1005 Bytes

Versions: 2

Compression:

Stored size: 1005 Bytes

Contents

module Rcf
  class Forest
    def initialize(dimensions, shingle_size: 1, sample_size: 256, number_of_trees: 100, random_seed: 42, parallel: false)
      @dimensions = dimensions

      @pointer = FFI.rcf_create(dimensions)
      @pointer.free = FFI["rcf_free"]

      set_param("shingle_size", shingle_size)
      set_param("sample_size", sample_size)
      set_param("number_of_trees", number_of_trees)
      set_param("random_seed", random_seed)
      set_param("parallel", parallel)
    end

    def score(point)
      FFI.rcf_score(@pointer, point_ptr(point))
    end

    def update(point)
      FFI.rcf_update(@pointer, point_ptr(point))
    end

    private

    def set_param(param, value)
      if FFI.rcf_set_param(@pointer, param, value.to_s) != 0
        raise ArgumentError, "Invalid value for #{param}"
      end
    end

    def point_ptr(point)
      if point.size != @dimensions
        raise ArgumentError, "Bad size"
      end
      Fiddle::Pointer[point.pack("f*")]
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rcf-0.2.0 lib/rcf/forest.rb
rcf-0.1.2 lib/rcf/forest.rb