[Groonga-commit] groonga/groonga at ddac07a [master] grn_ts: remove redundant codes

Back to archive index

susumu.yata null+****@clear*****
Thu Sep 10 12:01:27 JST 2015


susumu.yata	2015-09-10 12:01:27 +0900 (Thu, 10 Sep 2015)

  New Revision: ddac07a75185bc76e631a5780a90e39b1127fbb6
  https://github.com/groonga/groonga/commit/ddac07a75185bc76e631a5780a90e39b1127fbb6

  Message:
    grn_ts: remove redundant codes
    
    GitHub: #386

  Modified files:
    lib/ts.c

  Modified: lib/ts.c (+94 -196)
===================================================================
--- lib/ts.c    2015-09-10 11:18:52 +0900 (537492a)
+++ lib/ts.c    2015-09-10 12:01:27 +0900 (d66fb2d)
@@ -2458,144 +2458,83 @@ grn_ts_op_logical_or_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
   return GRN_SUCCESS;
 }
 
-#define GRN_TS_OP_EQUAL_EVALUATE_CASE_BLOCK(KIND, kind)\
+#define GRN_TS_OP_CHK_EVALUATE_CASE_BLOCK(type, KIND, kind)\
   case GRN_TS_ ## KIND: {\
     grn_ts_ ## kind *buf_ptrs[] = {\
       (grn_ts_ ## kind *)node->bufs[0].ptr,\
       (grn_ts_ ## kind *)node->bufs[1].ptr\
     };\
     for (i = 0; i < n_in; i++) {\
-      out_ptr[i] = grn_ts_op_equal_ ## kind(buf_ptrs[0][i], buf_ptrs[1][i]);\
+      out_ptr[i] = grn_ts_op_ ## type ## _ ## kind(buf_ptrs[0][i],\
+                                                   buf_ptrs[1][i]);\
     }\
     return GRN_SUCCESS;\
   }
-#define GRN_TS_OP_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(KIND, kind)\
-  GRN_TS_OP_EQUAL_EVALUATE_CASE_BLOCK(KIND ## _VECTOR, kind ## _vector)
-/* grn_ts_op_equal_evaluate() evaluates an operator. */
-static grn_rc
-grn_ts_op_equal_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
-                         const grn_ts_record *in, size_t n_in, void *out) {
-  size_t i;
-  grn_rc rc;
-  grn_ts_bool *out_ptr = (grn_ts_bool *)out;
-
-  if (node->args[0]->data_kind == GRN_TS_BOOL) {
+#define GRN_TS_OP_CHK_EVALUATE_VECTOR_CASE_BLOCK(type, KIND, kind)\
+  GRN_TS_OP_CHK_EVALUATE_CASE_BLOCK(type, KIND ## _VECTOR, kind ## _vector)
+#define GRN_TS_OP_CHK_EVALUATE(type)\
+  size_t i;\
+  grn_rc rc;\
+  grn_ts_bool *out_ptr = (grn_ts_bool *)out;\
+  if (node->args[0]->data_kind == GRN_TS_BOOL) {\
     /*
      * Use the output buffer to put evaluation results of the 1st argument,
      * because the data kind is same.
-     */
-    rc = grn_ts_expr_node_evaluate(ctx, node->args[0], in, n_in, out);
-    if (rc == GRN_SUCCESS) {
-      grn_ts_buf *buf = &node->bufs[0];
-      rc = grn_ts_expr_node_evaluate_to_buf(ctx, node->args[1], in, n_in, buf);
-      if (rc == GRN_SUCCESS) {
-        grn_ts_bool *buf_ptr = (grn_ts_bool *)buf->ptr;
-        for (i = 0; i < n_in; i++) {
-          out_ptr[i] = grn_ts_op_equal_bool(out_ptr[i], buf_ptr[i]);
-        }
-      }
-    }
-    return rc;
-  }
-
-  for (i = 0; i < 2; i++) {
-    rc = grn_ts_expr_node_evaluate_to_buf(ctx, node->args[i], in, n_in,
-                                          &node->bufs[i]);
-    if (rc != GRN_SUCCESS) {
-      return rc;
-    }
-  }
-  switch (node->args[0]->data_kind) {
-    GRN_TS_OP_EQUAL_EVALUATE_CASE_BLOCK(INT, int)
-    GRN_TS_OP_EQUAL_EVALUATE_CASE_BLOCK(FLOAT, float)
-    GRN_TS_OP_EQUAL_EVALUATE_CASE_BLOCK(TIME, time)
-    GRN_TS_OP_EQUAL_EVALUATE_CASE_BLOCK(TEXT, text)
-    GRN_TS_OP_EQUAL_EVALUATE_CASE_BLOCK(GEO_POINT, geo_point)
-    GRN_TS_OP_EQUAL_EVALUATE_CASE_BLOCK(REF, ref)
-    GRN_TS_OP_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(BOOL, bool)
-    GRN_TS_OP_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(INT, int)
-    GRN_TS_OP_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(FLOAT, float)
-    GRN_TS_OP_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(TIME, time)
-    GRN_TS_OP_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(TEXT, text)
-    GRN_TS_OP_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(GEO_POINT, geo_point)
-    GRN_TS_OP_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(REF, ref)
-    default: {
-      return GRN_INVALID_ARGUMENT;
-    }
+     */\
+    rc = grn_ts_expr_node_evaluate(ctx, node->args[0], in, n_in, out);\
+    if (rc == GRN_SUCCESS) {\
+      grn_ts_buf *buf = &node->bufs[0];\
+      rc = grn_ts_expr_node_evaluate_to_buf(ctx, node->args[1],\
+                                            in, n_in, buf);\
+      if (rc == GRN_SUCCESS) {\
+        grn_ts_bool *buf_ptr = (grn_ts_bool *)buf->ptr;\
+        for (i = 0; i < n_in; i++) {\
+          out_ptr[i] = grn_ts_op_ ## type ## _bool(out_ptr[i], buf_ptr[i]);\
+        }\
+      }\
+    }\
+    return rc;\
+  }\
+  for (i = 0; i < 2; i++) {\
+    rc = grn_ts_expr_node_evaluate_to_buf(ctx, node->args[i], in, n_in,\
+                                          &node->bufs[i]);\
+    if (rc != GRN_SUCCESS) {\
+      return rc;\
+    }\
+  }\
+  switch (node->args[0]->data_kind) {\
+    GRN_TS_OP_CHK_EVALUATE_CASE_BLOCK(type, INT, int)\
+    GRN_TS_OP_CHK_EVALUATE_CASE_BLOCK(type, FLOAT, float)\
+    GRN_TS_OP_CHK_EVALUATE_CASE_BLOCK(type, TIME, time)\
+    GRN_TS_OP_CHK_EVALUATE_CASE_BLOCK(type, TEXT, text)\
+    GRN_TS_OP_CHK_EVALUATE_CASE_BLOCK(type, GEO_POINT, geo_point)\
+    GRN_TS_OP_CHK_EVALUATE_CASE_BLOCK(type, REF, ref)\
+    GRN_TS_OP_CHK_EVALUATE_VECTOR_CASE_BLOCK(type, BOOL, bool)\
+    GRN_TS_OP_CHK_EVALUATE_VECTOR_CASE_BLOCK(type, INT, int)\
+    GRN_TS_OP_CHK_EVALUATE_VECTOR_CASE_BLOCK(type, FLOAT, float)\
+    GRN_TS_OP_CHK_EVALUATE_VECTOR_CASE_BLOCK(type, TIME, time)\
+    GRN_TS_OP_CHK_EVALUATE_VECTOR_CASE_BLOCK(type, TEXT, text)\
+    GRN_TS_OP_CHK_EVALUATE_VECTOR_CASE_BLOCK(type, GEO_POINT, geo_point)\
+    GRN_TS_OP_CHK_EVALUATE_VECTOR_CASE_BLOCK(type, REF, ref)\
+    default: {\
+      return GRN_INVALID_ARGUMENT;\
+    }\
   }
+/* grn_ts_op_equal_evaluate() evaluates an operator. */
+static grn_rc
+grn_ts_op_equal_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
+                         const grn_ts_record *in, size_t n_in, void *out) {
+  GRN_TS_OP_CHK_EVALUATE(equal)
 }
-#undef GRN_TS_OP_EQUAL_EVALUATE_VECTOR_CASE_BLOCK
-#undef GRN_TS_OP_EQUAL_EVALUATE_CASE_BLOCK
 
-#define GRN_TS_OP_NOT_EQUAL_EVALUATE_CASE_BLOCK(KIND, kind)\
-  case GRN_TS_ ## KIND: {\
-    grn_ts_ ## kind *buf_ptrs[] = {\
-      (grn_ts_ ## kind *)node->bufs[0].ptr,\
-      (grn_ts_ ## kind *)node->bufs[1].ptr\
-    };\
-    for (i = 0; i < n_in; i++) {\
-      out_ptr[i] = grn_ts_op_not_equal_ ## kind(buf_ptrs[0][i],\
-                                                buf_ptrs[1][i]);\
-    }\
-    return GRN_SUCCESS;\
-  }
-#define GRN_TS_OP_NOT_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(KIND, kind)\
-  GRN_TS_OP_NOT_EQUAL_EVALUATE_CASE_BLOCK(KIND ## _VECTOR, kind ## _vector)
 /* grn_ts_op_not_equal_evaluate() evaluates an operator. */
 static grn_rc
 grn_ts_op_not_equal_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node,
                              const grn_ts_record *in, size_t n_in, void *out) {
-  size_t i;
-  grn_rc rc;
-  grn_ts_bool *out_ptr = (grn_ts_bool *)out;
-
-  if (node->args[0]->data_kind == GRN_TS_BOOL) {
-    /*
-     * Use the output buffer to put evaluation results of the 1st argument,
-     * because the data kind is same.
-     */
-    rc = grn_ts_expr_node_evaluate(ctx, node->args[0], in, n_in, out);
-    if (rc == GRN_SUCCESS) {
-      grn_ts_buf *buf = &node->bufs[0];
-      rc = grn_ts_expr_node_evaluate_to_buf(ctx, node->args[1], in, n_in, buf);
-      if (rc == GRN_SUCCESS) {
-        grn_ts_bool *buf_ptr = (grn_ts_bool *)buf->ptr;
-        for (i = 0; i < n_in; i++) {
-          out_ptr[i] = grn_ts_op_not_equal_bool(out_ptr[i], buf_ptr[i]);
-        }
-      }
-    }
-    return rc;
-  }
-
-  for (i = 0; i < 2; i++) {
-    rc = grn_ts_expr_node_evaluate_to_buf(ctx, node->args[i], in, n_in,
-                                          &node->bufs[i]);
-    if (rc != GRN_SUCCESS) {
-      return rc;
-    }
-  }
-  switch (node->args[0]->data_kind) {
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_CASE_BLOCK(INT, int)
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_CASE_BLOCK(FLOAT, float)
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_CASE_BLOCK(TIME, time)
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_CASE_BLOCK(TEXT, text)
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_CASE_BLOCK(GEO_POINT, geo_point)
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_CASE_BLOCK(REF, ref)
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(BOOL, bool)
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(INT, int)
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(FLOAT, float)
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(TIME, time)
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(TEXT, text)
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(GEO_POINT, geo_point)
-    GRN_TS_OP_NOT_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(REF, ref)
-    default: {
-      return GRN_INVALID_ARGUMENT;
-    }
-  }
+  GRN_TS_OP_CHK_EVALUATE(not_equal)
 }
-#undef GRN_TS_OP_NOT_EQUAL_EVALUATE_VECTOR_CASE_BLOCK
-#undef GRN_TS_OP_NOT_EQUAL_EVALUATE_CASE_BLOCK
+#undef GRN_TS_OP_CHK_EVALUATE_VECTOR_CASE_BLOCK
+#undef GRN_TS_OP_CHK_EVALUATE_CASE_BLOCK
 
 #define GRN_TS_OP_CMP_EVALUATE_CASE_BLOCK(type, KIND, kind)\
   case GRN_TS_ ## KIND: {\
@@ -2788,109 +2727,68 @@ grn_ts_op_logical_or_filter(grn_ctx *ctx, grn_ts_expr_op_node *node,
   return GRN_SUCCESS;
 }
 
-#define GRN_TS_OP_EQUAL_FILTER_CASE_BLOCK(KIND, kind)\
+#define GRN_TS_OP_CHK_FILTER_CASE_BLOCK(type, KIND, kind)\
   case GRN_TS_ ## KIND: {\
     grn_ts_ ## kind *buf_ptrs[] = {\
       (grn_ts_ ## kind *)node->bufs[0].ptr,\
       (grn_ts_ ## kind *)node->bufs[1].ptr\
     };\
     for (i = 0; i < n_in; i++) {\
-      if (grn_ts_op_equal_ ## kind(buf_ptrs[0][i], buf_ptrs[1][i])) {\
+      if (grn_ts_op_ ## type ## _ ## kind(buf_ptrs[0][i], buf_ptrs[1][i])) {\
         out[count++] = in[i];\
       }\
     }\
     *n_out = count;\
     return GRN_SUCCESS;\
   }
-#define GRN_TS_OP_EQUAL_FILTER_VECTOR_CASE_BLOCK(KIND, kind)\
-  GRN_TS_OP_EQUAL_FILTER_CASE_BLOCK(KIND ## _VECTOR, kind ## _vector)
+#define GRN_TS_OP_CHK_FILTER_VECTOR_CASE_BLOCK(type, KIND, kind)\
+  GRN_TS_OP_CHK_FILTER_CASE_BLOCK(type, KIND ## _VECTOR, kind ## _vector)
+#define GRN_TS_OP_CHK_FILTER(type)\
+  size_t i, count;\
+  for (i = 0; i < 2; i++) {\
+    grn_rc rc = grn_ts_expr_node_evaluate_to_buf(ctx, node->args[i], in, n_in,\
+                                                 &node->bufs[i]);\
+    if (rc != GRN_SUCCESS) {\
+      return rc;\
+    }\
+  }\
+  switch (node->args[0]->data_kind) {\
+    GRN_TS_OP_CHK_FILTER_CASE_BLOCK(type, BOOL, int)\
+    GRN_TS_OP_CHK_FILTER_CASE_BLOCK(type, INT, int)\
+    GRN_TS_OP_CHK_FILTER_CASE_BLOCK(type, FLOAT, float)\
+    GRN_TS_OP_CHK_FILTER_CASE_BLOCK(type, TIME, time)\
+    GRN_TS_OP_CHK_FILTER_CASE_BLOCK(type, TEXT, text)\
+    GRN_TS_OP_CHK_FILTER_CASE_BLOCK(type, GEO_POINT, geo_point)\
+    GRN_TS_OP_CHK_FILTER_CASE_BLOCK(type, REF, ref)\
+    GRN_TS_OP_CHK_FILTER_VECTOR_CASE_BLOCK(type, BOOL, bool)\
+    GRN_TS_OP_CHK_FILTER_VECTOR_CASE_BLOCK(type, INT, int)\
+    GRN_TS_OP_CHK_FILTER_VECTOR_CASE_BLOCK(type, FLOAT, float)\
+    GRN_TS_OP_CHK_FILTER_VECTOR_CASE_BLOCK(type, TIME, time)\
+    GRN_TS_OP_CHK_FILTER_VECTOR_CASE_BLOCK(type, TEXT, text)\
+    GRN_TS_OP_CHK_FILTER_VECTOR_CASE_BLOCK(type, GEO_POINT, geo_point)\
+    GRN_TS_OP_CHK_FILTER_VECTOR_CASE_BLOCK(type, REF, ref)\
+    default: {\
+      return GRN_INVALID_ARGUMENT;\
+    }\
+  }
 /* grn_ts_op_equal_filter() filters records. */
 static grn_rc
 grn_ts_op_equal_filter(grn_ctx *ctx, grn_ts_expr_op_node *node,
                          const grn_ts_record *in, size_t n_in,
                          grn_ts_record *out, size_t *n_out) {
-  size_t i, count;
-  for (i = 0; i < 2; i++) {
-    grn_rc rc = grn_ts_expr_node_evaluate_to_buf(ctx, node->args[i], in, n_in,
-                                                 &node->bufs[i]);
-    if (rc != GRN_SUCCESS) {
-      return rc;
-    }
-  }
-  switch (node->args[0]->data_kind) {
-    GRN_TS_OP_EQUAL_FILTER_CASE_BLOCK(BOOL, int)
-    GRN_TS_OP_EQUAL_FILTER_CASE_BLOCK(INT, int)
-    GRN_TS_OP_EQUAL_FILTER_CASE_BLOCK(FLOAT, float)
-    GRN_TS_OP_EQUAL_FILTER_CASE_BLOCK(TIME, time)
-    GRN_TS_OP_EQUAL_FILTER_CASE_BLOCK(TEXT, text)
-    GRN_TS_OP_EQUAL_FILTER_CASE_BLOCK(GEO_POINT, geo_point)
-    GRN_TS_OP_EQUAL_FILTER_CASE_BLOCK(REF, ref)
-    GRN_TS_OP_EQUAL_FILTER_VECTOR_CASE_BLOCK(BOOL, bool)
-    GRN_TS_OP_EQUAL_FILTER_VECTOR_CASE_BLOCK(INT, int)
-    GRN_TS_OP_EQUAL_FILTER_VECTOR_CASE_BLOCK(FLOAT, float)
-    GRN_TS_OP_EQUAL_FILTER_VECTOR_CASE_BLOCK(TIME, time)
-    GRN_TS_OP_EQUAL_FILTER_VECTOR_CASE_BLOCK(TEXT, text)
-    GRN_TS_OP_EQUAL_FILTER_VECTOR_CASE_BLOCK(GEO_POINT, geo_point)
-    GRN_TS_OP_EQUAL_FILTER_VECTOR_CASE_BLOCK(REF, ref)
-    default: {
-      return GRN_INVALID_ARGUMENT;
-    }
-  }
+  GRN_TS_OP_CHK_FILTER(equal)
 }
-#undef GRN_TS_OP_EQUAL_FILTER_VECTOR_CASE_BLOCK
-#undef GRN_TS_OP_EQUAL_FILTER_CASE_BLOCK
 
-#define GRN_TS_OP_NOT_EQUAL_FILTER_CASE_BLOCK(KIND, kind)\
-  case GRN_TS_ ## KIND: {\
-    grn_ts_ ## kind *buf_ptrs[] = {\
-      (grn_ts_ ## kind *)node->bufs[0].ptr,\
-      (grn_ts_ ## kind *)node->bufs[1].ptr\
-    };\
-    for (i = 0; i < n_in; i++) {\
-      if (grn_ts_op_not_equal_ ## kind(buf_ptrs[0][i], buf_ptrs[1][i])) {\
-        out[count++] = in[i];\
-      }\
-    }\
-    *n_out = count;\
-    return GRN_SUCCESS;\
-  }
-#define GRN_TS_OP_NOT_EQUAL_FILTER_VECTOR_CASE_BLOCK(KIND, kind)\
-  GRN_TS_OP_NOT_EQUAL_FILTER_CASE_BLOCK(KIND ## _VECTOR, kind ## _vector)
 /* grn_ts_op_not_equal_filter() filters records. */
 static grn_rc
 grn_ts_op_not_equal_filter(grn_ctx *ctx, grn_ts_expr_op_node *node,
                            const grn_ts_record *in, size_t n_in,
                            grn_ts_record *out, size_t *n_out) {
-  size_t i, count;
-  for (i = 0; i < 2; i++) {
-    grn_rc rc = grn_ts_expr_node_evaluate_to_buf(ctx, node->args[i], in, n_in,
-                                                 &node->bufs[i]);
-    if (rc != GRN_SUCCESS) {
-      return rc;
-    }
-  }
-  switch (node->args[0]->data_kind) {
-    GRN_TS_OP_NOT_EQUAL_FILTER_CASE_BLOCK(BOOL, int)
-    GRN_TS_OP_NOT_EQUAL_FILTER_CASE_BLOCK(INT, int)
-    GRN_TS_OP_NOT_EQUAL_FILTER_CASE_BLOCK(FLOAT, float)
-    GRN_TS_OP_NOT_EQUAL_FILTER_CASE_BLOCK(TIME, time)
-    GRN_TS_OP_NOT_EQUAL_FILTER_CASE_BLOCK(TEXT, text)
-    GRN_TS_OP_NOT_EQUAL_FILTER_CASE_BLOCK(GEO_POINT, geo_point)
-    GRN_TS_OP_NOT_EQUAL_FILTER_CASE_BLOCK(REF, ref)
-    GRN_TS_OP_NOT_EQUAL_FILTER_VECTOR_CASE_BLOCK(BOOL, bool)
-    GRN_TS_OP_NOT_EQUAL_FILTER_VECTOR_CASE_BLOCK(INT, int)
-    GRN_TS_OP_NOT_EQUAL_FILTER_VECTOR_CASE_BLOCK(FLOAT, float)
-    GRN_TS_OP_NOT_EQUAL_FILTER_VECTOR_CASE_BLOCK(TIME, time)
-    GRN_TS_OP_NOT_EQUAL_FILTER_VECTOR_CASE_BLOCK(TEXT, text)
-    GRN_TS_OP_NOT_EQUAL_FILTER_VECTOR_CASE_BLOCK(GEO_POINT, geo_point)
-    GRN_TS_OP_NOT_EQUAL_FILTER_VECTOR_CASE_BLOCK(REF, ref)
-    default: {
-      return GRN_INVALID_ARGUMENT;
-    }
-  }
+  GRN_TS_OP_CHK_FILTER(not_equal)
 }
-#undef GRN_TS_OP_NOT_EQUAL_FILTER_VECTOR_CASE_BLOCK
-#undef GRN_TS_OP_NOT_EQUAL_FILTER_CASE_BLOCK
+#undef GRN_TS_OP_CHK_FILTER
+#undef GRN_TS_OP_CHK_FILTER_VECTOR_CASE_BLOCK
+#undef GRN_TS_OP_CHK_FILTER_CASE_BLOCK
 
 #define GRN_TS_OP_CMP_FILTER_CASE_BLOCK(type, KIND, kind)\
   case GRN_TS_ ## KIND: {\
-------------- next part --------------
HTML����������������������������...
Descargar 



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