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

📄 filters_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<!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++: filters.h 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>filters.h</h1><div class="fragment"><pre>00001 <span class="preprocessor">#ifndef CRYPTOPP_FILTERS_H</span>00002 <span class="preprocessor"></span><span class="preprocessor">#define CRYPTOPP_FILTERS_H</span>00003 <span class="preprocessor"></span>00004 <span class="preprocessor">#include "<a class="code" href="simple_8h.html">simple.h</a>"</span>00005 <span class="preprocessor">#include "secblock.h"</span>00006 <span class="preprocessor">#include "misc.h"</span>00007 <span class="preprocessor">#include "smartptr.h"</span>00008 <span class="preprocessor">#include "queue.h"</span>00009 <span class="preprocessor">#include "algparam.h"</span>00010 00011 NAMESPACE_BEGIN(CryptoPP)00012 00013 <span class="comment">/// provides an implementation of BufferedTransformation's attachment interface</span><a name="l00014"></a><a class="code" href="class_filter.html">00014</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL Filter : <span class="keyword">public</span> <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a>, <span class="keyword">public</span> NotCopyable00015 {00016 <span class="keyword">public</span>:00017         Filter(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment);00018 <a name="l00019"></a><a class="code" href="class_filter.html#_zlib_decompressora7">00019</a>         <span class="keywordtype">bool</span> <a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz15_0">Attachable</a>() {<span class="keywordflow">return</span> <span class="keyword">true</span>;}00020         <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *<a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz15_1">AttachedTransformation</a>();00021         <span class="keyword">const</span> <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *<a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz15_1">AttachedTransformation</a>() <span class="keyword">const</span>;00022         <span class="keywordtype">void</span> <a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz15_3">Detach</a>(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *newAttachment = NULL);00023 00024         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_buffered_transformation.html#_storez11_0">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=NULL_CHANNEL, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>);00025         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> 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=ULONG_MAX, <span class="keyword">const</span> std::string &amp;channel=NULL_CHANNEL, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>) <span class="keyword">const</span>;00026 00027         <span class="keywordtype">void</span> <a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz5_2">Initialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters=g_nullNameValuePairs, <span class="keywordtype">int</span> propagation=-1);00028         <span class="keywordtype">bool</span> <a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz5_3">Flush</a>(<span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">int</span> propagation=-1, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>);00029         <span class="keywordtype">bool</span> <a class="code" href="class_buffered_transformation.html#_windows_pipe_sinkz5_4">MessageSeriesEnd</a>(<span class="keywordtype">int</span> propagation=-1, <span class="keywordtype">bool</span> blocking=<span class="keyword">true</span>);00030 00031 <span class="keyword">protected</span>:00032         <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotifyAttachmentChange() {}00033         <span class="keyword">virtual</span> <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> * NewDefaultAttachment() <span class="keyword">const</span>;00034         <span class="keywordtype">void</span> Insert(Filter *nextFilter);        <span class="comment">// insert filter after this one</span>00035 00036         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> ShouldPropagateMessageEnd()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}00037         <span class="keyword">virtual</span> <span class="keywordtype">bool</span> ShouldPropagateMessageSeriesEnd()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}00038 00039         <span class="keywordtype">void</span> PropagateInitialize(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;parameters, <span class="keywordtype">int</span> propagation, <span class="keyword">const</span> std::string &amp;channel=NULL_CHANNEL);00040 00041         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Output(<span class="keywordtype">int</span> outputSite, <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, <span class="keyword">const</span> std::string &amp;channel=NULL_CHANNEL);00042         <span class="keywordtype">bool</span> OutputMessageEnd(<span class="keywordtype">int</span> outputSite, <span class="keywordtype">int</span> propagation, <span class="keywordtype">bool</span> blocking, <span class="keyword">const</span> std::string &amp;channel=NULL_CHANNEL);00043         <span class="keywordtype">bool</span> OutputFlush(<span class="keywordtype">int</span> outputSite, <span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">int</span> propagation, <span class="keywordtype">bool</span> blocking, <span class="keyword">const</span> std::string &amp;channel=NULL_CHANNEL);00044         <span class="keywordtype">bool</span> OutputMessageSeriesEnd(<span class="keywordtype">int</span> outputSite, <span class="keywordtype">int</span> propagation, <span class="keywordtype">bool</span> blocking, <span class="keyword">const</span> std::string &amp;channel=NULL_CHANNEL);00045 00046 <span class="keyword">private</span>:00047         member_ptr&lt;BufferedTransformation&gt; m_attachment;00048         00049 <span class="keyword">protected</span>:00050         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_inputPosition;00051         <span class="keywordtype">int</span> m_continueAt;00052 };00053 00054 <span class="keyword">struct </span>CRYPTOPP_DLL FilterPutSpaceHelper00055 {00056         <span class="comment">// desiredSize is how much to ask target, bufferSize is how much to allocate in m_tempSpace</span>00057         byte *HelpCreatePutSpace(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> minSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> desiredSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;bufferSize)00058         {00059                 assert(desiredSize &gt;= minSize &amp;&amp; bufferSize &gt;= minSize);00060                 <span class="keywordflow">if</span> (m_tempSpace.size() &lt; minSize)00061                 {00062                         byte *result = target.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_7">ChannelCreatePutSpace</a>(channel, desiredSize);00063                         <span class="keywordflow">if</span> (desiredSize &gt;= minSize)00064                         {00065                                 bufferSize = desiredSize;00066                                 <span class="keywordflow">return</span> result;00067                         }00068                         m_tempSpace.New(bufferSize);00069                 }00070 00071                 bufferSize = m_tempSpace.size();00072                 <span class="keywordflow">return</span> m_tempSpace.begin();00073         }00074         byte *HelpCreatePutSpace(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> minSize)00075                 {<span class="keywordflow">return</span> HelpCreatePutSpace(target, channel, minSize, minSize, minSize);}00076         byte *HelpCreatePutSpace(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &amp;target, <span class="keyword">const</span> std::string &amp;channel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> minSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bufferSize)00077                 {<span class="keywordflow">return</span> HelpCreatePutSpace(target, channel, minSize, minSize, bufferSize);}00078         <a class="code" href="class_sec_block.html">SecByteBlock</a> m_tempSpace;00079 };00080 <span class="comment"></span>00081 <span class="comment">//! measure how many byte and messages pass through, also serves as valve</span><a name="l00082"></a><a class="code" href="class_meter_filter.html">00082</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL MeterFilter : <span class="keyword">public</span> Bufferless&lt;Filter&gt;00083 {00084 <span class="keyword">public</span>:00085         MeterFilter(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> *attachment=NULL, <span class="keywordtype">bool</span> transparent=<span class="keyword">true</span>)00086                 : Bufferless&lt;Filter&gt;(attachment), m_transparent(transparent) {ResetMeter();}00087 00088         <span class="keywordtype">void</span> SetTransparent(<span class="keywordtype">bool</span> transparent) {m_transparent = transparent;}00089         <span class="keywordtype">void</span> ResetMeter() {m_currentMessageBytes = m_totalBytes = m_currentSeriesMessages = m_totalMessages = m_totalMessageSeries = 0;}00090 00091         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetCurrentMessageBytes()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_currentMessageBytes;}00092         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetTotalBytes() {<span class="keywordflow">return</span> m_totalBytes;}00093         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetCurrentSeriesMessages() {<span class="keywordflow">return</span> m_currentSeriesMessages;}00094         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetTotalMessages() {<span class="keywordflow">return</span> m_totalMessages;}00095         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> GetTotalMessageSeries() {<span class="keywordflow">return</span> m_totalMessageSeries;}00096 00097         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> Put2(<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);00098         <span class="keywordtype">bool</span> IsolatedMessageSeriesEnd(<span class="keywordtype">bool</span> blocking);00099 00100 <span class="keyword">private</span>:00101         <span class="keywordtype">bool</span> ShouldPropagateMessageEnd()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_transparent;}00102         <span class="keywordtype">bool</span> ShouldPropagateMessageSeriesEnd()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_transparent;}00103 

⌨️ 快捷键说明

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