x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
operator.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\luabind\luabind\operator.hpp
旋转
特效
属性
历史版本
// Copyright (c) 2004 Daniel Wallin and Arvid Norberg // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // The above copyright notice and this permission notice shall be included // in all copies or substantial portions of the Software. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF // ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A // PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT // SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR // ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE // OR OTHER DEALINGS IN THE SOFTWARE. #ifndef OPERATOR_040729_HPP #define OPERATOR_040729_HPP #include
#include
#include
#include
#include
#include
#if defined(__GNUC__) && __GNUC__ < 3 # define LUABIND_NO_STRINGSTREAM #else # if defined(BOOST_NO_STRINGSTREAM) # define LUABIND_NO_STRINGSTREAM # endif #endif #ifdef LUABIND_NO_STRINGSTREAM #include
#else #include
#endif namespace luabind { namespace detail { template
struct unwrap_parameter_type; template
struct operator_ {}; struct operator_void_return {}; #if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) template
inline T const& operator,(T const& x, operator_void_return) { return x; } #endif }} // namespace luabind namespace luabind { namespace operators { #define BOOST_PP_ITERATION_PARAMS_1 (3, \ (0, LUABIND_MAX_ARITY,
)) #include BOOST_PP_ITERATE() }} // namespace luabind::operators #include
namespace luabind { template
struct self_base { operators::call_operator0
operator()() const { return 0; } #define BOOST_PP_LOCAL_MACRO(n) \ template
\ BOOST_PP_CAT(operators::call_operator, n)< \ Derived \ BOOST_PP_ENUM_TRAILING_PARAMS(n, A) \ >\ operator()( \ BOOST_PP_ENUM_BINARY_PARAMS(n, A, const& BOOST_PP_INTERCEPT) \ ) const \ { \ return 0; \ } #define BOOST_PP_LOCAL_LIMITS (1, LUABIND_MAX_ARITY) #include BOOST_PP_LOCAL_ITERATE() }; struct self_type : self_base
{ }; struct const_self_type : self_base
{ }; namespace detail { template
struct unwrap_parameter_type { typedef typename boost::mpl::eval_if< boost::is_same
, boost::mpl::identity
, boost::mpl::eval_if< boost::is_same
, boost::mpl::identity
, unwrap_other
> >::type type; }; template
struct binary_operator : operator_
> { binary_operator(int) {} template
struct apply { typedef typename unwrap_parameter_type
::type arg0; typedef typename unwrap_parameter_type
::type arg1; static void execute(lua_State* L, arg0 _0, arg1 _1) { Derived::template apply
::execute( L, _0, _1); } }; static char const* name() { return Derived::name(); } }; template
struct unary_operator : operator_
> { unary_operator(int) {} template
struct apply { typedef typename unwrap_parameter_type
::type arg0; static void execute(lua_State* L, arg0 _0) { Derived::template apply
::execute(L, _0); } }; static char const* name() { return Derived::name(); } }; template
inline void operator_result(lua_State* L, operator_void_return, Policies*) { } namespace mpl = boost::mpl; template
inline void operator_result(lua_State* L, T const& x, Policies*) { typedef typename find_conversion_policy< 0 , Policies >::type cv_policy; typename mpl::apply_wrap2
::type cv; cv.apply(L, x); } }} // namespace detail::luabind namespace luabind { #define LUABIND_BINARY_OPERATOR(name_, op) \ namespace operators { \ \ struct name_ \ { \ template
\ struct apply \ { \ static void execute(lua_State* L, T0 _0, T1 _1) \ { \ detail::operator_result(L, _0 op _1, (Policies*)0); \ } \ }; \ \ static char const* name() \ { \ return "__" # name_; \ } \ }; \ \ } \ \ template
\ detail::binary_operator< \ operators::name_ \ , U \ , T \ > \ inline operator op(self_base
, T const&) \ { \ return 0; \ } \ \ template
\ detail::binary_operator< \ operators::name_ \ , T \ , U \ > \ inline operator op(T const&, self_base
) \ { \ return 0; \ } \ \ detail::binary_operator< \ operators::name_ \ , self_type \ , self_type \ > \ inline operator op(self_type, self_type) \ { \ return 0; \ } \ \ detail::binary_operator< \ operators::name_ \ , self_type \ , const_self_type \ > \ inline operator op(self_type, const_self_type) \ { \ return 0; \ } \ \ detail::binary_operator< \ operators::name_ \ , const_self_type \ , self_type \ > \ inline operator op(const_self_type, self_type) \ { \ return 0; \ } \ \ detail::binary_operator< \ operators::name_ \ , const_self_type \ , const_self_type \ > \ inline operator op(const_self_type, const_self_type) \ { \ return 0; \ } LUABIND_BINARY_OPERATOR(add, +) LUABIND_BINARY_OPERATOR(sub, -) LUABIND_BINARY_OPERATOR(mul, *) LUABIND_BINARY_OPERATOR(div, /) LUABIND_BINARY_OPERATOR(pow, ^) LUABIND_BINARY_OPERATOR(lt, <) LUABIND_BINARY_OPERATOR(le, <=) LUABIND_BINARY_OPERATOR(eq, ==) #undef LUABIND_UNARY_OPERATOR #define LUABIND_UNARY_OPERATOR(name_, op, fn) \ namespace operators { \ \ struct name_ \ { \ template
\ struct apply \ { \ static void execute(lua_State* L, T x) \ { \ detail::operator_result(L, op(x), (Policies*)0); \ } \ }; \ \ static char const* name() \ { \ return "__" # name_; \ } \ }; \ \ } \ \ template
\ detail::unary_operator< \ operators::name_ \ , T \ > \ inline fn(self_base
) \ { \ return 0; \ } template
std::string tostring_operator(T const& x) { #ifdef LUABIND_NO_STRINGSTREAM std::strstream s; s << x << std::ends; #else std::stringstream s; s << x; #endif return s.str(); }; LUABIND_UNARY_OPERATOR(tostring, tostring_operator, tostring) LUABIND_UNARY_OPERATOR(unm, -, operator-) #undef LUABIND_BINARY_OPERATOR namespace { LUABIND_ANONYMOUS_FIX self_type self; LUABIND_ANONYMOUS_FIX const_self_type const_self; } // namespace unnamed } // namespace luabind #endif // OPERATOR_040729_HPP
operator.hpp
网页地址
文件地址
上一页
22/31
下一页
下载
( 8 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.