The Tiny HTM Library
include/tinyhtm/tree.h
Go to the documentation of this file.
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