📄 filters_8cpp-source.html
字号:
<a name="l00206"></a>00206 m_currentSeriesMessages++;<a name="l00207"></a>00207 m_totalMessages++;<a name="l00208"></a>00208 messageEnd = <span class="keyword">false</span>;<a name="l00209"></a>00209 }<a name="l00210"></a>00210 }<a name="l00211"></a>00211 }<a name="l00212"></a>00212 <a name="l00213"></a>00213 FILTER_END_NO_MESSAGE_END;<a name="l00214"></a>00214 }<a name="l00215"></a>00215 <a name="l00216"></a><a class="code" href="class_meter_filter.html#c85bac20a08666c434751558ec7b6c92">00216</a> <span class="keywordtype">size_t</span> <a class="code" href="class_meter_filter.html#c85bac20a08666c434751558ec7b6c92" title="input multiple bytes for blocking or non-blocking processing">MeterFilter::Put2</a>(<span class="keyword">const</span> byte *begin, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)<a name="l00217"></a>00217 {<a name="l00218"></a>00218 <span class="keywordflow">return</span> PutMaybeModifiable(const_cast<byte *>(begin), length, messageEnd, blocking, <span class="keyword">false</span>);<a name="l00219"></a>00219 }<a name="l00220"></a>00220 <a name="l00221"></a><a class="code" href="class_meter_filter.html#03c8af7442aa844e83e4c45397373f14">00221</a> <span class="keywordtype">size_t</span> <a class="code" href="class_meter_filter.html#03c8af7442aa844e83e4c45397373f14" title="input multiple bytes that may be modified by callee for blocking or non-blocking...">MeterFilter::PutModifiable2</a>(byte *begin, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> messageEnd, <span class="keywordtype">bool</span> blocking)<a name="l00222"></a>00222 {<a name="l00223"></a>00223 <span class="keywordflow">return</span> PutMaybeModifiable(begin, length, messageEnd, blocking, <span class="keyword">true</span>);<a name="l00224"></a>00224 }<a name="l00225"></a>00225 <a name="l00226"></a><a class="code" href="class_meter_filter.html#a3b923710e4ed83fb4980cb53504a521">00226</a> <span class="keywordtype">bool</span> <a class="code" href="class_meter_filter.html#a3b923710e4ed83fb4980cb53504a521">MeterFilter::IsolatedMessageSeriesEnd</a>(<span class="keywordtype">bool</span> blocking)<a name="l00227"></a>00227 {<a name="l00228"></a>00228 m_currentMessageBytes = 0;<a name="l00229"></a>00229 m_currentSeriesMessages = 0;<a name="l00230"></a>00230 m_totalMessageSeries++;<a name="l00231"></a>00231 <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00232"></a>00232 }<a name="l00233"></a>00233 <a name="l00234"></a>00234 <span class="comment">// *************************************************************</span><a name="l00235"></a>00235 <a name="l00236"></a>00236 <span class="keywordtype">void</span> FilterWithBufferedInput::BlockQueue::ResetQueue(<span class="keywordtype">size_t</span> blockSize, <span class="keywordtype">size_t</span> maxBlocks)<a name="l00237"></a>00237 {<a name="l00238"></a>00238 m_buffer.New(blockSize * maxBlocks);<a name="l00239"></a>00239 m_blockSize = blockSize;<a name="l00240"></a>00240 m_maxBlocks = maxBlocks;<a name="l00241"></a>00241 m_size = 0;<a name="l00242"></a>00242 m_begin = m_buffer;<a name="l00243"></a>00243 }<a name="l00244"></a>00244 <a name="l00245"></a>00245 byte *FilterWithBufferedInput::BlockQueue::GetBlock()<a name="l00246"></a>00246 {<a name="l00247"></a>00247 <span class="keywordflow">if</span> (m_size >= m_blockSize)<a name="l00248"></a>00248 {<a name="l00249"></a>00249 byte *ptr = m_begin;<a name="l00250"></a>00250 <span class="keywordflow">if</span> ((m_begin+=m_blockSize) == m_buffer.end())<a name="l00251"></a>00251 m_begin = m_buffer;<a name="l00252"></a>00252 m_size -= m_blockSize;<a name="l00253"></a>00253 <span class="keywordflow">return</span> ptr;<a name="l00254"></a>00254 }<a name="l00255"></a>00255 <span class="keywordflow">else</span><a name="l00256"></a>00256 <span class="keywordflow">return</span> NULL;<a name="l00257"></a>00257 }<a name="l00258"></a>00258 <a name="l00259"></a>00259 byte *FilterWithBufferedInput::BlockQueue::GetContigousBlocks(<span class="keywordtype">size_t</span> &numberOfBytes)<a name="l00260"></a>00260 {<a name="l00261"></a>00261 numberOfBytes = STDMIN(numberOfBytes, STDMIN(<span class="keywordtype">size_t</span>(m_buffer.end()-m_begin), m_size));<a name="l00262"></a>00262 byte *ptr = m_begin;<a name="l00263"></a>00263 m_begin += numberOfBytes;<a name="l00264"></a>00264 m_size -= numberOfBytes;<a name="l00265"></a>00265 <span class="keywordflow">if</span> (m_size == 0 || m_begin == m_buffer.end())<a name="l00266"></a>00266 m_begin = m_buffer;<a name="l00267"></a>00267 <span class="keywordflow">return</span> ptr;<a name="l00268"></a>00268 }<a name="l00269"></a>00269 <a name="l00270"></a>00270 <span class="keywordtype">size_t</span> FilterWithBufferedInput::BlockQueue::GetAll(byte *outString)<a name="l00271"></a>00271 {<a name="l00272"></a>00272 <span class="keywordtype">size_t</span> size = m_size;<a name="l00273"></a>00273 <span class="keywordtype">size_t</span> numberOfBytes = m_maxBlocks*m_blockSize;<a name="l00274"></a>00274 <span class="keyword">const</span> byte *ptr = GetContigousBlocks(numberOfBytes);<a name="l00275"></a>00275 memcpy(outString, ptr, numberOfBytes);<a name="l00276"></a>00276 memcpy(outString+numberOfBytes, m_begin, m_size);<a name="l00277"></a>00277 m_size = 0;<a name="l00278"></a>00278 <span class="keywordflow">return</span> size;<a name="l00279"></a>00279 }<a name="l00280"></a>00280 <a name="l00281"></a>00281 <span class="keywordtype">void</span> <a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">FilterWithBufferedInput::BlockQueue::Put</a>(<span class="keyword">const</span> byte *inString, <span class="keywordtype">size_t</span> length)<a name="l00282"></a>00282 {<a name="l00283"></a>00283 assert(m_size + length <= m_buffer.size());<a name="l00284"></a>00284 byte *end = (m_size < size_t(m_buffer.end()-m_begin)) ? m_begin + m_size : m_begin + m_size - m_buffer.size();<a name="l00285"></a>00285 <span class="keywordtype">size_t</span> len = STDMIN(length, <span class="keywordtype">size_t</span>(m_buffer.end()-end));<a name="l00286"></a>00286 memcpy(end, inString, len);<a name="l00287"></a>00287 <span class="keywordflow">if</span> (len < length)<a name="l00288"></a>00288 memcpy(m_buffer, inString+len, length-len);<a name="l00289"></a>00289 m_size += length;<a name="l00290"></a>00290 }<a name="l00291"></a>00291 <a name="l00292"></a><a class="code" href="class_filter_with_buffered_input.html#8c60c4e6452fdeb61f9d888bf50a706d">00292</a> <a class="code" href="class_filter_with_buffered_input.html#8c60c4e6452fdeb61f9d888bf50a706d">FilterWithBufferedInput::FilterWithBufferedInput</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> *attachment)<a name="l00293"></a>00293 : <a class="code" href="class_filter.html" title="provides an implementation of BufferedTransformation's attachment interface">Filter</a>(attachment)<a name="l00294"></a>00294 {<a name="l00295"></a>00295 }<a name="l00296"></a>00296 <a name="l00297"></a><a class="code" href="class_filter_with_buffered_input.html#9565e0646b6a53101f394992ca4e0d17">00297</a> <a class="code" href="class_filter_with_buffered_input.html#8c60c4e6452fdeb61f9d888bf50a706d">FilterWithBufferedInput::FilterWithBufferedInput</a>(<span class="keywordtype">size_t</span> firstSize, <span class="keywordtype">size_t</span> blockSize, <span class="keywordtype">size_t</span> lastSize, <a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> *attachment)<a name="l00298"></a>00298 : <a class="code" href="class_filter.html" title="provides an implementation of BufferedTransformation's attachment interface">Filter</a>(attachment), m_firstSize(firstSize), m_blockSize(blockSize), m_lastSize(lastSize)<a name="l00299"></a>00299 , m_firstInputDone(false)<a name="l00300"></a>00300 {<a name="l00301"></a>00301 <span class="keywordflow">if</span> (m_firstSize < 0 || m_blockSize < 1 || m_lastSize < 0)<a name="l00302"></a>00302 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html" title="exception thrown when an invalid argument is detected">InvalidArgument</a>(<span class="stringliteral">"FilterWithBufferedInput: invalid buffer size"</span>);<a name="l00303"></a>00303 <a name="l00304"></a>00304 m_queue.ResetQueue(1, m_firstSize);<a name="l00305"></a>00305 }<a name="l00306"></a>00306 <a name="l00307"></a><a class="code" href="class_filter_with_buffered_input.html#e97be71708e0020167e5c08856fd3f3b">00307</a> <span class="keywordtype">void</span> <a class="code" href="class_filter_with_buffered_input.html#e97be71708e0020167e5c08856fd3f3b">FilterWithBufferedInput::IsolatedInitialize</a>(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html" title="interface for retrieving values given their names">NameValuePairs</a> &parameters)<a name="l00308"></a>00308 {<a name="l00309"></a>00309 <a class="code" href="class_filter_with_buffered_input.html#5fba4d91d6349ecf1036c1aeb21d5e96">InitializeDerivedAndReturnNewSizes</a>(parameters, m_firstSize, m_blockSize, m_lastSize);<a name="l00310"></a>00310 <span class="keywordflow">if</span> (m_firstSize < 0 || m_blockSize < 1 || m_lastSize < 0)<a name="l00311"></a>00311 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html" title="exception thrown when an invalid argument is detected">InvalidArgument</a>(<span class="stringliteral">"FilterWithBufferedInput: invalid buffer size"</span>);<a name="l00312"></a>00312 m_queue.ResetQueue(1, m_firstSize);<a name="l00313"></a>00313 m_firstInputDone = <span class="keyword">false</span>;<a name="l00314"></a>00314 }<a name="l00315"></a>00315 <a name="l00316"></a><a class="code" href="class_filter_with_buffered_input.html#4261e0491864a31738cf53b3f9343806">00316</a> <span class="keywordtype">bool</span> <a class="code" href="class_filter_with_buffered_input.html#4261e0491864a31738cf53b3f9343806">FilterWithBufferedInput::IsolatedFlush</a>(<span class="keywordtype">bool</span> hardFlush, <span class="keywordtype">bool</span> blocking)<a name="l00317"></a>00317 {<a name="l00318"></a>00318 <span class="keywordflow">if</span> (!blocking)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -