susumu.yata
null+****@clear*****
Wed Sep 9 21:19:34 JST 2015
susumu.yata 2015-09-09 21:19:34 +0900 (Wed, 09 Sep 2015) New Revision: 45db8c3e102bea619eb908ee039bcc63d2c760dd https://github.com/groonga/groonga/commit/45db8c3e102bea619eb908ee039bcc63d2c760dd Message: grn_ts: update comparison operators to support references GitHub: #386 Modified files: lib/ts.c Modified: lib/ts.c (+30 -4) =================================================================== --- lib/ts.c 2015-09-09 20:52:00 +0900 (6d4b61e) +++ lib/ts.c 2015-09-09 21:19:34 +0900 (5d736cc) @@ -590,6 +590,13 @@ grn_ts_op_equal_geo_point(grn_ts_geo_point lhs, grn_ts_geo_point rhs) { return (lhs.latitude == rhs.latitude) && (lhs.longitude == rhs.longitude); } +/* grn_ts_op_equal_ref() returns lhs == rhs. */ +inline static grn_bool +grn_ts_op_equal_ref(grn_ts_ref lhs, grn_ts_ref rhs) { + /* Ignore scores. */ + return lhs.id == rhs.id; +} + #define GRN_TS_OP_EQUAL_VECTOR(kind)\ size_t i;\ if (lhs.size != rhs.size) {\ @@ -638,6 +645,12 @@ grn_ts_op_equal_geo_point_vector(grn_ts_geo_point_vector lhs, grn_ts_geo_point_vector rhs) { GRN_TS_OP_EQUAL_VECTOR(geo_point) } + +/* grn_ts_op_equal_ref_vector() returns lhs == rhs. */ +inline static grn_bool +grn_ts_op_equal_ref_vector(grn_ts_ref_vector lhs, grn_ts_ref_vector rhs) { + GRN_TS_OP_EQUAL_VECTOR(ref) +} #undef GRN_TS_OP_EQUAL_VECTOR /* grn_ts_op_not_equal_bool() returns lhs != rhs. */ @@ -677,6 +690,13 @@ grn_ts_op_not_equal_geo_point(grn_ts_geo_point lhs, grn_ts_geo_point rhs) { return (lhs.latitude != rhs.latitude) && (lhs.longitude != rhs.longitude); } +/* grn_ts_op_not_equal_ref() returns lhs != rhs. */ +inline static grn_bool +grn_ts_op_not_equal_ref(grn_ts_ref lhs, grn_ts_ref rhs) { + /* Ignore scores. */ + return lhs.id != rhs.id; +} + #define GRN_TS_OP_NOT_EQUAL_VECTOR(kind)\ size_t i;\ if (lhs.size != rhs.size) {\ @@ -725,6 +745,12 @@ grn_ts_op_not_equal_geo_point_vector(grn_ts_geo_point_vector lhs, grn_ts_geo_point_vector rhs) { GRN_TS_OP_NOT_EQUAL_VECTOR(geo_point) } + +/* grn_ts_op_not_equal_ref_vector() returns lhs != rhs. */ +inline static grn_bool +grn_ts_op_not_equal_ref_vector(grn_ts_ref_vector lhs, grn_ts_ref_vector rhs) { + GRN_TS_OP_NOT_EQUAL_VECTOR(ref) +} #undef GRN_TS_OP_NOT_EQUAL_VECTOR /*------------------------------------------------------------- @@ -2378,14 +2404,14 @@ grn_ts_op_equal_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node, 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) - // TODO: GRN_TS_REF. + 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) - // TODO: GRN_TS_REF_VECTOR. + GRN_TS_OP_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(REF, ref) default: { return GRN_INVALID_ARGUMENT; } @@ -2448,14 +2474,14 @@ grn_ts_op_not_equal_evaluate(grn_ctx *ctx, grn_ts_expr_op_node *node, 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) - // TODO: GRN_TS_REF. + 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) - // TODO: GRN_TS_REF_VECTOR. + GRN_TS_OP_NOT_EQUAL_EVALUATE_VECTOR_CASE_BLOCK(REF, ref) default: { return GRN_INVALID_ARGUMENT; } -------------- next part -------------- HTML����������������������������...Download