⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queue_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 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>Crypto++: queue.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.2 --><div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Compound&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Compound&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a></div><h1>queue.h</h1><div class="fragment"><pre>00001 <span class="comment">// specification file for an unlimited queue for storing bytes</span>00002 00003 <span class="preprocessor">#ifndef CRYPTOPP_QUEUE_H</span>00004 <span class="preprocessor"></span><span class="preprocessor">#define CRYPTOPP_QUEUE_H</span>00005 <span class="preprocessor"></span>00006 <span class="preprocessor">#include "<a class="code" href="simple_8h.html">simple.h</a>"</span>00007 <span class="comment">//#include &lt;algorithm&gt;</span>00008 00009 NAMESPACE_BEGIN(CryptoPP)00010 00011 <span class="comment">/** The queue is implemented as a linked list of byte arrays, but you don't need to</span>00012 <span class="comment">    know about that.  So just ignore this next line. :) */</span>00013 <span class="keyword">class </span>ByteQueueNode;00014 <span class="comment"></span>00015 <span class="comment">//! Byte Queue</span><a name="l00016"></a><a class="code" href="class_byte_queue.html">00016</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL ByteQueue : <span class="keyword">public</span> Bufferless&lt;BufferedTransformation&gt;00017 {00018 <span class="keyword">public</span>:00019         ByteQueue(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_nodeSize=256);00020         ByteQueue(<span class="keyword">const</span> ByteQueue &amp;copy);00021         ~ByteQueue();00022 <a name="l00023"></a><a class="code" href="class_byte_queue.html#_d_e_r_set_encodera3">00023</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> MaxRetrievable()<span class="keyword"> const</span>00024 <span class="keyword">                </span>{<span class="keywordflow">return</span> CurrentSize();}<a name="l00025"></a><a class="code" href="class_byte_queue.html#_d_e_r_set_encodera4">00025</a>         <span class="keywordtype">bool</span> AnyRetrievable()<span class="keyword"> const</span>00026 <span class="keyword">                </span>{<span class="keywordflow">return</span> !IsEmpty();}00027 00028         <span class="keywordtype">void</span> IsolatedInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters);00029         byte * CreatePutSpace(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;size);00030         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Put2(<span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking);00031 00032         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Get(byte &amp;outByte);00033         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Get(byte *outString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getMax);00034 00035         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Peek(byte &amp;outByte) <span class="keyword">const</span>;00036         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Peek(byte *outString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> peekMax) <span class="keyword">const</span>;00037 00038         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> TransferTo2(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &amp;transferBytes, <span class="keyword">const</span> std::string &amp;channel=NULL_CHANNEL, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>);00039         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> CopyRangeTo2(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &amp;begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> end=ULONG_MAX, <span class="keyword">const</span> std::string &amp;channel=NULL_CHANNEL, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>) <span class="keyword">const</span>;00040 00041         <span class="comment">// these member functions are not inherited</span>00042         <span class="keywordtype">void</span> SetNodeSize(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nodeSize) {m_nodeSize = nodeSize;}00043 00044         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> CurrentSize() <span class="keyword">const</span>;00045         <span class="keywordtype">bool</span> IsEmpty() <span class="keyword">const</span>;00046 00047         <span class="keywordtype">void</span> Clear();00048 00049         <span class="keywordtype">void</span> Unget(byte inByte);00050         <span class="keywordtype">void</span> Unget(<span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length);00051 00052         <span class="keyword">const</span> byte * Spy(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;contiguousSize) <span class="keyword">const</span>;00053 00054         <span class="keywordtype">void</span> LazyPut(<span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size);00055         <span class="keywordtype">void</span> UndoLazyPut(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size);00056         <span class="keywordtype">void</span> FinalizeLazyPut();00057 00058         ByteQueue &amp; operator=(<span class="keyword">const</span> ByteQueue &amp;rhs);00059         <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> ByteQueue &amp;rhs) <span class="keyword">const</span>;00060         byte operator[](<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> i) <span class="keyword">const</span>;00061         <span class="keywordtype">void</span> swap(ByteQueue &amp;rhs);00062 00063         <span class="keyword">class </span>Walker : <span class="keyword">public</span> InputRejecting&lt;BufferedTransformation&gt;00064         {00065         <span class="keyword">public</span>:00066                 Walker(<span class="keyword">const</span> ByteQueue &amp;queue)00067                         : m_queue(queue) {Initialize();}00068 00069                 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetCurrentPosition() {<span class="keywordflow">return</span> m_position;}00070 00071                 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> MaxRetrievable()<span class="keyword"> const</span>00072 <span class="keyword">                        </span>{<span class="keywordflow">return</span> m_queue.CurrentSize() - m_position;}00073 00074                 <span class="keywordtype">void</span> IsolatedInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters);00075 00076                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Get(byte &amp;outByte);00077                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Get(byte *outString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getMax);00078 00079                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Peek(byte &amp;outByte) <span class="keyword">const</span>;00080                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Peek(byte *outString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> peekMax) <span class="keyword">const</span>;00081 00082                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> TransferTo2(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &amp;transferBytes, <span class="keyword">const</span> std::string &amp;channel=NULL_CHANNEL, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>);00083                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> CopyRangeTo2(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &amp;begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> end=ULONG_MAX, <span class="keyword">const</span> std::string &amp;channel=NULL_CHANNEL, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>) <span class="keyword">const</span>;00084 00085         <span class="keyword">private</span>:00086                 <span class="keyword">const</span> ByteQueue &amp;m_queue;00087                 <span class="keyword">const</span> ByteQueueNode *m_node;00088                 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> m_position;00089                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_offset;00090                 <span class="keyword">const</span> byte *m_lazyString;00091                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_lazyLength;00092         };00093 00094         <span class="keyword">friend</span> <span class="keyword">class </span>Walker;00095 00096 <span class="keyword">private</span>:00097         <span class="keywordtype">void</span> CleanupUsedNodes();00098         <span class="keywordtype">void</span> CopyFrom(<span class="keyword">const</span> ByteQueue &amp;copy);00099         <span class="keywordtype">void</span> Destroy();00100 00101         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_nodeSize;00102         ByteQueueNode *m_head, *m_tail;00103         <span class="keyword">const</span> byte *m_lazyString;00104         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_lazyLength;00105 };00106 <span class="comment"></span>00107 <span class="comment">//! use this to make sure LazyPut is finalized in event of exception</span><a name="l00108"></a><a class="code" href="class_lazy_putter.html">00108</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL LazyPutter00109 {00110 <span class="keyword">public</span>:00111         LazyPutter(ByteQueue &amp;bq, <span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size)00112                 : m_bq(bq) {bq.<a class="code" href="class_byte_queue.html#_d_e_r_set_encodera21">LazyPut</a>(inString, size);}00113         ~LazyPutter()00114                 {<span class="keywordflow">try</span> {m_bq.FinalizeLazyPut();} <span class="keywordflow">catch</span>(...) {}}00115 <span class="keyword">private</span>:00116         ByteQueue &amp;m_bq;00117 };00118 00119 NAMESPACE_END00120 00121 NAMESPACE_BEGIN(std)00122 <span class="keyword">template</span>&lt;&gt; <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(CryptoPP::ByteQueue &amp;a, CryptoPP::ByteQueue &amp;b)00123 {00124         a.swap(b);00125 }00126 NAMESPACE_END00127 00128 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:23 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -