#ifndef XDB_SEARCH_H #define XDB_SEARCH_H #include class xdb_search_t { public: xdb_search_t(const std::string &file_name); ~xdb_search_t(); void init_file(); void init_vector_index(); void init_content(); unsigned long long get_io_count(); unsigned long long get_cost_time(); std::string search(const std::string &ip); private: void get_content_index(unsigned int ip, unsigned int &left, unsigned int &right); void get_content(unsigned int index, unsigned int &ip_left, unsigned int &ip_right, unsigned short ®ion_len, unsigned int ®ion_index); std::string get_region(unsigned int index, unsigned short len); std::string search(unsigned int ip_uint); FILE *db; char *vector_index; char *content; unsigned long long io_count; unsigned long long cost_time; static constexpr int header_length = 256; static constexpr int vector_index_rows = 256; static constexpr int vector_index_cols = 256; static constexpr int vector_index_size = 8; static constexpr int vector_index_length = vector_index_rows * vector_index_cols * vector_index_size; static constexpr int segment_index_size = 14; }; #endif