null+****@clear*****
null+****@clear*****
2011年 9月 12日 (月) 17:36:44 JST
Kouhei Sutou 2011-09-12 08:36:44 +0000 (Mon, 12 Sep 2011) New Revision: a511abccb7eda20c103ecc86c78dcd5d9477fef9 Log: [geometry] export degree <-> msec conversion macro. Modified files: include/groonga.h lib/db.c Modified: include/groonga.h (+8 -0) =================================================================== --- include/groonga.h 2011-09-12 00:39:07 +0000 (1c4146a) +++ include/groonga.h 2011-09-12 08:36:44 +0000 (7e4356c) @@ -2064,6 +2064,14 @@ GRN_API grn_rc grn_text_otoj(grn_ctx *ctx, grn_obj *bulk, grn_obj *obj, grn_bulk_write_from((ctx), (obj), (char *)&_val, 0, sizeof(grn_obj *));\ } while (0) +#define GRN_GEO_DEGREE_ACCURACY 10000000 +#define GRN_GEO_DEGREE2MSEC(degree)\ + ((int)(((int)(degree) * 60 * 60 * 1000) +\ + (((long)((degree) * GRN_GEO_DEGREE_ACCURACY) % GRN_GEO_DEGREE_ACCURACY) * 60 / GRN_GEO_DEGREE_ACCURACY * 60 * 1000) +\ + (((long)((degree) * GRN_GEO_DEGREE_ACCURACY) % GRN_GEO_DEGREE_ACCURACY) * 60 % GRN_GEO_DEGREE_ACCURACY * 60 / 10000))) +#define GRN_GEO_MSEC2DEGREE(msec)\ + ((((int)(msec)) / 3600.0) * 0.001) + typedef struct { int latitude; int longitude; Modified: lib/db.c (+2 -9) =================================================================== --- lib/db.c 2011-09-12 00:39:07 +0000 (26a0446) +++ lib/db.c 2011-09-12 08:36:44 +0000 (1531670) @@ -4106,13 +4106,6 @@ grn_obj_is_persistent(grn_ctx *ctx, grn_obj *obj) #define FLOAT2TIME(ctx, dest, value)\ GRN_TIME_SET(ctx, dest, (long long int)(value * GRN_TIME_USEC_PER_SEC)); -#define DEGREE_ACCURACY 10000000 - -#define DEGREE2MSEC(degree)\ - ((int)(((int)degree * 60 * 60 * 1000) +\ - (((long)(degree * DEGREE_ACCURACY) % DEGREE_ACCURACY) * 60 / DEGREE_ACCURACY * 60 * 1000) +\ - (((long)(degree * DEGREE_ACCURACY) % DEGREE_ACCURACY) * 60 % DEGREE_ACCURACY * 60 / 10000))) - grn_rc grn_obj_cast(grn_ctx *ctx, grn_obj *src, grn_obj *dest, int addp) { @@ -4249,7 +4242,7 @@ grn_obj_cast(grn_ctx *ctx, grn_obj *src, grn_obj *dest, int addp) if (errno) { rc = GRN_INVALID_ARGUMENT; } else { - latitude = DEGREE2MSEC(degree); + latitude = GRN_GEO_DEGREE2MSEC(degree); cur = str + (end - GRN_TEXT_VALUE(buf_p)); } } @@ -4268,7 +4261,7 @@ grn_obj_cast(grn_ctx *ctx, grn_obj *src, grn_obj *dest, int addp) if (errno) { rc = GRN_INVALID_ARGUMENT; } else { - longitude = DEGREE2MSEC(degree); + longitude = GRN_GEO_DEGREE2MSEC(degree); cur = str + (end - GRN_TEXT_VALUE(buf_p)); } }