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));
}
}