/*
 *  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;
}