00001
00016 #ifndef __DB_H__
00017 #define __DB_H__
00018
00019 #include <map>
00020 #include "config.h"
00021 #include "helper.h"
00022
00024 typedef u_int8_t ch_key_type;
00025
00027 enum cache_keys {
00029 PRE_FSQUARES=1,
00031 PRE_BSQUARES
00032 };
00033
00035 typedef std::map<ch_key_type,void*> cached_data;
00036
00037
00038 struct let_stat;
00039
00041 typedef std::map < CHAR, let_stat * >followers;
00042
00055 struct tmpstats {
00057 let_stat *forward;
00059 let_stat *backward;
00061 CHAR letter;
00063 int pos;
00064 };
00065
00066
00075 struct let_stat {
00077 unsigned int occur;
00079 cached_data cached;
00081 followers data;
00082 };
00083
00092 struct db {
00094 let_stat forward;
00096 let_stat backward;
00097 };
00098
00100 db *init_db();
00101
00112 void compute_stats(db * stats, char *from);
00113
00115 void destroy_db(db * what);
00116
00141 bool for_each_segment(let_stat* where, const char* begin, const char* end, bool (*function)(const char*,let_stat*,void*), void* data);
00142
00169 void for_each_thread_node(let_stat* where, void (*function)(let_stat*,void*), void* data);
00170
00179 MY_FLOAT compare_trees(let_stat* first,let_stat* second, int mindepth=0);
00180
00192 let_stat* match_word(let_stat* from, const char* word, bool reverse = true);
00193
00194 #endif