123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716 |
- #ifndef BOOST_CONTRACT_SPECIFY_HPP_
- #define BOOST_CONTRACT_SPECIFY_HPP_
- #include <boost/contract/core/config.hpp>
- #include <boost/contract/detail/decl.hpp>
- #if !defined(BOOST_CONTRACT_NO_CONDITIONS) || \
- defined(BOOST_CONTRACT_STATIC_LINK)
- #include <boost/contract/detail/condition/cond_base.hpp>
- #include <boost/contract/detail/condition/cond_post.hpp>
- #include <boost/contract/detail/auto_ptr.hpp>
- #include <boost/contract/detail/none.hpp>
- #endif
- #if !defined(BOOST_CONTRACT_NO_PRECONDITIONS) || \
- !defined(BOOST_CONTRACT_NO_POSTCONDITIONS) || \
- !defined(BOOST_CONTRACT_NO_EXCEPTS)
- #include <boost/contract/detail/debug.hpp>
- #endif
- #include <boost/config.hpp>
- #if !defined(BOOST_CONTRACT_NO_CONDITIONS) || \
- defined(BOOST_CONTRACT_STATIC_LINK)
- #define BOOST_CONTRACT_SPECIFY_CLASS_IMPL_(class_type, cond_type) \
- private: \
- boost::contract::detail::auto_ptr<cond_type > cond_; \
- explicit class_type(cond_type* cond) : cond_(cond) {} \
- class_type(class_type const& other) : cond_(other.cond_) {} \
- class_type& operator=(class_type const& other) { \
- cond_ = other.cond_; \
- return *this; \
- }
-
- #define BOOST_CONTRACT_SPECIFY_COND_RELEASE_ cond_.release()
- #else
- #define BOOST_CONTRACT_SPECIFY_CLASS_IMPL_(class_type, cond_type) \
- private: \
- class_type() {} \
- class_type(class_type const&) {} \
- class_type& operator=(class_type const&) { return *this; }
- #define BOOST_CONTRACT_SPECIFY_COND_RELEASE_
- #endif
- #ifndef BOOST_CONTRACT_NO_PRECONDITIONS
- #define BOOST_CONTRACT_SPECIFY_PRECONDITION_IMPL_ \
- BOOST_CONTRACT_DETAIL_DEBUG(cond_); \
- cond_->set_pre(f); \
- return specify_old_postcondition_except<VirtualResult>( \
- BOOST_CONTRACT_SPECIFY_COND_RELEASE_);
- #else
- #define BOOST_CONTRACT_SPECIFY_PRECONDITION_IMPL_ \
- return specify_old_postcondition_except<VirtualResult>( \
- BOOST_CONTRACT_SPECIFY_COND_RELEASE_);
- #endif
-
- #ifndef BOOST_CONTRACT_NO_OLDS
- #define BOOST_CONTRACT_SPECIFY_OLD_IMPL_ \
- BOOST_CONTRACT_DETAIL_DEBUG(cond_); \
- cond_->set_old(f); \
- return specify_postcondition_except<VirtualResult>( \
- BOOST_CONTRACT_SPECIFY_COND_RELEASE_);
- #else
- #define BOOST_CONTRACT_SPECIFY_OLD_IMPL_ \
- return specify_postcondition_except<VirtualResult>( \
- BOOST_CONTRACT_SPECIFY_COND_RELEASE_);
- #endif
-
- #ifndef BOOST_CONTRACT_NO_POSTCONDITIONS
- #define BOOST_CONTRACT_SPECIFY_POSTCONDITION_IMPL_ \
- BOOST_CONTRACT_DETAIL_DEBUG(cond_); \
- cond_->set_post(f); \
- return specify_except(BOOST_CONTRACT_SPECIFY_COND_RELEASE_);
- #else
- #define BOOST_CONTRACT_SPECIFY_POSTCONDITION_IMPL_ \
- return specify_except(BOOST_CONTRACT_SPECIFY_COND_RELEASE_);
- #endif
-
- #ifndef BOOST_CONTRACT_NO_EXCEPTS
- #define BOOST_CONTRACT_SPECIFY_EXCEPT_IMPL_ \
- BOOST_CONTRACT_DETAIL_DEBUG(cond_); \
- cond_->set_except(f); \
- return specify_nothing(BOOST_CONTRACT_SPECIFY_COND_RELEASE_);
- #else
- #define BOOST_CONTRACT_SPECIFY_EXCEPT_IMPL_ \
- return specify_nothing(BOOST_CONTRACT_SPECIFY_COND_RELEASE_);
- #endif
- namespace boost {
- namespace contract {
- class virtual_;
-
- template<typename VR>
- class specify_precondition_old_postcondition_except;
-
- template<typename VR>
- class specify_old_postcondition_except;
-
- template<typename VR>
- class specify_postcondition_except;
-
- class specify_except;
- }
- }
- namespace boost { namespace contract {
- class specify_nothing {
- public:
-
- ~specify_nothing() BOOST_NOEXCEPT_IF(false) {}
-
-
- private:
- BOOST_CONTRACT_SPECIFY_CLASS_IMPL_(specify_nothing,
- boost::contract::detail::cond_base)
-
- friend class check;
- template<typename VR>
- friend class specify_precondition_old_postcondition_except;
-
- template<typename VR>
- friend class specify_old_postcondition_except;
- template<typename VR>
- friend class specify_postcondition_except;
- friend class specify_except;
- };
- class specify_except {
- public:
-
- ~specify_except() BOOST_NOEXCEPT_IF(false) {}
-
- template<typename F>
- specify_nothing except(
- F const&
- #if !defined(BOOST_CONTRACT_NO_EXCEPTS) || \
- defined(BOOST_CONTRACT_DETAIL_DOXYGEN)
- f
- #endif
- ) { BOOST_CONTRACT_SPECIFY_EXCEPT_IMPL_ }
- private:
- BOOST_CONTRACT_SPECIFY_CLASS_IMPL_(specify_except,
- boost::contract::detail::cond_base)
-
- friend class check;
- template<typename VR>
- friend class specify_precondition_old_postcondition_except;
-
- template<typename VR>
- friend class specify_old_postcondition_except;
-
- template<typename VR>
- friend class specify_postcondition_except;
- };
- template<typename VirtualResult = void>
- class specify_postcondition_except {
- public:
-
- ~specify_postcondition_except() BOOST_NOEXCEPT_IF(false) {}
-
- template<typename F>
- specify_except postcondition(
- F const&
- #if !defined(BOOST_CONTRACT_NO_POSTCONDITIONS) || \
- defined(BOOST_CONTRACT_DETAIL_DOXYGEN)
- f
- #endif
- ) {
- BOOST_CONTRACT_SPECIFY_POSTCONDITION_IMPL_
- }
-
-
- template<typename F>
- specify_nothing except(
- F const&
- #if !defined(BOOST_CONTRACT_NO_EXCEPTS) || \
- defined(BOOST_CONTRACT_DETAIL_DOXYGEN)
- f
- #endif
- ) { BOOST_CONTRACT_SPECIFY_EXCEPT_IMPL_ }
- private:
- BOOST_CONTRACT_SPECIFY_CLASS_IMPL_(
- specify_postcondition_except,
- boost::contract::detail::cond_post<typename
- boost::contract::detail::none_if_void<VirtualResult>::type>
- )
-
- friend class check;
- friend class specify_precondition_old_postcondition_except<VirtualResult>;
- friend class specify_old_postcondition_except<VirtualResult>;
- };
- template<typename VirtualResult = void>
- class specify_old_postcondition_except {
- public:
-
- ~specify_old_postcondition_except() BOOST_NOEXCEPT_IF(false) {}
-
-
- template<typename F>
- specify_postcondition_except<VirtualResult> old(
- F const&
- #if !defined(BOOST_CONTRACT_NO_OLDS) || \
- defined(BOOST_CONTRACT_DETAIL_DOXYGEN)
- f
- #endif
- ) {
- BOOST_CONTRACT_SPECIFY_OLD_IMPL_
- }
-
- template<typename F>
- specify_except postcondition(
- F const&
- #if !defined(BOOST_CONTRACT_NO_POSTCONDITIONS) || \
- defined(BOOST_CONTRACT_DETAIL_DOXYGEN)
- f
- #endif
- ) {
- BOOST_CONTRACT_SPECIFY_POSTCONDITION_IMPL_
- }
-
-
- template<typename F>
- specify_nothing except(
- F const&
- #if !defined(BOOST_CONTRACT_NO_EXCEPTS) || \
- defined(BOOST_CONTRACT_DETAIL_DOXYGEN)
- f
- #endif
- ) { BOOST_CONTRACT_SPECIFY_EXCEPT_IMPL_ }
- private:
- BOOST_CONTRACT_SPECIFY_CLASS_IMPL_(
- specify_old_postcondition_except,
- boost::contract::detail::cond_post<typename
- boost::contract::detail::none_if_void<VirtualResult>::type>
- )
-
- friend class check;
- friend class specify_precondition_old_postcondition_except<VirtualResult>;
- template<class C>
- friend specify_old_postcondition_except<> constructor(C*);
- template<class C>
- friend specify_old_postcondition_except<> destructor(C*);
- };
- template<
- typename VirtualResult
- #ifdef BOOST_CONTRACT_DETAIL_DOXYGEN
- = void
- #endif
- >
- class specify_precondition_old_postcondition_except {
- public:
-
- ~specify_precondition_old_postcondition_except() BOOST_NOEXCEPT_IF(false) {}
-
-
- template<typename F>
- specify_old_postcondition_except<VirtualResult> precondition(
- F const&
- #if !defined(BOOST_CONTRACT_NO_PRECONDITIONS) || \
- defined(BOOST_CONTRACT_DETAIL_DOXYGEN)
- f
- #endif
- ) {
- BOOST_CONTRACT_SPECIFY_PRECONDITION_IMPL_
- }
-
- template<typename F>
- specify_postcondition_except<VirtualResult> old(
- F const&
- #if !defined(BOOST_CONTRACT_NO_OLDS) || \
- defined(BOOST_CONTRACT_DETAIL_DOXYGEN)
- f
- #endif
- ) {
- BOOST_CONTRACT_SPECIFY_OLD_IMPL_
- }
-
- template<typename F>
- specify_except postcondition(
- F const&
- #if !defined(BOOST_CONTRACT_NO_POSTCONDITIONS) || \
- defined(BOOST_CONTRACT_DETAIL_DOXYGEN)
- f
- #endif
- ) {
- BOOST_CONTRACT_SPECIFY_POSTCONDITION_IMPL_
- }
-
-
- template<typename F>
- specify_nothing except(
- F const&
- #if !defined(BOOST_CONTRACT_NO_EXCEPTS) || \
- defined(BOOST_CONTRACT_DETAIL_DOXYGEN)
- f
- #endif
- ) { BOOST_CONTRACT_SPECIFY_EXCEPT_IMPL_ }
- private:
- BOOST_CONTRACT_SPECIFY_CLASS_IMPL_(
- specify_precondition_old_postcondition_except,
- boost::contract::detail::cond_post<typename
- boost::contract::detail::none_if_void<VirtualResult>::type>
- )
-
- friend class check;
- friend specify_precondition_old_postcondition_except<> function();
- template<class C>
- friend specify_precondition_old_postcondition_except<> public_function();
- template<class C>
- friend specify_precondition_old_postcondition_except<> public_function(C*);
-
- template<class C>
- friend specify_precondition_old_postcondition_except<> public_function(
- virtual_*, C*);
- template<typename VR, class C>
- friend specify_precondition_old_postcondition_except<VR> public_function(
- virtual_*, VR&, C*);
- BOOST_CONTRACT_DETAIL_DECL_FRIEND_OVERRIDING_PUBLIC_FUNCTIONS_Z(1,
- O, VR, F, C, Args, v, r, f, obj, args)
- };
- } }
- #endif
|