x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
sequence.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\algorithm\string\detail\sequence.hpp
旋转
特效
属性
历史版本
// Boost string_algo library sequence.hpp header file ---------------------------// // Copyright Pavol Droba 2002-2003. // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org/ for updates, documentation, and revision history. #ifndef BOOST_STRING_DETAIL_SEQUENCE_HPP #define BOOST_STRING_DETAIL_SEQUENCE_HPP #include
#include
#include
#include
#include
#include
namespace boost { namespace algorithm { namespace detail { // insert helpers -------------------------------------------------// template< typename InputT, typename ForwardIteratorT > inline void insert( InputT& Input, BOOST_STRING_TYPENAME InputT::iterator At, ForwardIteratorT Begin, ForwardIteratorT End ) { Input.insert( At, Begin, End ); } template< typename InputT, typename InsertT > inline void insert( InputT& Input, BOOST_STRING_TYPENAME InputT::iterator At, const InsertT& Insert ) { insert( Input, At, begin(Insert), end(Insert) ); } // erase helper ---------------------------------------------------// // Erase a range in the sequence /* Returns the iterator pointing just after the erase subrange */ template< typename InputT > inline typename InputT::iterator erase( InputT& Input, BOOST_STRING_TYPENAME InputT::iterator From, BOOST_STRING_TYPENAME InputT::iterator To ) { return Input.erase( From, To ); } // replace helper implementation ----------------------------------// // Optimized version of replace for generic sequence containers // Assumption: insert and erase are expensive template< bool HasConstTimeOperations > struct replace_const_time_helper { template< typename InputT, typename ForwardIteratorT > void operator()( InputT& Input, BOOST_STRING_TYPENAME InputT::iterator From, BOOST_STRING_TYPENAME InputT::iterator To, ForwardIteratorT Begin, ForwardIteratorT End ) { // Copy data to the container ( as much as possible ) ForwardIteratorT InsertIt=Begin; BOOST_STRING_TYPENAME InputT::iterator InputIt=From; for(; InsertIt!=End && InputIt!=To; InsertIt++, InputIt++ ) { *InputIt=*InsertIt; } if ( InsertIt!=End ) { // Replace sequence is longer, insert it Input.insert( InputIt, InsertIt, End ); } else { if ( InputIt!=To ) { // Replace sequence is shorter, erase the rest Input.erase( InputIt, To ); } } } }; template<> struct replace_const_time_helper< true > { // Const-time erase and insert methods -> use them template< typename InputT, typename ForwardIteratorT > void operator()( InputT& Input, BOOST_STRING_TYPENAME InputT::iterator From, BOOST_STRING_TYPENAME InputT::iterator To, ForwardIteratorT Begin, ForwardIteratorT End ) { BOOST_STRING_TYPENAME InputT::iterator At=Input.erase( From, To ); if ( Begin!=End ) { if(!Input.empty()) { Input.insert( At, Begin, End ); } else { Input.insert( Input.begin(), Begin, End ); } } } }; // No native replace method template< bool HasNative > struct replace_native_helper { template< typename InputT, typename ForwardIteratorT > void operator()( InputT& Input, BOOST_STRING_TYPENAME InputT::iterator From, BOOST_STRING_TYPENAME InputT::iterator To, ForwardIteratorT Begin, ForwardIteratorT End ) { replace_const_time_helper< boost::mpl::and_< has_const_time_insert
, has_const_time_erase
>::value >()( Input, From, To, Begin, End ); } }; // Container has native replace method template<> struct replace_native_helper< true > { template< typename InputT, typename ForwardIteratorT > void operator()( InputT& Input, BOOST_STRING_TYPENAME InputT::iterator From, BOOST_STRING_TYPENAME InputT::iterator To, ForwardIteratorT Begin, ForwardIteratorT End ) { Input.replace( From, To, Begin, End ); } }; // replace helper -------------------------------------------------// template< typename InputT, typename ForwardIteratorT > inline void replace( InputT& Input, BOOST_STRING_TYPENAME InputT::iterator From, BOOST_STRING_TYPENAME InputT::iterator To, ForwardIteratorT Begin, ForwardIteratorT End ) { replace_native_helper< has_native_replace
::value >()( Input, From, To, Begin, End ); } template< typename InputT, typename InsertT > inline void replace( InputT& Input, BOOST_STRING_TYPENAME InputT::iterator From, BOOST_STRING_TYPENAME InputT::iterator To, const InsertT& Insert ) { if(From!=To) { replace( Input, From, To, begin(Insert), end(Insert) ); } else { insert( Input, From, begin(Insert), end(Insert) ); } } } // namespace detail } // namespace algorithm } // namespace boost #endif // BOOST_STRING_DETAIL_SEQUENCE_HPP
sequence.hpp
网页地址
文件地址
上一页
13/15
下一页
下载
( 7 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.