📄 filters_8cpp-source.html
字号:
00318 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len = RoundDownToMultipleOf(newLength - m_lastSize, m_blockSize);00319 NextPutMaybeModifiable(inString, len, modifiable);00320 inString += len;00321 newLength -= len;00322 }00323 }00324 }00325 00326 m_queue.Put(inString, newLength - m_queue.CurrentSize());00327 }00328 00329 <span class="keywordflow">if</span> (messageEnd)00330 {00331 <span class="keywordflow">if</span> (!m_firstInputDone && m_firstSize==0)00332 FirstPut(NULL);00333 00334 <a class="code" href="class_sec_block.html">SecByteBlock</a> temp(m_queue.CurrentSize());00335 m_queue.GetAll(temp);00336 LastPut(temp, temp.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00337 00338 m_firstInputDone = <span class="keyword">false</span>;00339 m_queue.ResetQueue(1, m_firstSize);00340 00341 Output(1, NULL, 0, messageEnd, blocking);00342 }00343 <span class="keywordflow">return</span> 0;00344 }00345 <a name="l00346"></a><a class="code" href="class_filter_with_buffered_input.html#_stream_transformation_filtera9">00346</a> <span class="keywordtype">void</span> <a class="code" href="class_filter_with_buffered_input.html#_stream_transformation_filtera9">FilterWithBufferedInput::ForceNextPut</a>()00347 {00348 <span class="keywordflow">if</span> (!m_firstInputDone)00349 <span class="keywordflow">return</span>;00350 00351 <span class="keywordflow">if</span> (m_blockSize > 1)00352 {00353 <span class="keywordflow">while</span> (m_queue.CurrentSize() >= m_blockSize)00354 NextPutModifiable(m_queue.GetBlock(), m_blockSize);00355 }00356 <span class="keywordflow">else</span>00357 {00358 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len;00359 <span class="keywordflow">while</span> ((len = m_queue.CurrentSize()) > 0)00360 NextPutModifiable(m_queue.GetContigousBlocks(len), len);00361 }00362 }00363 00364 <span class="keywordtype">void</span> FilterWithBufferedInput::NextPutMultiple(<span class="keyword">const</span> byte *inString, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)00365 {00366 assert(m_blockSize > 1); <span class="comment">// m_blockSize = 1 should always override this function</span>00367 <span class="keywordflow">while</span> (length > 0)00368 {00369 assert(length >= m_blockSize);00370 NextPutSingle(inString);00371 inString += m_blockSize;00372 length -= m_blockSize;00373 }00374 }00375 00376 <span class="comment">// *************************************************************</span>00377 00378 <span class="keywordtype">void</span> Redirector::ChannelInitialize(<span class="keyword">const</span> std::string &channel, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters, <span class="keywordtype">int</span> propagation)00379 {00380 <span class="keywordflow">if</span> (channel.empty())00381 {00382 m_target = parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">GetValueWithDefault</a>(<span class="stringliteral">"RedirectionTargetPointer"</span>, (<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a>*)NULL);00383 m_passSignal = parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">GetValueWithDefault</a>(<span class="stringliteral">"PassSignal"</span>, <span class="keyword">true</span>);00384 }00385 00386 <span class="keywordflow">if</span> (m_target && m_passSignal)00387 m_target-><a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_10">ChannelInitialize</a>(channel, parameters, propagation);00388 }00389 00390 <span class="comment">// *************************************************************</span>00391 00392 ProxyFilter::ProxyFilter(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *filter, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> firstSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> lastSize, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment)00393 : <a class="code" href="class_filter_with_buffered_input.html">FilterWithBufferedInput</a>(firstSize, 1, lastSize, attachment), m_filter(filter), m_proxy(NULL)00394 {00395 <span class="keywordflow">if</span> (m_filter.get())00396 m_filter->Attach(m_proxy = <span class="keyword">new</span> OutputProxy(*<span class="keyword">this</span>, <span class="keyword">false</span>));00397 }00398 00399 <span class="keywordtype">void</span> <a class="code" href="class_filter_with_buffered_input.html#_stream_transformation_filtera8">ProxyFilter::IsolatedFlush</a>(<span class="keywordtype">bool</span> completeFlush)00400 {00401 <span class="keywordflow">if</span> (m_filter.get())00402 {00403 <span class="keywordtype">bool</span> passSignal = m_proxy->GetPassSignal();00404 m_proxy->SetPassSignal(<span class="keyword">false</span>);00405 m_filter->Flush(completeFlush, -1);00406 m_proxy->SetPassSignal(passSignal);00407 }00408 }00409 00410 <span class="keywordtype">void</span> ProxyFilter::SetFilter(<a class="code" href="class_filter.html">Filter</a> *filter)00411 {00412 <span class="keywordtype">bool</span> passSignal = m_proxy ? m_proxy->GetPassSignal() : false;00413 m_filter.reset(filter);00414 <span class="keywordflow">if</span> (filter)00415 {00416 std::auto_ptr<OutputProxy> temp(m_proxy = <span class="keyword">new</span> OutputProxy(*<span class="keyword">this</span>, passSignal));00417 m_filter->TransferAllTo(*m_proxy);00418 m_filter->Attach(temp.release());00419 }00420 <span class="keywordflow">else</span>00421 m_proxy=NULL;00422 }00423 00424 <span class="keywordtype">void</span> ProxyFilter::NextPutMultiple(<span class="keyword">const</span> byte *s, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> len) 00425 {00426 <span class="keywordflow">if</span> (m_filter.get())00427 m_filter->Put(s, len);00428 }00429 00430 <span class="comment">// *************************************************************</span>00431 <a name="l00432"></a><a class="code" href="class_array_sink.html#_array_sinka6">00432</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_array_sink.html#_array_sinka6">ArraySink::Put2</a>(<span class="keyword">const</span> byte *begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)00433 {00434 memcpy(m_buf+m_total, begin, STDMIN(length, SaturatingSubtract(m_size, m_total)));00435 m_total += length;00436 <span class="keywordflow">return</span> 0;00437 }00438 <a name="l00439"></a><a class="code" href="class_array_sink.html#_array_sinka5">00439</a> byte * <a class="code" href="class_array_sink.html#_array_sinka5">ArraySink::CreatePutSpace</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &size)00440 {00441 size = m_size - m_total;00442 <span class="keywordflow">return</span> m_buf + m_total;00443 }00444 00445 <span class="keywordtype">void</span> ArraySink::IsolatedInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &parameters)00446 {00447 ByteArrayParameter array;00448 <span class="keywordflow">if</span> (!parameters.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>(Name::OutputBuffer(), array))00449 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(<span class="stringliteral">"ArraySink: missing OutputBuffer argument"</span>);00450 m_buf = array.begin();00451 m_size = array.size();00452 m_total = 0;00453 }00454 <a name="l00455"></a><a class="code" href="class_array_xor_sink.html#_array_xor_sinka1">00455</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_array_xor_sink.html#_array_xor_sinka1">ArrayXorSink::Put2</a>(<span class="keyword">const</span> byte *begin, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)00456 {00457 xorbuf(m_buf+m_total, begin, STDMIN(length, SaturatingSubtract(m_size, m_total)));00458 m_total += length;00459 <span class="keywordflow">return</span> 0;00460 }00461 00462 <span class="comment">// *************************************************************</span>00463 00464 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> StreamTransformationFilter::LastBlockSize(<a class="code" href="class_stream_transformation.html">StreamTransformation</a> &c, BlockPaddingScheme padding)00465 {00466 <span class="keywordflow">if</span> (c.MinLastBlockSize() > 0)00467 <span class="keywordflow">return</span> c.MinLastBlockSize();00468 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c.MandatoryBlockSize() > 1 && !c.IsForwardTransformation() && padding != NO_PADDING && padding != ZEROS_PADDING)00469 <span class="keywordflow">return</span> c.MandatoryBlockSize();00470 <span class="keywordflow">else</span>00471 <span class="keywordflow">return</span> 0;00472 }00473 <a name="l00474"></a><a class="code" href="class_stream_transformation_filter.html#_stream_transformation_filtera0">00474</a> <a class="code" href="class_stream_transformation_filter.html#_stream_transformation_filtera0">StreamTransformationFilter::StreamTransformationFilter</a>(<a class="code" href="class_stream_transformation.html">StreamTransformation</a> &c, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment, BlockPaddingScheme padding)00475 : <a class="code" href="class_filter_with_buffered_input.html">FilterWithBufferedInput</a>(0, c.MandatoryBlockSize(), LastBlockSize(c, padding), attachment)00476 , m_cipher(c)00477 {00478 assert(c.MinLastBlockSize() == 0 || c.MinLastBlockSize() > c.MandatoryBlockSize());00479
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -