| /* Copyright 2006-2008 Joaquin M Lopez Munoz. |
| * 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/libs/flyweight for library home page. |
| */ |
| |
| #ifndef BOOST_FLYWEIGHT_FLYWEIGHT_FWD_HPP |
| #define BOOST_FLYWEIGHT_FLYWEIGHT_FWD_HPP |
| |
| #if defined(_MSC_VER)&&(_MSC_VER>=1200) |
| #pragma once |
| #endif |
| |
| #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */ |
| #include <boost/detail/templated_streams.hpp> |
| #include <boost/parameter/parameters.hpp> |
| #include <boost/preprocessor/punctuation/comma.hpp> |
| #include <iosfwd> |
| |
| namespace boost{ |
| |
| namespace flyweights{ |
| |
| template< |
| typename T, |
| typename Arg1=parameter::void_, |
| typename Arg2=parameter::void_, |
| typename Arg3=parameter::void_, |
| typename Arg4=parameter::void_, |
| typename Arg5=parameter::void_ |
| > |
| class flyweight; |
| |
| #define BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(n) \ |
| typename Arg##n##1,typename Arg##n##2,typename Arg##n##3, \ |
| typename Arg##n##4,typename Arg##n##5 |
| #define BOOST_FLYWEIGHT_TEMPL_ARGS(n) \ |
| Arg##n##1,Arg##n##2,Arg##n##3,Arg##n##4,Arg##n##5 |
| |
| template< |
| typename T1,BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(1), |
| typename T2,BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(2) |
| > |
| bool operator==( |
| const flyweight<T1,BOOST_FLYWEIGHT_TEMPL_ARGS(1)>& x, |
| const flyweight<T2,BOOST_FLYWEIGHT_TEMPL_ARGS(2)>& y); |
| |
| template< |
| typename T1,BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(1), |
| typename T2,BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(2) |
| > |
| bool operator<( |
| const flyweight<T1,BOOST_FLYWEIGHT_TEMPL_ARGS(1)>& x, |
| const flyweight<T2,BOOST_FLYWEIGHT_TEMPL_ARGS(2)>& y); |
| |
| #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) |
| template< |
| typename T1,BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(1), |
| typename T2 |
| > |
| bool operator==( |
| const flyweight<T1,BOOST_FLYWEIGHT_TEMPL_ARGS(1)>& x,const T2& y); |
| |
| template< |
| typename T1, |
| typename T2,BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(2) |
| > |
| bool operator==( |
| const T1& x,const flyweight<T2,BOOST_FLYWEIGHT_TEMPL_ARGS(2)>& y); |
| |
| template< |
| typename T1,BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(1), |
| typename T2 |
| > |
| bool operator<( |
| const flyweight<T1,BOOST_FLYWEIGHT_TEMPL_ARGS(1)>& x,const T2& y); |
| |
| template< |
| typename T1, |
| typename T2,BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(2) |
| > |
| bool operator<( |
| const T1& x,const flyweight<T2,BOOST_FLYWEIGHT_TEMPL_ARGS(2)>& y); |
| #endif /* !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) */ |
| |
| #define BOOST_FLYWEIGHT_COMPLETE_COMP_OPS_DECL(t,a1,a2) \ |
| template<t> \ |
| inline bool operator!=(const a1& x,const a2& y); \ |
| \ |
| template<t> \ |
| inline bool operator>(const a1& x,const a2& y); \ |
| \ |
| template<t> \ |
| inline bool operator>=(const a1& x,const a2& y); \ |
| \ |
| template<t> \ |
| inline bool operator<=(const a1& x,const a2& y); \ |
| |
| BOOST_FLYWEIGHT_COMPLETE_COMP_OPS_DECL( |
| typename T1 BOOST_PP_COMMA() |
| BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(1) BOOST_PP_COMMA() |
| typename T2 BOOST_PP_COMMA() |
| BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(2), |
| flyweight< |
| T1 BOOST_PP_COMMA() BOOST_FLYWEIGHT_TEMPL_ARGS(1) |
| >, |
| flyweight< |
| T2 BOOST_PP_COMMA() BOOST_FLYWEIGHT_TEMPL_ARGS(2) |
| >) |
| |
| #if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) |
| BOOST_FLYWEIGHT_COMPLETE_COMP_OPS_DECL( |
| typename T1 BOOST_PP_COMMA() |
| BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(1) BOOST_PP_COMMA() |
| typename T2, |
| flyweight< |
| T1 BOOST_PP_COMMA() BOOST_FLYWEIGHT_TEMPL_ARGS(1) |
| >, |
| T2) |
| |
| BOOST_FLYWEIGHT_COMPLETE_COMP_OPS_DECL( |
| typename T1 BOOST_PP_COMMA() |
| typename T2 BOOST_PP_COMMA() |
| BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(2), |
| T1, |
| flyweight< |
| T2 BOOST_PP_COMMA() BOOST_FLYWEIGHT_TEMPL_ARGS(2) |
| >) |
| #endif /* !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) */ |
| |
| template<typename T,BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(_)> |
| inline void swap( |
| flyweight<T,BOOST_FLYWEIGHT_TEMPL_ARGS(_)>& x, |
| flyweight<T,BOOST_FLYWEIGHT_TEMPL_ARGS(_)>& y); |
| |
| template< |
| BOOST_TEMPLATED_STREAM_ARGS(ElemType,Traits) |
| BOOST_TEMPLATED_STREAM_COMMA |
| typename T,BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(_) |
| > |
| inline BOOST_TEMPLATED_STREAM(ostream,ElemType,Traits)& operator<<( |
| BOOST_TEMPLATED_STREAM(ostream,ElemType,Traits)& out, |
| const flyweight<T,BOOST_FLYWEIGHT_TEMPL_ARGS(_)>& x); |
| |
| template< |
| BOOST_TEMPLATED_STREAM_ARGS(ElemType,Traits) |
| BOOST_TEMPLATED_STREAM_COMMA |
| typename T,BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS(_) |
| > |
| inline BOOST_TEMPLATED_STREAM(istream,ElemType,Traits)& operator>>( |
| BOOST_TEMPLATED_STREAM(istream,ElemType,Traits)& in, |
| flyweight<T,BOOST_FLYWEIGHT_TEMPL_ARGS(_)>& x); |
| |
| } /* namespace flyweights */ |
| |
| using flyweights::flyweight; |
| |
| } /* namespace boost */ |
| |
| #undef BOOST_FLYWEIGHT_COMPLETE_COMP_OPS_DECL |
| #undef BOOST_FLYWEIGHT_TEMPL_ARGS |
| #undef BOOST_FLYWEIGHT_TYPENAME_TEMPL_ARGS |
| |
| #endif |