null+****@clear*****
null+****@clear*****
2010年 6月 15日 (火) 08:58:06 JST
Daijiro MORI 2010-06-14 23:58:06 +0000 (Mon, 14 Jun 2010)
New Revision: 7831b522bbd35ad841bf3943c47025ae49d555df
Log:
Reduced grn_proc_get_info call from proc.c moreover.
Modified files:
lib/db.h
lib/expr.c
lib/proc.c
Modified: lib/db.h (+1 -1)
===================================================================
--- lib/db.h 2010-06-14 18:34:27 +0000 (e1a5c7f)
+++ lib/db.h 2010-06-14 23:58:06 +0000 (115b7d5)
@@ -181,7 +181,7 @@ struct _grn_proc {
#define GRN_PROC_GET_VAR(name) (grn_proc_get_var(ctx, user_data, name, strlen(name)))
#define GRN_PROC_GET_VAR_BY_OFFSET(offset) (grn_proc_get_var_by_offset(ctx, user_data, offset))
-#define GRN_PROC_ALLOC(offset) (grn_proc_alloc(ctx, user_data, domain, flags))
+#define GRN_PROC_ALLOC(domain, flags) (grn_proc_alloc(ctx, user_data, domain, flags))
grn_obj *grn_proc_get_var(grn_ctx *ctx, grn_user_data *user_data,
const char *name, unsigned name_size);
Modified: lib/expr.c (+7 -5)
===================================================================
--- lib/expr.c 2010-06-14 18:34:27 +0000 (8b8c7d2)
+++ lib/expr.c 2010-06-14 23:58:06 +0000 (8188894)
@@ -98,12 +98,14 @@ grn_proc_get_info(grn_ctx *ctx, grn_user_data *user_data,
grn_proc_ctx *pctx = (grn_proc_ctx *)user_data;
if (caller) { *caller = pctx->caller; }
if (pctx->proc) {
- *vars = pctx->proc->vars;
- *nvars = pctx->proc->nvars;
- // *vars = grn_expr_get_vars(ctx, (grn_obj *)pctx->proc, nvars);
+ if (vars) {
+ *vars = pctx->proc->vars;
+ // *vars = grn_expr_get_vars(ctx, (grn_obj *)pctx->proc, nvars);
+ }
+ if (nvars) { *nvars = pctx->proc->nvars; }
} else {
- *vars = NULL;
- *nvars = 0;
+ if (vars) { *vars = NULL; }
+ if (nvars) { *nvars = 0; }
}
return (grn_obj *)pctx->proc;
}
Modified: lib/proc.c (+18 -51)
===================================================================
--- lib/proc.c 2010-06-14 18:34:27 +0000 (8a28640)
+++ lib/proc.c 2010-06-14 23:58:06 +0000 (9a1f63e)
@@ -92,35 +92,24 @@ proc_define_selector(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *use
{
uint32_t nvars;
grn_expr_var *vars;
-
grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL);
-
- if (nvars == 17) {
- grn_proc_create(ctx,
- GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)),
- GRN_PROC_COMMAND, proc_select, NULL, NULL, nvars - 1, vars + 1);
- } else {
- ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 16);
- }
+ grn_proc_create(ctx,
+ GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)),
+ GRN_PROC_COMMAND, proc_select, NULL, NULL, nvars - 1, vars + 1);
return NULL;
}
static grn_obj *
proc_load(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
{
- uint32_t nvars;
grn_obj *outbuf = ctx->impl->outbuf;
- grn_expr_var *vars;
-
- grn_obj *proc = grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL);
-
grn_load(ctx, grn_get_ctype(VAR(4)),
GRN_TEXT_VALUE(VAR(1)), GRN_TEXT_LEN(VAR(1)),
GRN_TEXT_VALUE(VAR(2)), GRN_TEXT_LEN(VAR(2)),
GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)),
GRN_TEXT_VALUE(VAR(3)), GRN_TEXT_LEN(VAR(3)));
if (ctx->impl->loader.stat != GRN_LOADER_END) {
- grn_ctx_set_next_expr(ctx, proc);
+ grn_ctx_set_next_expr(ctx, grn_proc_get_info(ctx, user_data, NULL, NULL, NULL));
} else {
grn_text_itoa(ctx, outbuf, ctx->impl->loader.nrecords);
if (ctx->impl->loader.table) {
@@ -1702,17 +1691,14 @@ static grn_obj *
func_rand(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
{
int val;
- grn_obj *obj, *caller;
- uint32_t nvars;
- grn_expr_var *vars;
- grn_proc_get_info(ctx, user_data, &vars, &nvars, &caller);
+ grn_obj *obj;
if (nargs > 0) {
int max = GRN_INT32_VALUE(args[0]);
val = (int) (1.0 * max * rand() / (RAND_MAX + 1.0));
} else {
val = rand();
}
- if ((obj = grn_expr_alloc(ctx, caller, GRN_DB_INT32, 0))) {
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_INT32, 0))) {
GRN_INT32_SET(ctx, obj, val);
}
return obj;
@@ -1721,11 +1707,8 @@ func_rand(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
static grn_obj *
func_now(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
{
- uint32_t nvars;
- grn_expr_var *vars;
- grn_obj *obj, *caller;
- grn_proc_get_info(ctx, user_data, &vars, &nvars, &caller);
- if ((obj = grn_expr_alloc(ctx, caller, GRN_DB_TIME, 0))) {
+ grn_obj *obj;
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_TIME, 0))) {
GRN_TIME_NOW(ctx, obj);
}
return obj;
@@ -1744,11 +1727,8 @@ func_now(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
static grn_obj *
func_geo_in_circle(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
{
- grn_obj *obj, *caller;
- uint32_t nvars;
- grn_expr_var *vars;
+ grn_obj *obj;
unsigned char r = GRN_FALSE;
- grn_proc_get_info(ctx, user_data, &vars, &nvars, &caller);
if (nargs == 3) {
grn_obj *pos = args[0], *pos1 = args[1], *pos2 = args[2], pos1_, pos2_;
grn_id domain = pos->header.domain;
@@ -1804,7 +1784,7 @@ func_geo_in_circle(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_
}
}
exit :
- if ((obj = grn_expr_alloc(ctx, caller, GRN_DB_UINT32, 0))) {
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_UINT32, 0))) {
GRN_UINT32_SET(ctx, obj, r);
}
return obj;
@@ -1813,11 +1793,8 @@ exit :
static grn_obj *
func_geo_in_rectangle(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
{
- grn_obj *obj, *caller;
- uint32_t nvars;
- grn_expr_var *vars;
+ grn_obj *obj;
unsigned char r = GRN_FALSE;
- grn_proc_get_info(ctx, user_data, &vars, &nvars, &caller);
if (nargs == 3) {
grn_obj *pos = args[0], *pos1 = args[1], *pos2 = args[2], pos1_, pos2_;
grn_geo_point *p, *p1, *p2;
@@ -1841,7 +1818,7 @@ func_geo_in_rectangle(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *us
}
}
exit :
- if ((obj = grn_expr_alloc(ctx, caller, GRN_DB_UINT32, 0))) {
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_UINT32, 0))) {
GRN_UINT32_SET(ctx, obj, r);
}
return obj;
@@ -1850,11 +1827,8 @@ exit :
static grn_obj *
func_geo_distance(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
{
- grn_obj *obj, *caller;
- uint32_t nvars;
- grn_expr_var *vars;
+ grn_obj *obj;
double d = 0;
- grn_proc_get_info(ctx, user_data, &vars, &nvars, &caller);
if (nargs == 2) {
grn_obj *pos = args[0], *pos1 = args[1], pos1_;
grn_id domain = pos->header.domain;
@@ -1875,7 +1849,7 @@ func_geo_distance(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_d
}
}
exit :
- if ((obj = grn_expr_alloc(ctx, caller, GRN_DB_FLOAT, 0))) {
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_FLOAT, 0))) {
GRN_FLOAT_SET(ctx, obj, d);
}
return obj;
@@ -1884,11 +1858,8 @@ exit :
static grn_obj *
func_geo_distance2(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
{
- grn_obj *obj, *caller;
- uint32_t nvars;
- grn_expr_var *vars;
+ grn_obj *obj;
double d = 0;
- grn_proc_get_info(ctx, user_data, &vars, &nvars, &caller);
if (nargs == 2) {
grn_obj *pos = args[0], *pos1 = args[1], pos1_;
grn_id domain = pos->header.domain;
@@ -1909,7 +1880,7 @@ func_geo_distance2(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_
}
}
exit :
- if ((obj = grn_expr_alloc(ctx, caller, GRN_DB_FLOAT, 0))) {
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_FLOAT, 0))) {
GRN_FLOAT_SET(ctx, obj, d);
}
return obj;
@@ -1918,12 +1889,8 @@ exit :
static grn_obj *
func_geo_distance3(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
{
- grn_obj *obj, *caller;
- uint32_t nvars;
- grn_expr_var *vars;
+ grn_obj *obj;
double d = 0;
- grn_proc_get_info(ctx, user_data, &vars, &nvars, &caller);
-
if (nargs == 2) {
grn_obj *pos = args[0], *pos1 = args[1], pos1_;
grn_id domain = pos->header.domain;
@@ -1978,7 +1945,7 @@ func_geo_distance3(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_
}
}
exit :
- if ((obj = grn_expr_alloc(ctx, caller, GRN_DB_FLOAT, 0))) {
+ if ((obj = GRN_PROC_ALLOC(GRN_DB_FLOAT, 0))) {
GRN_FLOAT_SET(ctx, obj, d);
}
return obj;