📄 channels_8cpp-source.html
字号:
00145 };00146 00147 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ChannelSwitch::ChannelPut2(<span class="keyword">const</span> std::string &channel, <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)00148 {00149 <span class="keywordflow">if</span> (!blocking)00150 <span class="keywordflow">throw</span> BlockingInputOnly(<span class="stringliteral">"ChannelSwitch"</span>);00151 00152 ChannelRouteIterator it(*<span class="keyword">this</span>, channel);00153 <span class="keywordflow">while</span> (!it.End())00154 {00155 it.Destination().ChannelPut2(it.Channel(), begin, length, messageEnd, blocking);00156 it.Next();00157 }00158 <span class="keywordflow">return</span> 0;00159 }00160 00161 <span class="keywordtype">void</span> ChannelSwitch::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="comment">/* =g_nullNameValuePairs */</span>, <span class="keywordtype">int</span> propagation<span class="comment">/* =-1 */</span>)00162 {00163 <span class="keywordflow">if</span> (channel.empty())00164 {00165 m_routeMap.clear();00166 m_defaultRoutes.clear();00167 }00168 00169 ChannelRouteIterator it(*<span class="keyword">this</span>, channel);00170 <span class="keywordflow">while</span> (!it.End())00171 {00172 it.Destination().ChannelInitialize(it.Channel(), parameters, propagation);00173 it.Next();00174 }00175 }00176 00177 <span class="keywordtype">bool</span> ChannelSwitch::ChannelFlush(<span class="keyword">const</span> std::string &channel, <span class="keywordtype">bool</span> completeFlush, <span class="keywordtype">int</span> propagation, <span class="keywordtype">bool</span> blocking)00178 {00179 <span class="keywordflow">if</span> (!blocking)00180 <span class="keywordflow">throw</span> BlockingInputOnly(<span class="stringliteral">"ChannelSwitch"</span>);00181 00182 ChannelRouteIterator it(*<span class="keyword">this</span>, channel);00183 <span class="keywordflow">while</span> (!it.End())00184 {00185 it.Destination().ChannelFlush(it.Channel(), completeFlush, propagation, blocking);00186 it.Next();00187 }00188 <span class="keywordflow">return</span> <span class="keyword">false</span>;00189 }00190 00191 <span class="keywordtype">bool</span> ChannelSwitch::ChannelMessageSeriesEnd(<span class="keyword">const</span> std::string &channel, <span class="keywordtype">int</span> propagation, <span class="keywordtype">bool</span> blocking)00192 {00193 <span class="keywordflow">if</span> (!blocking)00194 <span class="keywordflow">throw</span> BlockingInputOnly(<span class="stringliteral">"ChannelSwitch"</span>);00195 00196 ChannelRouteIterator it(*<span class="keyword">this</span>, channel);00197 <span class="keywordflow">while</span> (!it.End())00198 {00199 it.Destination().ChannelMessageSeriesEnd(it.Channel(), propagation);00200 it.Next();00201 }00202 <span class="keywordflow">return</span> <span class="keyword">false</span>;00203 }00204 00205 byte * ChannelSwitch::ChannelCreatePutSpace(<span class="keyword">const</span> std::string &channel, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &size)00206 {00207 ChannelRouteIterator it(*<span class="keyword">this</span>, channel);00208 <span class="keywordflow">if</span> (!it.End())00209 {00210 <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target = it.Destination();00211 it.Next();00212 <span class="keywordflow">if</span> (it.End()) <span class="comment">// there is only one target channel</span>00213 <span class="keywordflow">return</span> target.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_7">ChannelCreatePutSpace</a>(it.Channel(), size);00214 }00215 size = 0;00216 <span class="keywordflow">return</span> NULL;00217 }00218 00219 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ChannelSwitch::ChannelPutModifiable2(<span class="keyword">const</span> std::string &channel, 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)00220 {00221 <span class="keywordflow">if</span> (!blocking)00222 <span class="keywordflow">throw</span> BlockingInputOnly(<span class="stringliteral">"ChannelSwitch"</span>);00223 00224 ChannelRouteIterator it(*<span class="keyword">this</span>, channel);00225 <span class="keywordflow">if</span> (!it.End())00226 {00227 <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &target = it.Destination();00228 <span class="keyword">const</span> std::string &targetChannel = it.Channel();00229 it.Next();00230 <span class="keywordflow">if</span> (it.End()) <span class="comment">// there is only one target channel</span>00231 <span class="keywordflow">return</span> target.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz13_9">ChannelPutModifiable2</a>(targetChannel, inString, length, messageEnd, blocking);00232 }00233 ChannelPut2(channel, inString, length, messageEnd, blocking);00234 <span class="keywordflow">return</span> <span class="keyword">false</span>;00235 }00236 00237 <span class="keywordtype">void</span> ChannelSwitch::AddDefaultRoute(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &destination)00238 {00239 m_defaultRoutes.push_back(DefaultRoute(&destination, value_ptr<std::string>(NULL)));00240 }00241 00242 <span class="keywordtype">void</span> ChannelSwitch::RemoveDefaultRoute(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &destination)00243 {00244 <span class="keywordflow">for</span> (DefaultRouteList::iterator it = m_defaultRoutes.begin(); it != m_defaultRoutes.end(); ++it)00245 <span class="keywordflow">if</span> (it->first == &destination && !it->second.get())00246 {00247 m_defaultRoutes.erase(it);00248 <span class="keywordflow">break</span>;00249 }00250 }00251 00252 <span class="keywordtype">void</span> ChannelSwitch::AddDefaultRoute(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &destination, <span class="keyword">const</span> std::string &outChannel)00253 {00254 m_defaultRoutes.push_back(DefaultRoute(&destination, outChannel));00255 }00256 00257 <span class="keywordtype">void</span> ChannelSwitch::RemoveDefaultRoute(<a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &destination, <span class="keyword">const</span> std::string &outChannel)00258 {00259 <span class="keywordflow">for</span> (DefaultRouteList::iterator it = m_defaultRoutes.begin(); it != m_defaultRoutes.end(); ++it)00260 <span class="keywordflow">if</span> (it->first == &destination && (it->second.get() && *it->second == outChannel))00261 {00262 m_defaultRoutes.erase(it);00263 <span class="keywordflow">break</span>;00264 }00265 }00266 00267 <span class="keywordtype">void</span> ChannelSwitch::AddRoute(<span class="keyword">const</span> std::string &inChannel, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &destination, <span class="keyword">const</span> std::string &outChannel)00268 {00269 m_routeMap.insert(RouteMap::value_type(inChannel, Route(&destination, outChannel)));00270 }00271 00272 <span class="keywordtype">void</span> ChannelSwitch::RemoveRoute(<span class="keyword">const</span> std::string &inChannel, <a class="code" href="class_buffered_transformation.html">BufferedTransformation</a> &destination, <span class="keyword">const</span> std::string &outChannel)00273 {00274 <span class="keyword">typedef</span> ChannelSwitch::RouteMap::iterator MapIterator;00275 pair<MapIterator, MapIterator> range = m_routeMap.equal_range(inChannel);00276 00277 <span class="keywordflow">for</span> (MapIterator it = range.first; it != range.second; ++it)00278 <span class="keywordflow">if</span> (it->second.first == &destination && it->second.second == outChannel)00279 {00280 m_routeMap.erase(it);00281 <span class="keywordflow">break</span>;00282 }00283 }00284 00285 NAMESPACE_END00286 00287 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:10 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -