123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- #ifndef BOOST_CONTRACT_ACCESS_HPP_
- #define BOOST_CONTRACT_ACCESS_HPP_
- #include <boost/contract/core/config.hpp>
- #if !defined(BOOST_CONTRACT_NO_CONDITIONS) || \
- defined(BOOST_CONTRACT_STATIC_LINK)
- #include <boost/contract/detail/decl.hpp>
- #include <boost/contract/detail/type_traits/mirror.hpp>
- #endif
- #ifndef BOOST_CONTRACT_NO_INVARIANTS
- #include <boost/contract/detail/debug.hpp>
- #include <boost/function_types/property_tags.hpp>
- #include <boost/mpl/vector.hpp>
- #endif
- namespace boost { namespace contract {
-
- #if !defined(BOOST_CONTRACT_NO_CONDITIONS) || \
- defined(BOOST_CONTRACT_STATIC_LINK)
- class virtual_;
- namespace detail {
- BOOST_CONTRACT_DETAIL_DECL_DETAIL_COND_SUBCONTRACTING_Z(1,
- 0, OO, RR, FF, CC, AArgs);
- }
- #endif
- #ifndef BOOST_CONTRACT_NO_INVARIANTS
- namespace detail {
- template<typename RR, class CC>
- class cond_inv;
- }
- #endif
- class access {
- private:
- access();
- ~access();
-
-
- access(access&);
- access& operator=(access&);
-
- #if !defined(BOOST_CONTRACT_NO_CONDITIONS) || \
- defined(BOOST_CONTRACT_STATIC_LINK)
- BOOST_CONTRACT_DETAIL_MIRROR_HAS_TYPE(has_base_types,
- BOOST_CONTRACT_BASES_TYPEDEF)
- template<class C>
- struct base_types_of {
- typedef typename C::BOOST_CONTRACT_BASES_TYPEDEF type;
- };
- #endif
- #ifndef BOOST_CONTRACT_NO_INVARIANTS
- BOOST_CONTRACT_DETAIL_MIRROR_HAS_MEMBER_FUNCTION(
- has_static_invariant_f, BOOST_CONTRACT_STATIC_INVARIANT_FUNC)
-
- BOOST_CONTRACT_DETAIL_MIRROR_HAS_STATIC_MEMBER_FUNCTION(
- has_static_invariant_s, BOOST_CONTRACT_STATIC_INVARIANT_FUNC)
- template<class C>
- struct has_static_invariant : has_static_invariant_s<C, void,
- boost::mpl::vector<> > {};
- template<class C>
- static void static_invariant() {
- C::BOOST_CONTRACT_STATIC_INVARIANT_FUNC();
- }
- template<class C>
- class static_invariant_addr {
- typedef void (*func_ptr)();
- public:
- static func_ptr apply() {
- return &C::BOOST_CONTRACT_STATIC_INVARIANT_FUNC;
- }
- };
- BOOST_CONTRACT_DETAIL_MIRROR_HAS_MEMBER_FUNCTION(
- has_invariant_f, BOOST_CONTRACT_INVARIANT_FUNC)
-
- BOOST_CONTRACT_DETAIL_MIRROR_HAS_STATIC_MEMBER_FUNCTION(
- has_invariant_s, BOOST_CONTRACT_INVARIANT_FUNC)
- template<class C>
- struct has_cv_invariant : has_invariant_f<C, void, boost::mpl::vector<>,
- boost::function_types::cv_qualified> {};
-
- template<class C>
- struct has_const_invariant : has_invariant_f<C, void, boost::mpl::
- vector<>, boost::function_types::const_qualified> {};
- template<class C>
- static void cv_invariant(C const volatile* obj) {
- BOOST_CONTRACT_DETAIL_DEBUG(obj);
- obj->BOOST_CONTRACT_INVARIANT_FUNC();
- }
-
- template<class C>
- static void const_invariant(C const* obj) {
- BOOST_CONTRACT_DETAIL_DEBUG(obj);
- obj->BOOST_CONTRACT_INVARIANT_FUNC();
- }
- #endif
-
-
-
-
-
- #if !defined(BOOST_CONTRACT_NO_CONDITIONS) || \
- defined(BOOST_CONTRACT_STATIC_LINK)
- BOOST_CONTRACT_DETAIL_DECL_DETAIL_COND_SUBCONTRACTING_Z(1,
- 1, OO, RR, FF, CC, AArgs);
-
- BOOST_CONTRACT_DETAIL_DECL_FRIEND_OVERRIDING_PUBLIC_FUNCTIONS_Z(1,
- OO, RR, FF, CC, AArgs, vv, rr, ff, oobj, aargs)
- #endif
- #ifndef BOOST_CONTRACT_NO_INVARIANTS
- template<typename RR, class CC>
- friend class boost::contract::detail::cond_inv;
- #endif
- };
- } }
- #endif
|