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

📄 filters_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 5 页
字号:
00156         m_currentMessageBytes = 0;00157         m_currentSeriesMessages = 0;00158         m_totalMessageSeries++;00159         <span class="keywordflow">return</span> <span class="keyword">false</span>;00160 }00161 00162 <span class="comment">// *************************************************************</span>00163 00164 <span class="keywordtype">void</span> FilterWithBufferedInput::BlockQueue::ResetQueue(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> maxBlocks)00165 {00166         m_buffer.New(blockSize * maxBlocks);00167         m_blockSize = blockSize;00168         m_maxBlocks = maxBlocks;00169         m_size = 0;00170         m_begin = m_buffer;00171 }00172 00173 byte *FilterWithBufferedInput::BlockQueue::GetBlock()00174 {00175         <span class="keywordflow">if</span> (m_size &gt;= m_blockSize)00176         {00177                 byte *ptr = m_begin;00178                 <span class="keywordflow">if</span> ((m_begin+=m_blockSize) == m_buffer.end())00179                         m_begin = m_buffer;00180                 m_size -= m_blockSize;00181                 <span class="keywordflow">return</span> ptr;00182         }00183         <span class="keywordflow">else</span>00184                 <span class="keywordflow">return</span> NULL;00185 }00186 00187 byte *FilterWithBufferedInput::BlockQueue::GetContigousBlocks(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;numberOfBytes)00188 {00189         numberOfBytes = STDMIN(numberOfBytes, STDMIN((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)(m_buffer.end()-m_begin), m_size));00190         byte *ptr = m_begin;00191         m_begin += numberOfBytes;00192         m_size -= numberOfBytes;00193         <span class="keywordflow">if</span> (m_size == 0 || m_begin == m_buffer.end())00194                 m_begin = m_buffer;00195         <span class="keywordflow">return</span> ptr;00196 }00197 00198 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> FilterWithBufferedInput::BlockQueue::GetAll(byte *outString)00199 {00200         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size = m_size;00201         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numberOfBytes = m_maxBlocks*m_blockSize;00202         <span class="keyword">const</span> byte *ptr = GetContigousBlocks(numberOfBytes);00203         memcpy(outString, ptr, numberOfBytes);00204         memcpy(outString+numberOfBytes, m_begin, m_size);00205         m_size = 0;00206         <span class="keywordflow">return</span> size;00207 }00208 00209 <span class="keywordtype">void</span> <a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">FilterWithBufferedInput::BlockQueue::Put</a>(<span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)00210 {00211         assert(m_size + length &lt;= m_buffer.size());00212         byte *end = (m_size &lt; (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)(m_buffer.end()-m_begin)) ? m_begin + m_size : m_begin + m_size - m_buffer.size();00213         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = STDMIN(length, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)(m_buffer.end()-end));00214         memcpy(end, inString, len);00215         <span class="keywordflow">if</span> (len &lt; length)00216                 memcpy(m_buffer, inString+len, length-len);00217         m_size += length;00218 }00219 00220 <a class="code" href="class_filter_with_buffered_input.html#_filter_with_buffered_inputa1">FilterWithBufferedInput::FilterWithBufferedInput</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment)00221         : <a class="code" href="class_filter.html">Filter</a>(attachment)00222 {00223 }00224 <a name="l00225"></a><a class="code" href="class_filter_with_buffered_input.html#_filter_with_buffered_inputa1">00225</a> <a class="code" href="class_filter_with_buffered_input.html#_filter_with_buffered_inputa1">FilterWithBufferedInput::FilterWithBufferedInput</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> blockSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> lastSize, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment)00226         : <a class="code" href="class_filter.html">Filter</a>(attachment), m_firstSize(firstSize), m_blockSize(blockSize), m_lastSize(lastSize)00227         , m_firstInputDone(false)00228 {00229         <span class="keywordflow">if</span> (m_firstSize &lt; 0 || m_blockSize &lt; 1 || m_lastSize &lt; 0)00230                 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"FilterWithBufferedInput: invalid buffer size"</span>);00231 00232         m_queue.ResetQueue(1, m_firstSize);00233 }00234 00235 <span class="keywordtype">void</span> FilterWithBufferedInput::IsolatedInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters)00236 {00237         InitializeDerivedAndReturnNewSizes(parameters, m_firstSize, m_blockSize, m_lastSize);00238         <span class="keywordflow">if</span> (m_firstSize &lt; 0 || m_blockSize &lt; 1 || m_lastSize &lt; 0)00239                 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"FilterWithBufferedInput: invalid buffer size"</span>);00240         m_queue.ResetQueue(1, m_firstSize);00241         m_firstInputDone = <span class="keyword">false</span>;00242 }00243 <a name="l00244"></a><a class="code" href="class_filter_with_buffered_input.html#_stream_transformation_filtera8">00244</a> <span class="keywordtype">bool</span> <a class="code" href="class_filter_with_buffered_input.html#_stream_transformation_filtera8">FilterWithBufferedInput::IsolatedFlush</a>(<span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">bool</span> blocking)00245 {00246         <span class="keywordflow">if</span> (!blocking)00247                 <span class="keywordflow">throw</span> BlockingInputOnly(<span class="stringliteral">"FilterWithBufferedInput"</span>);00248         00249         <span class="keywordflow">if</span> (hardFlush)00250                 <a class="code" href="class_filter_with_buffered_input.html#_stream_transformation_filtera9">ForceNextPut</a>();00251         FlushDerived();00252         00253         <span class="keywordflow">return</span> <span class="keyword">false</span>;00254 }00255 00256 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> FilterWithBufferedInput::PutMaybeModifiable(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, <span class="keywordtype">bool</span> modifiable)00257 {00258         <span class="keywordflow">if</span> (!blocking)00259                 <span class="keywordflow">throw</span> BlockingInputOnly(<span class="stringliteral">"FilterWithBufferedInput"</span>);00260 00261         <span class="keywordflow">if</span> (length != 0)00262         {00263                 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> newLength = m_queue.CurrentSize() + length;00264 00265                 <span class="keywordflow">if</span> (!m_firstInputDone &amp;&amp; newLength &gt;= m_firstSize)00266                 {00267                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = m_firstSize - m_queue.CurrentSize();00268                         m_queue.Put(inString, len);00269                         FirstPut(m_queue.GetContigousBlocks(m_firstSize));00270                         assert(m_queue.CurrentSize() == 0);00271                         m_queue.ResetQueue(m_blockSize, (2*m_blockSize+m_lastSize-2)/m_blockSize);00272 00273                         inString += len;00274                         newLength -= m_firstSize;00275                         m_firstInputDone = <span class="keyword">true</span>;00276                 }00277 00278                 <span class="keywordflow">if</span> (m_firstInputDone)00279                 {00280                         <span class="keywordflow">if</span> (m_blockSize == 1)00281                         {00282                                 <span class="keywordflow">while</span> (newLength &gt; m_lastSize &amp;&amp; m_queue.CurrentSize() &gt; 0)00283                                 {00284                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = newLength - m_lastSize;00285                                         byte *ptr = m_queue.GetContigousBlocks(len);00286                                         NextPutModifiable(ptr, len);00287                                         newLength -= len;00288                                 }00289 00290                                 <span class="keywordflow">if</span> (newLength &gt; m_lastSize)00291                                 {00292                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = newLength - m_lastSize;00293                                         NextPutMaybeModifiable(inString, len, modifiable);00294                                         inString += len;00295                                         newLength -= len;00296                                 }00297                         }00298                         <span class="keywordflow">else</span>00299                         {00300                                 <span class="keywordflow">while</span> (newLength &gt;= m_blockSize + m_lastSize &amp;&amp; m_queue.CurrentSize() &gt;= m_blockSize)00301                                 {00302                                         NextPutModifiable(m_queue.GetBlock(), m_blockSize);00303                                         newLength -= m_blockSize;00304                                 }00305 00306                                 <span class="keywordflow">if</span> (newLength &gt;= m_blockSize + m_lastSize &amp;&amp; m_queue.CurrentSize() &gt; 0)00307                                 {00308                                         assert(m_queue.CurrentSize() &lt; m_blockSize);00309                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = m_blockSize - m_queue.CurrentSize();00310                                         m_queue.Put(inString, len);00311                                         inString += len;00312                                         NextPutModifiable(m_queue.GetBlock(), m_blockSize);00313                                         newLength -= m_blockSize;00314                                 }00315 00316                                 <span class="keywordflow">if</span> (newLength &gt;= m_blockSize + m_lastSize)00317                                 {

⌨️ 快捷键说明

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