The Tiny HTM Library
|
00001 00007 #ifndef HTM_TREE_H 00008 #define HTM_TREE_H 00009 00010 #include "geometry.h" 00011 00012 #ifdef __cplusplus 00013 extern "C" { 00014 #endif 00015 00016 00017 /* ================================================================ */ 00021 /* ================================================================ */ 00022 00025 struct htm_tree_entry { 00026 struct htm_v3 v; 00027 int64_t rowid; 00028 } HTM_ALIGNED(16); 00029 00030 00035 struct htm_tree { 00036 uint64_t leafthresh; 00037 uint64_t count; 00038 const unsigned char *root[8]; 00039 const struct htm_tree_entry *entries; 00040 const void *index; 00041 size_t indexsz; 00042 size_t datasz; 00043 int indexfd; 00044 int datafd; 00045 } HTM_ALIGNED(16); 00046 00051 enum htm_errcode htm_tree_init(struct htm_tree *tree, 00052 const char * const treefile, 00053 const char * const datafile); 00054 00057 void htm_tree_destroy(struct htm_tree *tree); 00058 00062 enum htm_errcode htm_tree_lock(struct htm_tree *tree, size_t datathresh); 00063 00064 00065 /* ================================================================ */ 00070 /* ================================================================ */ 00071 00083 int64_t htm_tree_s2circle_scan(const struct htm_tree *tree, 00084 const struct htm_v3 *center, 00085 double radius, 00086 enum htm_errcode *err); 00087 00099 int64_t htm_tree_s2ellipse_scan(const struct htm_tree *tree, 00100 const struct htm_s2ellipse *ellipse, 00101 enum htm_errcode *err); 00102 00114 int64_t htm_tree_s2cpoly_scan(const struct htm_tree *tree, 00115 const struct htm_s2cpoly *poly, 00116 enum htm_errcode *err); 00117 00118 00125 int64_t htm_tree_s2circle_count(const struct htm_tree *tree, 00126 const struct htm_v3 *center, 00127 double radius, 00128 enum htm_errcode *err); 00129 00136 int64_t htm_tree_s2ellipse_count(const struct htm_tree *tree, 00137 const struct htm_s2ellipse *ellipse, 00138 enum htm_errcode *err); 00139 00146 int64_t htm_tree_s2cpoly_count(const struct htm_tree *tree, 00147 const struct htm_s2cpoly *poly, 00148 enum htm_errcode *err); 00149 00157 struct htm_range htm_tree_s2circle_range(const struct htm_tree *tree, 00158 const struct htm_v3 *center, 00159 double radius, 00160 enum htm_errcode *err); 00161 00169 struct htm_range htm_tree_s2ellipse_range(const struct htm_tree *tree, 00170 const struct htm_s2ellipse *ellipse, 00171 enum htm_errcode *err); 00172 00180 struct htm_range htm_tree_s2cpoly_range(const struct htm_tree *tree, 00181 const struct htm_s2cpoly *poly, 00182 enum htm_errcode *err); 00183 00186 #ifdef __cplusplus 00187 } 00188 #endif 00189 00190 #endif /* HTM_TREE_H */ 00191