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