📄 queue_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>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 Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Compound List</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Compound Members</a> | <a class="qindex" href="globals.html">File 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 <algorithm></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<BufferedTransformation>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 &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> &parameters);00029 byte * CreatePutSpace(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &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 &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 &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> &target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &transferBytes, <span class="keyword">const</span> std::string &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> &target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> end=ULONG_MAX, <span class="keyword">const</span> std::string &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> &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 & operator=(<span class="keyword">const</span> ByteQueue &rhs);00059 <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> ByteQueue &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 &rhs);00062 00063 <span class="keyword">class </span>Walker : <span class="keyword">public</span> InputRejecting<BufferedTransformation>00064 {00065 <span class="keyword">public</span>:00066 Walker(<span class="keyword">const</span> ByteQueue &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> &parameters);00075 00076 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Get(byte &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 &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> &target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &transferBytes, <span class="keyword">const</span> std::string &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> &target, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> &begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> end=ULONG_MAX, <span class="keyword">const</span> std::string &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 &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 &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 &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 &m_bq;00117 };00118 00119 NAMESPACE_END00120 00121 NAMESPACE_BEGIN(std)00122 <span class="keyword">template</span><> <span class="keyword">inline</span> <span class="keywordtype">void</span> swap(CryptoPP::ByteQueue &a, CryptoPP::ByteQueue &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 + -