?? chmxx_8h-source.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>chmxx.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.18 --><center><a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> </center><hr><h1>chmxx.h</h1><a href="chmxx_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 00002 <span class="preprocessor">#ifndef __chm_h__</span>00003 <span class="preprocessor"></span><span class="preprocessor">#define __chm_h__</span>00004 <span class="preprocessor"></span>00005 <span class="preprocessor">#include <string></span>00006 <span class="preprocessor">#include <ostream></span>00007 <span class="preprocessor">#include <istream></span>00008 <span class="preprocessor">#include <vector></span>00009 <span class="preprocessor">#include <list></span>00010 <span class="preprocessor">#include <map></span>00011 00021 <span class="keyword">struct </span>chmFile;00022 <a name="l00027"></a><a class="code" href="namespacechm.html">00027</a> <span class="keyword">namespace </span>chm {00028 <a name="l00030"></a><a class="code" href="structchm_1_1chm__topics__tree.html">00030</a> <span class="keyword">struct </span><a class="code" href="structchm_1_1chm__topics__tree.html">chm_topics_tree</a> {<a name="l00031"></a><a class="code" href="structchm_1_1chm__topics__tree.html#m0">00031</a> std::string <a class="code" href="structchm_1_1chm__topics__tree.html#m0">title</a>; <a name="l00032"></a><a class="code" href="structchm_1_1chm__topics__tree.html#m1">00032</a> std::string <a class="code" href="structchm_1_1chm__topics__tree.html#m1">path</a>; <a name="l00033"></a><a class="code" href="structchm_1_1chm__topics__tree.html#m2">00033</a> <a class="code" href="structchm_1_1chm__topics__tree.html">chm_topics_tree</a> *<a class="code" href="structchm_1_1chm__topics__tree.html#m2">parent</a>; <a name="l00034"></a><a class="code" href="structchm_1_1chm__topics__tree.html#m3">00034</a> std::list<chm_topics_tree *> <a class="code" href="structchm_1_1chm__topics__tree.html#m3">children</a>; 00035 00036 <a class="code" href="structchm_1_1chm__topics__tree.html#a0">~chm_topics_tree</a> ();00037 };00038 <a name="l00040"></a><a class="code" href="structchm_1_1chm__search__document.html">00040</a> <span class="keyword">struct </span><a class="code" href="structchm_1_1chm__search__document.html">chm_search_document</a> {<a name="l00041"></a><a class="code" href="structchm_1_1chm__search__document.html#m0">00041</a> std::string <a class="code" href="structchm_1_1chm__search__document.html#m0">title</a>; <a name="l00042"></a><a class="code" href="structchm_1_1chm__search__document.html#m1">00042</a> std::string <a class="code" href="structchm_1_1chm__search__document.html#m1">path</a>; <a name="l00043"></a><a class="code" href="structchm_1_1chm__search__document.html#m2">00043</a> std::vector<int> <a class="code" href="structchm_1_1chm__search__document.html#m2">offsets</a>; 00044 };00045 <a name="l00047"></a><a class="code" href="structchm_1_1chm__search__match.html">00047</a> <span class="keyword">struct </span><a class="code" href="structchm_1_1chm__search__match.html">chm_search_match</a> {<a name="l00048"></a><a class="code" href="structchm_1_1chm__search__match.html#m0">00048</a> <span class="keywordtype">int</span> <a class="code" href="structchm_1_1chm__search__match.html#m0">is_title</a>; <a name="l00049"></a><a class="code" href="structchm_1_1chm__search__match.html#m1">00049</a> std::string <a class="code" href="structchm_1_1chm__search__match.html#m1">key</a>; <a name="l00050"></a><a class="code" href="structchm_1_1chm__search__match.html#m2">00050</a> std::vector<chm_search_document> <a class="code" href="structchm_1_1chm__search__match.html#m2">documents</a>; 00051 };00052 <a name="l00054"></a><a class="code" href="classchm_1_1chmfile.html">00054</a> <span class="keyword">class </span><a class="code" href="classchm_1_1chmfile.html">chmfile</a> {00055 <span class="keyword">public</span>:00057 <a class="code" href="classchm_1_1chmfile.html#a0">chmfile</a> (<span class="keyword">const</span> std::string& path);00058 <span class="keyword">virtual</span> <a class="code" href="classchm_1_1chmfile.html#a1">~chmfile</a> ();00059 00061 <span class="keywordtype">bool</span> <a class="code" href="classchm_1_1chmfile.html#a2">is_open</a> () <span class="keyword">const</span>;00062 00064 <span class="keywordtype">void</span> <a class="code" href="classchm_1_1chmfile.html#a3">close</a> ();00065 <a name="l00067"></a><a class="code" href="classchm_1_1chmfile.html#a4">00067</a> <span class="keyword">inline</span> <a class="code" href="classchm_1_1chmfile.html#a4">operator bool</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classchm_1_1chmfile.html#a2">is_open</a>(); }00068 00070 <span class="keywordtype">bool</span> <a class="code" href="classchm_1_1chmfile.html#a5">read</a> (<span class="keyword">const</span> std::string& path, std::ostream& out) <span class="keyword">const</span>;00071 00074 <span class="keywordtype">bool</span> <a class="code" href="classchm_1_1chmfile.html#a5">read</a> (<span class="keyword">const</span> std::string& path, std::vector<char>& out) <span class="keyword">const</span>;00075 00077 <span class="keywordtype">bool</span> <a class="code" href="classchm_1_1chmfile.html#a5">read</a> (<span class="keyword">const</span> std::string& path, <span class="keywordtype">char</span> *buf, size_t buf_size) <span class="keyword">const</span>;00078 00080 std::streamsize <a class="code" href="classchm_1_1chmfile.html#a8">file_size</a> (<span class="keyword">const</span> std::string& path) <span class="keyword">const</span>;00081 00083 <span class="keywordtype">bool</span> <a class="code" href="classchm_1_1chmfile.html#a9">file_exists</a> (<span class="keyword">const</span> std::string& path) <span class="keyword">const</span>;00084 <a name="l00086"></a><a class="code" href="classchm_1_1chmfile.html#s4">00086</a> <span class="keyword">enum</span> <a class="code" href="classchm_1_1chmfile.html#s4">readdir_type</a> { <a class="code" href="classchm_1_1chmfile.html#s4s0">files</a> = 1, <a class="code" href="classchm_1_1chmfile.html#s4s1">dirs</a> = 2, <a class="code" href="classchm_1_1chmfile.html#s4s2">special</a> = 4, <a class="code" href="classchm_1_1chmfile.html#s4s3">meta</a> = 8 };00087 00090 <span class="keywordtype">bool</span> <a class="code" href="classchm_1_1chmfile.html#a10">readdir</a> (<span class="keyword">const</span> std::string& path, std::list<std::string>& entries, <span class="keywordtype">int</span> type = <a class="code" href="classchm_1_1chmfile.html#s4s0">files</a>|<a class="code" href="classchm_1_1chmfile.html#s4s1">dirs</a>) <span class="keyword">const</span>;00091 00096 std::streambuf* <a class="code" href="classchm_1_1chmfile.html#a11">open</a> (<span class="keyword">const</span> std::string& path, size_t buf_size = 1024) <span class="keyword">const</span>;00097 <a name="l00098"></a><a class="code" href="classchm_1_1chmfile.html#a12">00098</a> <span class="keyword">inline</span> <span class="keyword">const</span> std::string& <a class="code" href="classchm_1_1chmfile.html#a12">get_title</a> ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> title; }<a name="l00099"></a><a class="code" href="classchm_1_1chmfile.html#a13">00099</a> <span class="keyword">inline</span> <span class="keyword">const</span> std::string& <a class="code" href="classchm_1_1chmfile.html#a13">get_home_file</a> ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> home_file; }<a name="l00100"></a><a class="code" href="classchm_1_1chmfile.html#a14">00100</a> <span class="keyword">inline</span> <span class="keyword">const</span> std::string& <a class="code" href="classchm_1_1chmfile.html#a14">get_generator</a> ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> generator; }<a name="l00101"></a><a class="code" href="classchm_1_1chmfile.html#a15">00101</a> <span class="keyword">inline</span> <span class="keyword">const</span> std::string& <a class="code" href="classchm_1_1chmfile.html#a15">get_index_file</a> ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> index_file; }<a name="l00102"></a><a class="code" href="classchm_1_1chmfile.html#a16">00102</a> <span class="keyword">inline</span> <span class="keyword">const</span> std::string& <a class="code" href="classchm_1_1chmfile.html#a16">get_topics_file</a> ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> topics_file; }<a name="l00103"></a><a class="code" href="classchm_1_1chmfile.html#a17">00103</a> <span class="keyword">inline</span> <span class="keyword">const</span> std::string& <a class="code" href="classchm_1_1chmfile.html#a17">get_path</a> ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> path; }00104 00108 <span class="keyword">const</span> chm_topics_tree * <a class="code" href="classchm_1_1chmfile.html#a18">get_topics_tree</a> () <span class="keyword">const</span>;00109 00111 <span class="keywordtype">bool</span> <a class="code" href="classchm_1_1chmfile.html#a19">search_index</a> (<span class="keyword">const</span> std::string& txt, std::list<chm_search_match>& found,00112 <span class="keywordtype">bool</span> whole_words = <span class="keyword">true</span>, <span class="keywordtype">bool</span> titles_only = <span class="keyword">true</span>) <span class="keyword">const</span>;00113 00119 <span class="keywordtype">bool</span> <a class="code" href="classchm_1_1chmfile.html#a20">cache</a> (<span class="keyword">const</span> std::string& path);00121 <span class="keywordtype">void</span> <a class="code" href="classchm_1_1chmfile.html#a21">cache_search_database</a> ();00122 00123 <span class="keyword">private</span>:00124 <span class="keyword">mutable</span> chmFile *chm;00125 std::string path;00126 00127 std::string title, home_file, generator, index_file, topics_file;00128 00129 <span class="keyword">mutable</span> chm_topics_tree *tree;00130 00131 <a class="code" href="classchm_1_1chmfile.html#a0">chmfile</a> (<span class="keyword">const</span> <a class="code" href="classchm_1_1chmfile.html#a0">chmfile</a>&);00132 <a class="code" href="classchm_1_1chmfile.html#a0">chmfile</a>& operator= (<span class="keyword">const</span> <a class="code" href="classchm_1_1chmfile.html#a0">chmfile</a>&);00133 00134 <span class="keyword">typedef</span> std::map<std::string,std::vector<char> > cache_data_t;00135 cache_data_t cache_data;00136 };00137 <a name="l00148"></a><a class="code" href="classchm_1_1chmistream.html">00148</a> <span class="keyword">class </span><a class="code" href="classchm_1_1chmistream.html">chmistream</a> : <span class="keyword">public</span> std::istream {00149 <span class="keyword">public</span>:00151 <a class="code" href="classchm_1_1chmistream.html#a0">chmistream</a> (<span class="keyword">const</span> <a class="code" href="classchm_1_1chmfile.html">chmfile</a>& chm, <span class="keyword">const</span> std::string& path, size_t buf_size = 1024);00152 00155 std::streamsize <a class="code" href="classchm_1_1chmistream.html#a1">read_left</a> () <span class="keyword">const</span>;00156 00157 <span class="keyword">virtual</span> <a class="code" href="classchm_1_1chmistream.html#a2">~chmistream</a> ();00158 <a name="l00160"></a><a class="code" href="classchm_1_1chmistream.html#a3">00160</a> <span class="keyword">inline</span> size_t <a class="code" href="classchm_1_1chmistream.html#a3">get_encint</a>()
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -