1 /* -*- c-basic-offset: 2 -*- */
2 /*
3   Copyright(C) 2015-2016 Brazil
4 
5   This library is free software; you can redistribute it and/or
6   modify it under the terms of the GNU Lesser General Public
7   License version 2.1 as published by the Free Software Foundation.
8 
9   This library is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12   Lesser General Public License for more details.
13 
14   You should have received a copy of the GNU Lesser General Public
15   License along with this library; if not, write to the Free Software
16   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1335  USA
17 */
18 
19 #pragma once
20 
21 #include "../grn.h"
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /*-------------------------------------------------------------
28  * Built-in data types.
29  */
30 
31 /* grn_builtin_type or table ID. */
32 typedef grn_id grn_ts_data_type;
33 
34 /* ID (_id). */
35 typedef grn_id grn_ts_id;
36 
37 /* Score (_score). */
38 typedef float grn_ts_score;
39 
40 /* Record (_id, _score). */
41 typedef struct {
42   grn_ts_id id;
43   grn_ts_score score;
44 } grn_ts_record;
45 
46 /*-------------------------------------------------------------
47  * Built-in scalar data kinds.
48  */
49 
50 /* Bool. */
51 typedef grn_bool grn_ts_bool;
52 
53 /* Int. */
54 typedef int64_t grn_ts_int;
55 
56 /* Float. */
57 typedef double grn_ts_float;
58 
59 /* Time. */
60 typedef int64_t grn_ts_time;
61 
62 /* Text. */
63 typedef struct {
64   const char *ptr;
65   size_t size;
66 } grn_ts_text;
67 
68 /* Geo. */
69 typedef grn_geo_point grn_ts_geo;
70 typedef grn_geo_point grn_ts_tokyo_geo;
71 typedef grn_geo_point grn_ts_wgs84_geo;
72 
73 /* Ref. */
74 typedef grn_ts_record grn_ts_ref;
75 
76 /*-------------------------------------------------------------
77  * Built-in vector data kinds.
78  */
79 
80 /* BoolVector. */
81 typedef struct {
82   const grn_ts_bool *ptr;
83   size_t size;
84 } grn_ts_bool_vector;
85 
86 /* IntVector. */
87 typedef struct {
88   const grn_ts_int *ptr;
89   size_t size;
90 } grn_ts_int_vector;
91 
92 /* FloatVector. */
93 typedef struct {
94   const grn_ts_float *ptr;
95   size_t size;
96 } grn_ts_float_vector;
97 
98 /* TimeVector. */
99 typedef struct {
100   const grn_ts_time *ptr;
101   size_t size;
102 } grn_ts_time_vector;
103 
104 /* TextVector. */
105 typedef struct {
106   const grn_ts_text *ptr;
107   size_t size;
108 } grn_ts_text_vector;
109 
110 /* GeoVector. */
111 typedef struct {
112   const grn_ts_geo *ptr;
113   size_t size;
114 } grn_ts_geo_vector;
115 typedef grn_ts_geo_vector grn_ts_tokyo_geo_vector;
116 typedef grn_ts_geo_vector grn_ts_wgs84_geo_vector;
117 
118 /* RefVector. */
119 typedef struct {
120   const grn_ts_ref *ptr;
121   size_t size;
122 } grn_ts_ref_vector;
123 
124 /*-------------------------------------------------------------
125  * Built-in data kinds.
126  */
127 
128 enum { GRN_TS_VECTOR_FLAG = 1 << 7 };
129 
130 typedef enum {
131   GRN_TS_VOID         = 0, /* GRN_DB_VOID */
132   GRN_TS_BOOL         = 1, /* GRN_DB_BOOL */
133   GRN_TS_INT          = 2, /* GRN_DB_[U]INT(8/16/32/64) */
134   GRN_TS_FLOAT        = 3, /* GRN_DB_FLOAT */
135   GRN_TS_TIME         = 4, /* GRN_DB_TIME */
136   GRN_TS_TEXT         = 5, /* GRN_DB_[SHORT_/LONG_]TEST */
137   GRN_TS_GEO          = 6, /* GRN_DB_(TOKYO/WGS84)_GEO_POINT */
138   GRN_TS_REF          = 7, /* Table reference. */
139   GRN_TS_BOOL_VECTOR  = GRN_TS_VECTOR_FLAG | GRN_TS_BOOL,
140   GRN_TS_INT_VECTOR   = GRN_TS_VECTOR_FLAG | GRN_TS_INT,
141   GRN_TS_FLOAT_VECTOR = GRN_TS_VECTOR_FLAG | GRN_TS_FLOAT,
142   GRN_TS_TIME_VECTOR  = GRN_TS_VECTOR_FLAG | GRN_TS_TIME,
143   GRN_TS_TEXT_VECTOR  = GRN_TS_VECTOR_FLAG | GRN_TS_TEXT,
144   GRN_TS_GEO_VECTOR   = GRN_TS_VECTOR_FLAG | GRN_TS_GEO,
145   GRN_TS_REF_VECTOR   = GRN_TS_VECTOR_FLAG | GRN_TS_REF
146 } grn_ts_data_kind;
147 
148 typedef union {
149   grn_ts_bool as_bool;
150   grn_ts_int as_int;
151   grn_ts_float as_float;
152   grn_ts_time as_time;
153   grn_ts_text as_text;
154   grn_ts_geo as_geo;
155   grn_ts_ref as_ref;
156   grn_ts_bool_vector as_bool_vector;
157   grn_ts_int_vector as_int_vector;
158   grn_ts_float_vector as_float_vector;
159   grn_ts_time_vector as_time_vector;
160   grn_ts_text_vector as_text_vector;
161   grn_ts_geo_vector as_geo_vector;
162   grn_ts_ref_vector as_ref_vector;
163 } grn_ts_any;
164 
165 #ifdef __cplusplus
166 }
167 #endif
168 
169