示例#1
0
文件: FileHandle.c 项目: apache/lucy
FileHandle*
FH_do_open(FileHandle *self, String *path, uint32_t flags) {
    // Track number of live FileHandles released into the wild.
    FH_object_count++;

    // Check flags.
    uint32_t rw_flags = flags & (FH_READ_ONLY | FH_WRITE_ONLY);
    if (rw_flags == 0) {
        ErrMsg_set("Must specify FH_READ_ONLY or FH_WRITE_ONLY to open '%o'",
                   path);
        DECREF(self);
        return NULL;
    }
    else if (rw_flags == (FH_READ_ONLY | FH_WRITE_ONLY)) {
        ErrMsg_set("Can't specify both FH_READ_ONLY and FH_WRITE_ONLY to"
                   " open '%o'", path);
        DECREF(self);
        return NULL;
    }
    if ((flags & (FH_CREATE | FH_EXCLUSIVE)) == FH_EXCLUSIVE) {
        ErrMsg_set("Can't specify FH_EXCLUSIVE without FH_CREATE to"
                   " open '%o' ", path);
        DECREF(self);
        return NULL;
    }

    FileHandleIVARS *const ivars = FH_IVARS(self);
    ivars->path    = path ? Str_Clone(path) : Str_new_from_trusted_utf8("", 0);
    ivars->flags   = flags;

    ABSTRACT_CLASS_CHECK(self, FILEHANDLE);
    return self;
}
示例#2
0
NumericSortCache*
NumSortCache_init(NumericSortCache *self, const CharBuf *field,
                  FieldType *type, int32_t cardinality, int32_t doc_max,
                  int32_t null_ord, int32_t ord_width, InStream *ord_in,
                  InStream *dat_in) {
    // Validate.
    if (!type || !FType_Sortable(type) || !FType_Is_A(type, NUMERICTYPE)) {
        DECREF(self);
        THROW(ERR, "'%o' isn't a sortable NumericType field", field);
    }

    // Mmap ords and super-init.
    int64_t  ord_len = InStream_Length(ord_in);
    void    *ords    = InStream_Buf(ord_in, (size_t)ord_len);
    SortCache_init((SortCache*)self, field, type, ords, cardinality, doc_max,
                   null_ord, ord_width);

    // Assign.
    self->ord_in = (InStream*)INCREF(ord_in);
    self->dat_in = (InStream*)INCREF(dat_in);

    // Validate ord file length.
    double BITS_PER_BYTE = 8.0;
    double docs_per_byte = BITS_PER_BYTE / self->ord_width;
    double max_ords      = ord_len * docs_per_byte;
    if (max_ords < self->doc_max + 1) {
        DECREF(self);
        THROW(ERR, "Conflict between ord count max %f64 and doc_max %i32 for "
              "field %o", max_ords, self->doc_max, field);
    }

    ABSTRACT_CLASS_CHECK(self, NUMERICSORTCACHE);
    return self;
}
示例#3
0
DeletionsWriter*
DelWriter_init(DeletionsWriter *self, Schema *schema, Snapshot *snapshot,
               Segment *segment, PolyReader *polyreader) {
    DataWriter_init((DataWriter*)self, schema, snapshot, segment, polyreader);
    ABSTRACT_CLASS_CHECK(self, DELETIONSWRITER);
    return self;
}
示例#4
0
void
Compiler_serialize(Compiler *self, OutStream *outstream) {
    ABSTRACT_CLASS_CHECK(self, COMPILER);
    OutStream_Write_F32(outstream, self->boost);
    FREEZE(self->parent, outstream);
    FREEZE(self->sim, outstream);
}
示例#5
0
HighlightReader*
HLReader_init(HighlightReader *self, Schema *schema, Folder *folder,
              Snapshot *snapshot, VArray *segments, int32_t seg_tick) {
    DataReader_init((DataReader*)self, schema, folder, snapshot, segments,
                    seg_tick);
    ABSTRACT_CLASS_CHECK(self, HIGHLIGHTREADER);
    return self;
}
示例#6
0
文件: DirHandle.c 项目: theory/lucy
DirHandle*
DH_init(DirHandle *self, const CharBuf *dir) {
    DirHandleIVARS *const ivars = DH_IVARS(self);
    ivars->dir   = CB_Clone(dir);
    ivars->entry = CB_new(32);
    ABSTRACT_CLASS_CHECK(self, DIRHANDLE);
    return self;
}
示例#7
0
LexiconReader*
LexReader_init(LexiconReader *self, Schema *schema, Folder *folder,
               Snapshot *snapshot, VArray *segments, int32_t seg_tick) {
    DataReader_init((DataReader*)self, schema, folder, snapshot, segments,
                    seg_tick);
    ABSTRACT_CLASS_CHECK(self, LEXICONREADER);
    return self;
}
示例#8
0
文件: DirHandle.c 项目: apache/lucy
DirHandle*
DH_init(DirHandle *self, String *dir) {
    DirHandleIVARS *const ivars = DH_IVARS(self);
    ivars->dir   = Str_Clone(dir);
    ivars->entry = NULL;
    ABSTRACT_CLASS_CHECK(self, DIRHANDLE);
    return self;
}
示例#9
0
FieldType*
FType_init2(FieldType *self, float boost, bool indexed, bool stored,
            bool sortable) {
    FieldTypeIVARS *const ivars = FType_IVARS(self);
    ivars->boost             = boost;
    ivars->indexed           = indexed;
    ivars->stored            = stored;
    ivars->sortable          = sortable;
    ABSTRACT_CLASS_CHECK(self, FIELDTYPE);
    return self;
}
示例#10
0
FileHandle*
FH_do_open(FileHandle *self, const CharBuf *path, uint32_t flags) {
    self->path    = path ? CB_Clone(path) : CB_new(0);
    self->flags   = flags;

    // Track number of live FileHandles released into the wild.
    FH_object_count++;

    ABSTRACT_CLASS_CHECK(self, FILEHANDLE);
    return self;
}
示例#11
0
文件: DataWriter.c 项目: apache/lucy
DataWriter*
DataWriter_init(DataWriter *self, Schema *schema, Snapshot *snapshot,
                Segment *segment, PolyReader *polyreader) {
    DataWriterIVARS *const ivars = DataWriter_IVARS(self);
    ivars->snapshot   = (Snapshot*)INCREF(snapshot);
    ivars->segment    = (Segment*)INCREF(segment);
    ivars->polyreader = (PolyReader*)INCREF(polyreader);
    ivars->schema     = (Schema*)INCREF(schema);
    ivars->folder     = (Folder*)INCREF(PolyReader_Get_Folder(polyreader));
    ABSTRACT_CLASS_CHECK(self, DATAWRITER);
    return self;
}
示例#12
0
Compiler*
Compiler_init(Compiler *self, Query *parent, Searcher *searcher,
              Similarity *sim, float boost) {
    Query_init((Query*)self, boost);
    if (!sim) {
        Schema *schema = Searcher_Get_Schema(searcher);
        sim = Schema_Get_Similarity(schema);
    }
    self->parent  = (Query*)INCREF(parent);
    self->sim     = (Similarity*)INCREF(sim);
    ABSTRACT_CLASS_CHECK(self, COMPILER);
    return self;
}
示例#13
0
PriorityQueue*
PriQ_init(PriorityQueue *self, uint32_t max_size) {
    PriorityQueueIVARS *const ivars = PriQ_IVARS(self);
    if (max_size == UINT32_MAX) {
        THROW(ERR, "max_size too large: %u32", max_size);
    }
    uint32_t heap_size = max_size + 1;

    // Init.
    ivars->size = 0;

    // Assign.
    ivars->max_size = max_size;

    // Allocate space for the heap, assign all slots to NULL.
    ivars->heap = (Obj**)CALLOCATE(heap_size, sizeof(Obj*));

    ABSTRACT_CLASS_CHECK(self, PRIORITYQUEUE);
    return self;
}
示例#14
0
文件: SortExternal.c 项目: kidaa/lucy
SortExternal*
SortEx_init(SortExternal *self) {
    SortExternalIVARS *const ivars = SortEx_IVARS(self);

    ivars->mem_thresh   = UINT32_MAX;
    ivars->buffer       = NULL;
    ivars->buf_cap      = 0;
    ivars->buf_max      = 0;
    ivars->buf_tick     = 0;
    ivars->scratch      = NULL;
    ivars->scratch_cap  = 0;
    ivars->runs         = Vec_new(0);
    ivars->slice_sizes  = NULL;
    ivars->slice_starts = NULL;
    ivars->num_slices   = 0;
    ivars->flipped      = false;

    ABSTRACT_CLASS_CHECK(self, SORTEXTERNAL);
    return self;
}
示例#15
0
文件: Folder.c 项目: pavansondur/lucy
Folder*
Folder_init(Folder *self, const CharBuf *path) {
    // Init.
    self->entries = Hash_new(16);

    // Copy.
    if (path == NULL) {
        self->path = CB_new_from_trusted_utf8("", 0);
    }
    else {
        // Copy path, strip trailing slash or equivalent.
        self->path = CB_Clone(path);
        if (CB_Ends_With_Str(self->path, DIR_SEP, strlen(DIR_SEP))) {
            CB_Chop(self->path, 1);
        }
    }

    ABSTRACT_CLASS_CHECK(self, FOLDER);
    return self;
}
示例#16
0
SortExternal*
SortEx_init(SortExternal *self, size_t width) {
    SortExternalIVARS *const ivars = SortEx_IVARS(self);
    // Assign.
    ivars->width        = width;

    // Init.
    ivars->mem_thresh   = UINT32_MAX;
    ivars->cache        = NULL;
    ivars->cache_cap    = 0;
    ivars->cache_max    = 0;
    ivars->cache_tick   = 0;
    ivars->scratch      = NULL;
    ivars->scratch_cap  = 0;
    ivars->runs         = VA_new(0);
    ivars->slice_sizes  = NULL;
    ivars->slice_starts = NULL;
    ivars->num_slices   = 0;
    ivars->flipped      = false;

    ABSTRACT_CLASS_CHECK(self, SORTEXTERNAL);
    return self;
}
示例#17
0
文件: SortCache.c 项目: apache/lucy
SortCache*
SortCache_init(SortCache *self, String *field, FieldType *type,
               const void *ords, int32_t cardinality, int32_t doc_max,
               int32_t null_ord, int32_t ord_width) {
    SortCacheIVARS *const ivars = SortCache_IVARS(self);

    // Init.
    ivars->native_ords = false;

    // Assign.
    if (!FType_Sortable(type)) {
        THROW(ERR, "Non-sortable FieldType for %o", field);
    }
    ivars->field       = Str_Clone(field);
    ivars->type        = (FieldType*)INCREF(type);
    ivars->ords        = ords;
    ivars->cardinality = cardinality;
    ivars->doc_max     = doc_max;
    ivars->null_ord    = null_ord;
    ivars->ord_width   = ord_width;

    ABSTRACT_CLASS_CHECK(self, SORTCACHE);
    return self;
}
示例#18
0
文件: Obj.c 项目: pavansondur/lucy
Obj*
Obj_init(Obj *self) {
    ABSTRACT_CLASS_CHECK(self, OBJ);
    return self;
}
示例#19
0
文件: Query.c 项目: hernan604/lucy
Query*
Query_init(Query *self, float boost) {
    Query_IVARS(self)->boost = boost;
    ABSTRACT_CLASS_CHECK(self, QUERY);
    return self;
}
示例#20
0
文件: Num.c 项目: theory/lucy
Num*
Num_init(Num *self) {
    ABSTRACT_CLASS_CHECK(self, NUM);
    return self;
}
示例#21
0
文件: Matcher.c 项目: theory/lucy
Matcher*
Matcher_init(Matcher *self) {
    ABSTRACT_CLASS_CHECK(self, MATCHER);
    return self;
}
示例#22
0
文件: Num.c 项目: theory/lucy
IntNum*
IntNum_init(IntNum *self) {
    ABSTRACT_CLASS_CHECK(self, INTNUM);
    return (IntNum*)Num_init((Num*)self);
}
示例#23
0
文件: Num.c 项目: theory/lucy
FloatNum*
FloatNum_init(FloatNum *self) {
    ABSTRACT_CLASS_CHECK(self, FLOATNUM);
    return (FloatNum*)Num_init((Num*)self);
}