📄 queue_8cpp-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.cpp 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.cpp</h1><div class="fragment"><pre>00001 <span class="comment">// queue.cpp - written and placed in the public domain by Wei Dai</span>00002 00003 <span class="preprocessor">#include "pch.h"</span>00004 00005 <span class="preprocessor">#ifndef CRYPTOPP_IMPORTS</span>00006 <span class="preprocessor"></span>00007 <span class="preprocessor">#include "queue.h"</span>00008 <span class="preprocessor">#include "filters.h"</span>00009 00010 NAMESPACE_BEGIN(CryptoPP)00011 00012 <span class="comment">// this class for use by ByteQueue only</span>00013 <span class="keyword">class </span>ByteQueueNode00014 {00015 <span class="keyword">public</span>:00016 ByteQueueNode(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxSize)00017 : buf(maxSize)00018 {00019 m_head = m_tail = 0;00020 next = 0;00021 }00022 00023 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> MaxSize()<span class="keyword"> const </span>{<span class="keywordflow">return</span> buf.size();}00024 00025 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> CurrentSize()<span class="keyword"> const</span>00026 <span class="keyword"> </span>{00027 <span class="keywordflow">return</span> m_tail-m_head;00028 }00029 00030 <span class="keyword">inline</span> <span class="keywordtype">bool</span> UsedUp()<span class="keyword"> const</span>00031 <span class="keyword"> </span>{00032 <span class="keywordflow">return</span> (m_head==MaxSize());00033 }00034 00035 <span class="keyword">inline</span> <span class="keywordtype">void</span> Clear()00036 {00037 m_head = m_tail = 0;00038 }00039 00040 <span class="comment">/* inline unsigned int Put(byte inByte)</span>00041 <span class="comment"> {</span>00042 <span class="comment"> if (MaxSize()==m_tail)</span>00043 <span class="comment"> return 0;</span>00044 <span class="comment"></span>00045 <span class="comment"> buf[m_tail++]=inByte;</span>00046 <span class="comment"> return 1;</span>00047 <span class="comment"> }</span>00048 <span class="comment">*/</span>00049 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Put(<span class="keyword">const</span> byte *begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)00050 {00051 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> l = STDMIN(length, MaxSize()-m_tail);00052 memcpy(buf+m_tail, begin, l);00053 m_tail += l;00054 <span class="keywordflow">return</span> l;00055 }00056 00057 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Peek(byte &outByte)<span class="keyword"> const</span>00058 <span class="keyword"> </span>{00059 <span class="keywordflow">if</span> (m_tail==m_head)00060 <span class="keywordflow">return</span> 0;00061 00062 outByte=buf[m_head];00063 <span class="keywordflow">return</span> 1;00064 }00065 00066 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Peek(byte *target, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> copyMax)<span class="keyword"> const</span>00067 <span class="keyword"> </span>{00068 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = STDMIN(copyMax, m_tail-m_head);00069 memcpy(target, buf+m_head, len);00070 <span class="keywordflow">return</span> len;00071 }00072 00073 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> CopyTo(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target, <span class="keyword">const</span> std::string &channel=BufferedTransformation::NULL_CHANNEL)<span class="keyword"> const</span>00074 <span class="keyword"> </span>{00075 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = m_tail-m_head;00076 target.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_0">ChannelPut</a>(channel, buf+m_head, len);00077 <span class="keywordflow">return</span> len;00078 }00079 00080 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> CopyTo(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> copyMax, <span class="keyword">const</span> std::string &channel=BufferedTransformation::NULL_CHANNEL)<span class="keyword"> const</span>00081 <span class="keyword"> </span>{00082 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = STDMIN(copyMax, m_tail-m_head);00083 target.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_0">ChannelPut</a>(channel, buf+m_head, len);00084 <span class="keywordflow">return</span> len;00085 }00086 00087 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Get(byte &outByte)00088 {00089 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = Peek(outByte);00090 m_head += len;00091 <span class="keywordflow">return</span> len;00092 }00093 00094 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Get(byte *outString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getMax)00095 {00096 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = Peek(outString, getMax);00097 m_head += len;00098 <span class="keywordflow">return</span> len;00099 }00100 00101 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> TransferTo(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target, <span class="keyword">const</span> std::string &channel=BufferedTransformation::NULL_CHANNEL)00102 {00103 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = m_tail-m_head;00104 target.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_2">ChannelPutModifiable</a>(channel, buf+m_head, len);00105 m_head = m_tail;00106 <span class="keywordflow">return</span> len;00107 }00108 00109 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> TransferTo(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> transferMax, <span class="keyword">const</span> std::string &channel=BufferedTransformation::NULL_CHANNEL)00110 {00111 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = STDMIN(transferMax, m_tail-m_head);00112 target.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_2">ChannelPutModifiable</a>(channel, buf+m_head, len);00113 m_head += len;00114 <span class="keywordflow">return</span> len;00115 }00116 00117 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Skip(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> skipMax)00118 {00119 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = STDMIN(skipMax, m_tail-m_head);00120 m_head += len;00121 <span class="keywordflow">return</span> len;00122 }00123 00124 <span class="keyword">inline</span> byte operator[](<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i)<span class="keyword"> const</span>00125 <span class="keyword"> </span>{00126 <span class="keywordflow">return</span> buf[m_head+i];00127 }00128 00129 ByteQueueNode *next;00130 00131 <a class="code" href="class_sec_block.html">SecByteBlock</a> buf;00132 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_head, m_tail;00133 };00134 00135 <span class="comment">// ********************************************************</span>00136 00137 ByteQueue::ByteQueue(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_nodeSize)00138 : m_nodeSize(m_nodeSize), m_lazyLength(0)00139 {00140 m_head = m_tail = <span class="keyword">new</span> ByteQueueNode(m_nodeSize);00141 }00142 00143 ByteQueue::ByteQueue(<span class="keyword">const</span> <a class="code" href="class_byte_queue.html">ByteQueue</a> &copy)00144 {00145 CopyFrom(copy);00146 }00147 00148 <span class="keywordtype">void</span> ByteQueue::CopyFrom(<span class="keyword">const</span> <a class="code" href="class_byte_queue.html">ByteQueue</a> &copy)00149 {00150 m_lazyLength = 0;00151 m_nodeSize = copy.<a class="code" href="class_byte_queue.html#_byte_queuer0">m_nodeSize</a>;00152 m_head = m_tail = <span class="keyword">new</span> ByteQueueNode(*copy.<a class="code" href="class_byte_queue.html#_byte_queuer1">m_head</a>);00153 00154 <span class="keywordflow">for</span> (ByteQueueNode *current=copy.<a class="code" href="class_byte_queue.html#_byte_queuer1">m_head</a>->next; current; current=current->next)00155 {00156 m_tail->next = <span class="keyword">new</span> ByteQueueNode(*current);00157 m_tail = m_tail->next;00158 }00159 00160 m_tail->next = NULL;00161 00162 <a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(copy.<a class="code" href="class_byte_queue.html#_byte_queuer3">m_lazyString</a>, copy.<a class="code" href="class_byte_queue.html#_byte_queuer4">m_lazyLength</a>);00163 }00164 00165 ByteQueue::~ByteQueue()00166 {00167 Destroy();00168 }00169 00170 <span class="keywordtype">void</span> ByteQueue::Destroy()00171 {00172 ByteQueueNode *next;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -