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

📄 queue_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 3 页
字号:
00173 00174         <span class="keywordflow">for</span> (ByteQueueNode *current=m_head; current; current=next)00175         {00176                 next=current-&gt;next;00177                 <span class="keyword">delete</span> current;00178         }00179 }00180 00181 <span class="keywordtype">void</span> ByteQueue::IsolatedInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters)00182 {00183         m_nodeSize = parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha43">GetIntValueWithDefault</a>(<span class="stringliteral">"NodeSize"</span>, 256);00184         Clear();00185 }00186 00187 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> ByteQueue::CurrentSize()<span class="keyword"> const</span>00188 <span class="keyword"></span>{00189         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> size=0;00190 00191         <span class="keywordflow">for</span> (ByteQueueNode *current=m_head; current; current=current-&gt;next)00192                 size += current-&gt;CurrentSize();00193 00194         <span class="keywordflow">return</span> size + m_lazyLength;00195 }00196 00197 <span class="keywordtype">bool</span> ByteQueue::IsEmpty()<span class="keyword"> const</span>00198 <span class="keyword"></span>{00199         <span class="keywordflow">return</span> m_head==m_tail &amp;&amp; m_head-&gt;CurrentSize()==0 &amp;&amp; m_lazyLength==0;00200 }00201 00202 <span class="keywordtype">void</span> ByteQueue::Clear()00203 {00204         Destroy();00205         m_head = m_tail = <span class="keyword">new</span> ByteQueueNode(m_nodeSize);00206         m_lazyLength = 0;00207 }00208 <a name="l00209"></a><a class="code" href="class_byte_queue.html#_d_e_r_set_encodera7">00209</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_byte_queue.html#_d_e_r_set_encodera7">ByteQueue::Put2</a>(<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)00210 {00211         <span class="keywordflow">if</span> (m_lazyLength &gt; 0)00212                 FinalizeLazyPut();00213 00214         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len;00215         <span class="keywordflow">while</span> ((len=m_tail-&gt;Put(inString, length)) &lt; length)00216         {00217                 m_tail-&gt;next = <span class="keyword">new</span> ByteQueueNode(m_nodeSize);00218                 m_tail = m_tail-&gt;next;00219                 inString += len;00220                 length -= len;00221         }00222 00223         <span class="keywordflow">return</span> 0;00224 }00225 00226 <span class="keywordtype">void</span> ByteQueue::CleanupUsedNodes()00227 {00228         <span class="keywordflow">while</span> (m_head != m_tail &amp;&amp; m_head-&gt;UsedUp())00229         {00230                 ByteQueueNode *temp=m_head;00231                 m_head=m_head-&gt;next;00232                 <span class="keyword">delete</span> temp;00233         }00234 00235         <span class="keywordflow">if</span> (m_head-&gt;CurrentSize() == 0)00236                 m_head-&gt;Clear();00237 }00238 00239 <span class="keywordtype">void</span> ByteQueue::LazyPut(<span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size)00240 {00241         <span class="keywordflow">if</span> (m_lazyLength &gt; 0)00242                 FinalizeLazyPut();00243         m_lazyString = inString;00244         m_lazyLength = size;00245 }00246 00247 <span class="keywordtype">void</span> ByteQueue::UndoLazyPut(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size)00248 {00249         <span class="keywordflow">if</span> (m_lazyLength &lt; size)00250                 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"ByteQueue: size specified for UndoLazyPut is too large"</span>);00251 00252         m_lazyLength -= size;00253 }00254 00255 <span class="keywordtype">void</span> ByteQueue::FinalizeLazyPut()00256 {00257         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = m_lazyLength;00258         m_lazyLength = 0;00259         <span class="keywordflow">if</span> (len)00260                 <a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(m_lazyString, len);00261 }00262 <a name="l00263"></a><a class="code" href="class_byte_queue.html#_d_e_r_set_encodera8">00263</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_byte_queue.html#_d_e_r_set_encodera8">ByteQueue::Get</a>(byte &amp;outByte)00264 {00265         <span class="keywordflow">if</span> (m_head-&gt;Get(outByte))00266         {00267                 <span class="keywordflow">if</span> (m_head-&gt;UsedUp())00268                         CleanupUsedNodes();00269                 <span class="keywordflow">return</span> 1;00270         }00271         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_lazyLength &gt; 0)00272         {00273                 outByte = *m_lazyString++;00274                 m_lazyLength--;00275                 <span class="keywordflow">return</span> 1;00276         }00277         <span class="keywordflow">else</span>00278                 <span class="keywordflow">return</span> 0;00279 }00280 <a name="l00281"></a><a class="code" href="class_byte_queue.html#_d_e_r_set_encodera9">00281</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_byte_queue.html#_d_e_r_set_encodera8">ByteQueue::Get</a>(byte *outString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getMax)00282 {00283         <a class="code" href="class_array_sink.html">ArraySink</a> sink(outString, getMax);00284         <span class="keywordflow">return</span> <a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_10">TransferTo</a>(sink, getMax);00285 }00286 <a name="l00287"></a><a class="code" href="class_byte_queue.html#_d_e_r_set_encodera10">00287</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_byte_queue.html#_d_e_r_set_encodera10">ByteQueue::Peek</a>(byte &amp;outByte)<span class="keyword"> const</span>00288 <span class="keyword"></span>{00289         <span class="keywordflow">if</span> (m_head-&gt;Peek(outByte))00290                 <span class="keywordflow">return</span> 1;00291         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m_lazyLength &gt; 0)00292         {00293                 outByte = *m_lazyString;00294                 <span class="keywordflow">return</span> 1;00295         }00296         <span class="keywordflow">else</span>00297                 <span class="keywordflow">return</span> 0;00298 }00299 <a name="l00300"></a><a class="code" href="class_byte_queue.html#_d_e_r_set_encodera11">00300</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_byte_queue.html#_d_e_r_set_encodera10">ByteQueue::Peek</a>(byte *outString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> peekMax)<span class="keyword"> const</span>00301 <span class="keyword"></span>{00302         <a class="code" href="class_array_sink.html">ArraySink</a> sink(outString, peekMax);00303         <span class="keywordflow">return</span> <a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_12">CopyTo</a>(sink, peekMax);00304 }00305 <a name="l00306"></a><a class="code" href="class_byte_queue.html#_d_e_r_set_encodera12">00306</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_byte_queue.html#_d_e_r_set_encodera12">ByteQueue::TransferTo2</a>(<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, <span class="keywordtype">bool</span> blocking)00307 {00308         <span class="keywordflow">if</span> (blocking)00309         {00310                 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> bytesLeft = transferBytes;00311                 <span class="keywordflow">for</span> (ByteQueueNode *current=m_head; bytesLeft &amp;&amp; current; current=current-&gt;next)00312                         bytesLeft -= current-&gt;TransferTo(target, bytesLeft, channel);00313                 CleanupUsedNodes();00314 00315                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)STDMIN(bytesLeft, (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)m_lazyLength);00316                 <span class="keywordflow">if</span> (len)00317                 {00318                         target.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_0">ChannelPut</a>(channel, m_lazyString, len);00319                         m_lazyString += len;00320                         m_lazyLength -= len;00321                         bytesLeft -= len;00322                 }00323                 transferBytes -= bytesLeft;00324                 <span class="keywordflow">return</span> 0;00325         }00326         <span class="keywordflow">else</span>00327         {00328                 Walker walker(*<span class="keyword">this</span>);00329                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockedBytes = walker.TransferTo2(target, transferBytes, channel, blocking);00330                 <a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_11">Skip</a>(transferBytes);00331                 <span class="keywordflow">return</span> blockedBytes;00332         }00333 }00334 00335 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ByteQueue::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, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">bool</span> blocking)<span class="keyword"> const</span>00336 <span class="keyword"></span>{00337         Walker walker(*<span class="keyword">this</span>);00338         walker.Skip(begin);00339         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> transferBytes = end-begin;00340         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockedBytes = walker.TransferTo2(target, transferBytes, channel, blocking);00341         begin += transferBytes;00342         <span class="keywordflow">return</span> blockedBytes;00343 }00344 00345 <span class="keywordtype">void</span> ByteQueue::Unget(byte inByte)00346 {00347         Unget(&amp;inByte, 1);00348 }00349 00350 <span class="keywordtype">void</span> ByteQueue::Unget(<span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)00351 {

⌨️ 快捷键说明

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