grn_ra * grn_ra_open(grn_ctx *ctx, const char *path) { grn_io *io; int n_elm, w_elm; grn_ra *ra = NULL; struct grn_ra_header *header; io = grn_io_open(ctx, path, grn_io_auto); if (!io) { return NULL; } header = grn_io_header(io); if (grn_io_get_type(io) != GRN_COLUMN_FIX_SIZE) { ERR(GRN_INVALID_FORMAT, "file type unmatch"); grn_io_close(ctx, io); return NULL; } if (!(ra = GRN_GMALLOC(sizeof(grn_ra)))) { grn_io_close(ctx, io); return NULL; } n_elm = GRN_RA_SEGMENT_SIZE / header->element_size; for (w_elm = 22; (1 << w_elm) > n_elm; w_elm--); GRN_DB_OBJ_SET_TYPE(ra, GRN_COLUMN_FIX_SIZE); ra->io = io; ra->header = header; ra->element_mask = n_elm - 1; ra->element_width = w_elm; return ra; }
grn_dat * grn_dat_open(grn_ctx *ctx, const char *path) { if (path && (std::strlen(path) >= (PATH_MAX - (FILE_ID_LENGTH + 1)))) { ERR(GRN_FILENAME_TOO_LONG, "too long path"); return NULL; } grn_dat * const dat = static_cast<grn_dat *>(GRN_MALLOC(sizeof(grn_dat))); if (!dat) { return NULL; } grn_dat_init(ctx, dat); dat->io = grn_io_open(ctx, path, grn_io_auto); if (!dat->io) { GRN_FREE(dat); return NULL; } dat->header = (struct grn_dat_header *)grn_io_header(dat->io); if (!dat->header) { grn_io_close(ctx, dat->io); GRN_FREE(dat); return NULL; } dat->file_id = dat->header->file_id; dat->encoding = dat->header->encoding; dat->obj.header.flags = dat->header->flags; dat->tokenizer = grn_ctx_at(ctx, dat->header->tokenizer); return dat; }
grn_ja * grn_ja_open(grn_ctx *ctx, const char *path) { grn_io *io; grn_ja *ja = NULL; struct grn_ja_header *header; io = grn_io_open(ctx, path, grn_io_auto); if (!io) { return NULL; } header = grn_io_header(io); if (grn_io_get_type(io) != GRN_COLUMN_VAR_SIZE) { ERR(GRN_INVALID_FORMAT, "file type unmatch"); grn_io_close(ctx, io); return NULL; } if (!(ja = GRN_GMALLOC(sizeof(grn_ja)))) { grn_io_close(ctx, io); return NULL; } GRN_DB_OBJ_SET_TYPE(ja, GRN_COLUMN_VAR_SIZE); ja->io = io; ja->header = header; return ja; }