x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
manip.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\fusion\sequence\io\detail\manip.hpp
旋转
特效
属性
历史版本
/*============================================================================= Copyright (c) 1999-2003 Jeremiah Willcock Copyright (c) 1999-2003 Jaakko J�rvi Copyright (c) 2001-2006 Joel de Guzman 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) ==============================================================================*/ #if !defined(FUSION_MANIP_05052005_1200) #define FUSION_MANIP_05052005_1200 #include
#include
#include
#include
// Tuple I/O manipulators #define FUSION_GET_CHAR_TYPE(T) typename T::char_type #define FUSION_GET_TRAITS_TYPE(T) typename T::traits_type #if defined (BOOST_NO_TEMPLATED_STREAMS) #define FUSION_STRING_OF_STREAM(Stream) std::string #else #define FUSION_STRING_OF_STREAM(Stream) \ std::basic_string< \ FUSION_GET_CHAR_TYPE(Stream) \ , FUSION_GET_TRAITS_TYPE(Stream) \ > #endif //$$$ these should be part of the public API$$$ //$$$ rename tuple_open, tuple_close and tuple_delimiter to // open, close and delimeter and add these synonyms to the // TR1 tuple module. namespace boost { namespace fusion { namespace detail { template
int get_xalloc_index(Tag* = 0) { // each Tag will have a unique index static int index = std::ios::xalloc(); return index; } template
struct stream_data { struct arena { ~arena() { for ( typename std::vector
::iterator i = data.begin() ; i != data.end() ; ++i) { delete *i; } } std::vector
data; }; static void attach(Stream& stream, T const& data) { static arena ar; // our arena ar.data.push_back(new T(data)); stream.pword(get_xalloc_index
()) = ar.data.back(); } static T const* get(Stream& stream) { return (T const*)stream.pword(get_xalloc_index
()); } }; template
class string_ios_manip { public: typedef FUSION_STRING_OF_STREAM(Stream) string_type; typedef stream_data
stream_data_t; string_ios_manip(Stream& str_) : stream(str_) {} void set(string_type const& s) { stream_data_t::attach(stream, s); } void print(char const* default_) const { // print a delimiter string_type const* p = stream_data_t::get(stream); if (p) stream << *p; else stream << default_; } void read(char const* default_) const { // read a delimiter string_type const* p = stream_data_t::get(stream); using namespace std; ws(stream); if (p) { typedef typename string_type::const_iterator iterator; for (iterator i = p->begin(); i != p->end(); ++i) check_delim(*i); } else { while (*default_) check_delim(*default_++); } } private: template
void check_delim(Char c) const { if (!isspace(c)) { if (stream.get() != c) { stream.unget(); stream.setstate(std::ios::failbit); } } } Stream& stream; }; } // detail #if defined (BOOST_NO_TEMPLATED_STREAMS) #define STD_TUPLE_DEFINE_MANIPULATOR(name) \ namespace detail \ { \ struct name##_tag; \ \ struct name##_type \ { \ typedef std::string string_type; \ string_type data; \ name##_type(const string_type& d): data(d) {} \ }; \ \ template
\ Stream& operator>>(Stream& s, const name##_type& m) \ { \ string_ios_manip
(s).set(m.data); \ return s; \ } \ \ template
\ Stream& operator<<(Stream& s, const name##_type& m) \ { \ string_ios_manip
(s).set(m.data); \ return s; \ } \ } #define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \ inline detail::name##_type \ name(const std::string& s) \ { \ return detail::name##_type(s); \ } \ \ inline detail::name##_type \ name(const char* s) \ { \ return detail::name##_type(std::string(s)); \ } \ \ inline detail::name##_type \ name(char c) \ { \ return detail::name##_type(std::string(1, c)); \ } #else // defined(BOOST_NO_TEMPLATED_STREAMS) #if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) #define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \ template
\ inline detail::name##_type
\ name(const std::basic_string
& s) \ { \ return detail::name##_type
(s); \ } \ \ inline detail::name##_type
\ name(char const* s) \ { \ return detail::name##_type
(std::basic_string
(s)); \ } \ \ inline detail::name##_type
\ name(wchar_t const* s) \ { \ return detail::name##_type
(std::basic_string
(s)); \ } \ \ inline detail::name##_type
\ name(char c) \ { \ return detail::name##_type
(std::basic_string
(1, c)); \ } \ \ inline detail::name##_type
\ name(wchar_t c) \ { \ return detail::name##_type
(std::basic_string
(1, c)); \ } #else // defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) #define STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(name) \ template
\ inline detail::name##_type
\ name(const std::basic_string
& s) \ { \ return detail::name##_type
(s); \ } \ \ template
\ inline detail::name##_type
\ name(Char s[]) \ { \ return detail::name##_type
(std::basic_string
(s)); \ } \ \ template
\ inline detail::name##_type
\ name(Char const s[]) \ { \ return detail::name##_type
(std::basic_string
(s)); \ } \ \ template
\ inline detail::name##_type
\ name(Char c) \ { \ return detail::name##_type
(std::basic_string
(1, c)); \ } #endif #define STD_TUPLE_DEFINE_MANIPULATOR(name) \ namespace detail \ { \ struct name##_tag; \ \ template
> \ struct name##_type \ { \ typedef std::basic_string
string_type; \ string_type data; \ name##_type(const string_type& d): data(d) {} \ }; \ \ template
\ Stream& operator>>(Stream& s, const name##_type
& m) \ { \ string_ios_manip
(s).set(m.data); \ return s; \ } \ \ template
\ Stream& operator<<(Stream& s, const name##_type
& m) \ { \ string_ios_manip
(s).set(m.data); \ return s; \ } \ } \ #endif // defined(BOOST_NO_TEMPLATED_STREAMS) STD_TUPLE_DEFINE_MANIPULATOR(tuple_open) STD_TUPLE_DEFINE_MANIPULATOR(tuple_close) STD_TUPLE_DEFINE_MANIPULATOR(tuple_delimiter) STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(tuple_open) STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(tuple_close) STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS(tuple_delimiter) #undef STD_TUPLE_DEFINE_MANIPULATOR #undef STD_TUPLE_DEFINE_MANIPULATOR_FUNCTIONS #undef FUSION_STRING_OF_STREAM #undef FUSION_GET_CHAR_TYPE #undef FUSION_GET_TRAITS_TYPE }} #endif
manip.hpp
网页地址
文件地址
上一页
2/3
下一页
下载
( 15 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.