mirror of
https://github.com/lionsoul2014/ip2region.git
synced 2025-12-08 19:25:22 +00:00
51 lines
1.4 KiB
C++
51 lines
1.4 KiB
C++
#ifndef XDB_SEARCH_H
|
|
#define XDB_SEARCH_H
|
|
|
|
#include <string>
|
|
|
|
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
|