[Groonga-commit] groonga/groonga at 4a765d4 [master] grn_ts: simplify grn_ts_expr_push_const()

Back to archive index

susumu.yata null+****@clear*****
Thu Nov 12 17:55:52 JST 2015


susumu.yata	2015-11-12 17:55:52 +0900 (Thu, 12 Nov 2015)

  New Revision: 4a765d41b2b29ed4db2439cb5d843b125266b357
  https://github.com/groonga/groonga/commit/4a765d41b2b29ed4db2439cb5d843b125266b357

  Message:
    grn_ts: simplify grn_ts_expr_push_const()

  Modified files:
    lib/ts/ts_expr.c

  Modified: lib/ts/ts_expr.c (+44 -74)
===================================================================
--- lib/ts/ts_expr.c    2015-11-12 17:37:24 +0900 (a87221e)
+++ lib/ts/ts_expr.c    2015-11-12 17:55:52 +0900 (a0d074c)
@@ -602,39 +602,26 @@ grn_ts_expr_push_value(grn_ctx *ctx, grn_ts_expr *expr) {
   return rc;
 }
 
-#define GRN_TS_EXPR_PUSH_CONST_CASE(KIND, kind)\
-  case GRN_TS_ ## KIND: {\
-    return grn_ts_expr_push_ ## kind(ctx, expr,\
-                                     *(const grn_ts_ ## kind *)value);\
-  }
 grn_rc
 grn_ts_expr_push_const(grn_ctx *ctx, grn_ts_expr *expr,
                        grn_ts_data_kind kind, const void *value) {
+  grn_rc rc;
+  grn_ts_expr_node *node;
   if (!ctx) {
     return GRN_INVALID_ARGUMENT;
   }
   if (!expr || (expr->type != GRN_TS_EXPR_INCOMPLETE) || !value) {
     GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid argument");
   }
-  switch (kind) {
-    GRN_TS_EXPR_PUSH_CONST_CASE(BOOL, bool)
-    GRN_TS_EXPR_PUSH_CONST_CASE(INT, int)
-    GRN_TS_EXPR_PUSH_CONST_CASE(FLOAT, float)
-    GRN_TS_EXPR_PUSH_CONST_CASE(TIME, time)
-    GRN_TS_EXPR_PUSH_CONST_CASE(TEXT, text)
-    GRN_TS_EXPR_PUSH_CONST_CASE(GEO, geo)
-    GRN_TS_EXPR_PUSH_CONST_CASE(BOOL_VECTOR, bool_vector)
-    GRN_TS_EXPR_PUSH_CONST_CASE(INT_VECTOR, int_vector)
-    GRN_TS_EXPR_PUSH_CONST_CASE(FLOAT_VECTOR, float_vector)
-    GRN_TS_EXPR_PUSH_CONST_CASE(TIME_VECTOR, time_vector)
-    GRN_TS_EXPR_PUSH_CONST_CASE(TEXT_VECTOR, text_vector)
-    GRN_TS_EXPR_PUSH_CONST_CASE(GEO_VECTOR, geo_vector)
-    default: {
-      GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid data kind: %d", kind);
+  rc = grn_ts_expr_reserve_stack(ctx, expr);
+  if (rc == GRN_SUCCESS) {
+    rc = grn_ts_expr_const_node_open(ctx, kind, value, &node);
+    if (rc == GRN_SUCCESS) {
+      expr->stack[expr->stack_depth++] = node;
     }
   }
+  return rc;
 }
-#undef GRN_TS_EXPR_PUSH_CONST_CASE
 
 grn_rc
 grn_ts_expr_push_column(grn_ctx *ctx, grn_ts_expr *expr, grn_obj *column) {
@@ -701,130 +688,113 @@ grn_ts_expr_push_op(grn_ctx *ctx, grn_ts_expr *expr, grn_ts_op_type op_type) {
   return rc;
 }
 
-#define GRN_TS_EXPR_PUSH_CONST(KIND, kind)\
-  grn_rc rc;\
-  grn_ts_expr_node *node;\
-  if (!ctx) {\
-    return GRN_INVALID_ARGUMENT;\
-  }\
-  if (!expr || (expr->type != GRN_TS_EXPR_INCOMPLETE)) {\
-    GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid argument");\
-  }\
-  rc = grn_ts_expr_reserve_stack(ctx, expr);\
-  if (rc == GRN_SUCCESS) {\
-    rc = grn_ts_expr_const_node_open(ctx, GRN_TS_ ## KIND, &value, &node);\
-    if (rc == GRN_SUCCESS) {\
-      expr->stack[expr->stack_depth++] = node;\
-    }\
-  }
 grn_rc
 grn_ts_expr_push_bool(grn_ctx *ctx, grn_ts_expr *expr, grn_ts_bool value) {
-  GRN_TS_EXPR_PUSH_CONST(BOOL, bool)
-  return rc;
+  return grn_ts_expr_push_const(ctx, expr, GRN_TS_BOOL, &value);
 }
 
 grn_rc
 grn_ts_expr_push_int(grn_ctx *ctx, grn_ts_expr *expr, grn_ts_int value) {
-  GRN_TS_EXPR_PUSH_CONST(INT, int)
-  return rc;
+  return grn_ts_expr_push_const(ctx, expr, GRN_TS_INT, &value);
 }
 
 grn_rc
 grn_ts_expr_push_float(grn_ctx *ctx, grn_ts_expr *expr, grn_ts_float value) {
-  GRN_TS_EXPR_PUSH_CONST(FLOAT, float)
-  return rc;
+  return grn_ts_expr_push_const(ctx, expr, GRN_TS_FLOAT, &value);
 }
 
 grn_rc
 grn_ts_expr_push_time(grn_ctx *ctx, grn_ts_expr *expr, grn_ts_time value) {
-  GRN_TS_EXPR_PUSH_CONST(TIME, time)
-  return rc;
+  return grn_ts_expr_push_const(ctx, expr, GRN_TS_TIME, &value);
 }
 
 grn_rc
 grn_ts_expr_push_text(grn_ctx *ctx, grn_ts_expr *expr, grn_ts_text value) {
-  GRN_TS_EXPR_PUSH_CONST(TEXT, text)
-  return rc;
+  return grn_ts_expr_push_const(ctx, expr, GRN_TS_TEXT, &value);
 }
 
 grn_rc
 grn_ts_expr_push_geo(grn_ctx *ctx, grn_ts_expr *expr, grn_ts_geo value) {
-  GRN_TS_EXPR_PUSH_CONST(GEO, geo)
-  return rc;
+  return grn_ts_expr_push_const(ctx, expr, GRN_TS_GEO, &value);
 }
 
 grn_rc
 grn_ts_expr_push_tokyo_geo(grn_ctx *ctx, grn_ts_expr *expr, grn_ts_geo value) {
-  GRN_TS_EXPR_PUSH_CONST(GEO, geo)
-  node->data_type = GRN_DB_TOKYO_GEO_POINT;
-  return rc;
+  grn_rc rc = grn_ts_expr_push_const(ctx, expr, GRN_TS_GEO, &value);
+  if (rc != GRN_SUCCESS) {
+    return rc;
+  }
+  expr->stack[expr->stack_depth - 1]->data_type = GRN_DB_TOKYO_GEO_POINT;
+  return GRN_SUCCESS;
 }
 
 grn_rc
 grn_ts_expr_push_wgs84_geo(grn_ctx *ctx, grn_ts_expr *expr, grn_ts_geo value) {
-  GRN_TS_EXPR_PUSH_CONST(GEO, geo)
-  node->data_type = GRN_DB_WGS84_GEO_POINT;
-  return rc;
+  grn_rc rc = grn_ts_expr_push_const(ctx, expr, GRN_TS_GEO, &value);
+  if (rc != GRN_SUCCESS) {
+    return rc;
+  }
+  expr->stack[expr->stack_depth - 1]->data_type = GRN_DB_WGS84_GEO_POINT;
+  return GRN_SUCCESS;
 }
 
 grn_rc
 grn_ts_expr_push_bool_vector(grn_ctx *ctx, grn_ts_expr *expr,
                              grn_ts_bool_vector value) {
-  GRN_TS_EXPR_PUSH_CONST(BOOL_VECTOR, bool_vector)
-  return rc;
+  return grn_ts_expr_push_const(ctx, expr, GRN_TS_BOOL_VECTOR, &value);
 }
 
 grn_rc
 grn_ts_expr_push_int_vector(grn_ctx *ctx, grn_ts_expr *expr,
                             grn_ts_int_vector value) {
-  GRN_TS_EXPR_PUSH_CONST(INT_VECTOR, int_vector)
-  return rc;
+  return grn_ts_expr_push_const(ctx, expr, GRN_TS_INT_VECTOR, &value);
 }
 
 grn_rc
 grn_ts_expr_push_float_vector(grn_ctx *ctx, grn_ts_expr *expr,
                               grn_ts_float_vector value) {
-  GRN_TS_EXPR_PUSH_CONST(FLOAT_VECTOR, float_vector)
-  return rc;
+  return grn_ts_expr_push_const(ctx, expr, GRN_TS_FLOAT_VECTOR, &value);
 }
 
 grn_rc
 grn_ts_expr_push_time_vector(grn_ctx *ctx, grn_ts_expr *expr,
                              grn_ts_time_vector value) {
-  GRN_TS_EXPR_PUSH_CONST(TIME_VECTOR, time_vector)
-  return rc;
+  return grn_ts_expr_push_const(ctx, expr, GRN_TS_TIME_VECTOR, &value);
 }
 
 grn_rc
 grn_ts_expr_push_text_vector(grn_ctx *ctx, grn_ts_expr *expr,
                              grn_ts_text_vector value) {
-  GRN_TS_EXPR_PUSH_CONST(TEXT_VECTOR, text_vector)
-  return rc;
+  return grn_ts_expr_push_const(ctx, expr, GRN_TS_TEXT_VECTOR, &value);
 }
 
 grn_rc
 grn_ts_expr_push_geo_vector(grn_ctx *ctx, grn_ts_expr *expr,
                             grn_ts_geo_vector value) {
-  GRN_TS_EXPR_PUSH_CONST(GEO_VECTOR, geo_vector)
-  return rc;
+  return grn_ts_expr_push_const(ctx, expr, GRN_TS_GEO_VECTOR, &value);
 }
 
 grn_rc
 grn_ts_expr_push_tokyo_geo_vector(grn_ctx *ctx, grn_ts_expr *expr,
                                   grn_ts_geo_vector value) {
-  GRN_TS_EXPR_PUSH_CONST(GEO_VECTOR, geo_vector)
-  node->data_type = GRN_DB_TOKYO_GEO_POINT;
-  return rc;
+  grn_rc rc = grn_ts_expr_push_const(ctx, expr, GRN_TS_GEO_VECTOR, &value);
+  if (rc != GRN_SUCCESS) {
+    return rc;
+  }
+  expr->stack[expr->stack_depth - 1]->data_type = GRN_DB_TOKYO_GEO_POINT;
+  return GRN_SUCCESS;
 }
 
 grn_rc
 grn_ts_expr_push_wgs84_geo_vector(grn_ctx *ctx, grn_ts_expr *expr,
                                   grn_ts_geo_vector value) {
-  GRN_TS_EXPR_PUSH_CONST(GEO_VECTOR, geo_vector)
-  node->data_type = GRN_DB_TOKYO_GEO_POINT;
-  return rc;
+  grn_rc rc = grn_ts_expr_push_const(ctx, expr, GRN_TS_GEO_VECTOR, &value);
+  if (rc != GRN_SUCCESS) {
+    return rc;
+  }
+  expr->stack[expr->stack_depth - 1]->data_type = GRN_DB_TOKYO_GEO_POINT;
+  return GRN_SUCCESS;
 }
-#undef GRN_TS_EXPR_PUSH_CONST
 
 /* grn_ts_expr_reserve_bridges() extends a bridge buffer for a new bridge. */
 static grn_rc
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index