📄 lib.h
字号:
#ifndef __SD_LIB_H__#define __SD_LIB_H__#include <cstdio>#include <list>#include <memory>#include <string>#include <vector>#include "dictziplib.hpp"const int MAX_MATCH_ITEM_PER_LIB=100;const int MAX_FUZZY_DISTANCE= 3; // at most MAX_FUZZY_DISTANCE-1 differences allowed when find similar wordsstruct cacheItem { guint32 offset; gchar *data; //write code here to make it inline cacheItem() {data= NULL;} ~cacheItem() {g_free(data);}};const int WORDDATA_CACHE_NUM = 10;const int INVALID_INDEX=-100;class DictBase {public: DictBase(); ~DictBase(); gchar * GetWordData(guint32 idxitem_offset, guint32 idxitem_size); bool containSearchData(); bool SearchData(std::vector<std::string> &SearchWords, guint32 idxitem_offset, guint32 idxitem_size, gchar *origin_data);protected: std::string sametypesequence; FILE *dictfile; std::auto_ptr<dictData> dictdzfile;private: cacheItem cache[WORDDATA_CACHE_NUM]; gint cache_cur; };//this structure contain all information about dictionarystruct DictInfo { std::string ifo_file_name; guint32 wordcount; std::string bookname; std::string author; std::string email; std::string website; std::string date; std::string description; guint32 index_file_size; std::string sametypesequence; bool load_from_ifo_file(const std::string& ifofilename, bool istreedict);};class index_file {public: guint32 wordentry_offset; guint32 wordentry_size; virtual ~index_file() {} virtual bool load(const std::string& url, gulong wc, gulong fsize) = 0; virtual const gchar *get_key(glong idx) = 0; virtual void get_data(glong idx) = 0; virtual const gchar *get_key_and_data(glong idx) = 0; virtual bool lookup(const char *str, glong &idx) = 0;};class Dict : public DictBase {private: std::string ifo_file_name; gulong wordcount; std::string bookname; std::auto_ptr<index_file> idx_file; bool load_ifofile(const std::string& ifofilename, gulong &idxfilesize);public: Dict() {} bool load(const std::string& ifofilename); gulong narticles() { return wordcount; } const std::string& dict_name() { return bookname; } const std::string& ifofilename() { return ifo_file_name; } const gchar *get_key(glong index) { return idx_file->get_key(index); } gchar *get_data(glong index) { idx_file->get_data(index); return DictBase::GetWordData(idx_file->wordentry_offset, idx_file->wordentry_size); } void get_key_and_data(glong index, const gchar **key, guint32 *offset, guint32 *size) { *key = idx_file->get_key_and_data(index); *offset = idx_file->wordentry_offset; *size = idx_file->wordentry_size; } bool Lookup(const char *str, glong &idx) { return idx_file->lookup(str, idx); } bool LookupWithRule(GPatternSpec *pspec, glong *aIndex, int iBuffLen);};typedef std::list<std::string> strlist_t;class Libs {public: typedef void (*progress_func_t)(void); Libs(progress_func_t f=NULL); ~Libs(); void load_dict(const std::string& url); void load(const strlist_t& dicts_dirs, const strlist_t& order_list, const strlist_t& disable_list); void reload(const strlist_t& dicts_dirs, const strlist_t& order_list, const strlist_t& disable_list); glong narticles(int idict) { return oLib[idict]->narticles(); } const std::string& dict_name(int idict) { return oLib[idict]->dict_name(); } gint ndicts() { return oLib.size(); } const gchar * poGetWord(glong iIndex,int iLib) { return oLib[iLib]->get_key(iIndex); } gchar * poGetWordData(glong iIndex,int iLib) { if (iIndex==INVALID_INDEX) return NULL; return oLib[iLib]->get_data(iIndex); } const gchar *poGetCurrentWord(glong *iCurrent); const gchar *poGetNextWord(const gchar *word, glong *iCurrent); const gchar *poGetPreWord(glong *iCurrent); bool LookupWord(const gchar* sWord, glong& iWordIndex, int iLib) { return oLib[iLib]->Lookup(sWord, iWordIndex); } bool LookupSimilarWord(const gchar* sWord, glong & iWordIndex, int iLib); bool SimpleLookupWord(const gchar* sWord, glong & iWordIndex, int iLib); bool LookupWithFuzzy(const gchar *sWord, gchar *reslist[], gint reslist_size); gint LookupWithRule(const gchar *sWord, gchar *reslist[]); bool LookupData(const gchar *sWord, std::vector<gchar *> *reslist);private: std::vector<Dict *> oLib; // word Libs. int iMaxFuzzyDistance; progress_func_t progress_func;};typedef enum { qtSIMPLE, qtREGEXP, qtFUZZY, qtDATA} query_t; extern query_t analyze_query(const char *s, std::string& res); #endif//!__SD_LIB_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -