/* * call-seq: * Searcher.new(obj) -> Searcher * * Create a new Searcher object. +dir+ can either be a string path to an * index directory on the file-sytem, an actual Ferret::Store::Directory * object or a Ferret::Index::IndexReader. You should use the IndexReader for * searching multiple indexes. Just open the IndexReader on multiple * directories. */ static VALUE frt_sea_init(VALUE self, VALUE obj) { Store *store = NULL; IndexReader *ir = NULL; Searcher *sea; if (TYPE(obj) == T_STRING) { frt_create_dir(obj); store = open_fs_store(StringValueCStr(obj)); ir = ir_open(store); DEREF(store); FRT_GET_IR(obj, ir); } else { Check_Type(obj, T_DATA); if (rb_obj_is_kind_of(obj, cDirectory) == Qtrue) { Data_Get_Struct(obj, Store, store); ir = ir_open(store); FRT_GET_IR(obj, ir); } else if (rb_obj_is_kind_of(obj, cIndexReader) == Qtrue) { Data_Get_Struct(obj, IndexReader, ir); } else { rb_raise(rb_eArgError, "Unknown type for argument to IndexSearcher.new"); } } sea = isea_new(ir); ((IndexSearcher *)sea)->close_ir = false; Frt_Wrap_Struct(self, &frt_sea_mark, &frt_sea_free, sea); object_add(sea, self); return self; }