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

📄 queue_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<!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&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.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 &amp;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> &amp;target, <span class="keyword">const</span> std::string &amp;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> &amp;target, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> copyMax, <span class="keyword">const</span> std::string &amp;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 &amp;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> &amp;target, <span class="keyword">const</span> std::string &amp;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> &amp;target, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> transferMax, <span class="keyword">const</span> std::string &amp;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> &amp;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> &amp;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>-&gt;next; current; current=current-&gt;next)00155         {00156                 m_tail-&gt;next = <span class="keyword">new</span> ByteQueueNode(*current);00157                 m_tail = m_tail-&gt;next;00158         }00159 00160         m_tail-&gt;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 + -