summaryrefslogtreecommitdiff
path: root/boost/bimap/relation/detail/static_access_builder.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/bimap/relation/detail/static_access_builder.hpp')
-rw-r--r--boost/bimap/relation/detail/static_access_builder.hpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/boost/bimap/relation/detail/static_access_builder.hpp b/boost/bimap/relation/detail/static_access_builder.hpp
new file mode 100644
index 0000000000..72f9925b0c
--- /dev/null
+++ b/boost/bimap/relation/detail/static_access_builder.hpp
@@ -0,0 +1,105 @@
+// Boost.Bimap
+//
+// Copyright (c) 2006-2007 Matias Capeletto
+//
+// 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)
+
+
+/// \file relation/detail/static_access_builder.hpp
+/// \brief Define macros to help building metafunctions
+
+#ifndef BOOST_BIMAP_RELATION_DETAIL_STATIC_ACCESS_BUILDER_HPP
+#define BOOST_BIMAP_RELATION_DETAIL_STATIC_ACCESS_BUILDER_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER>=1200)
+#pragma once
+#endif
+
+#include <boost/config.hpp>
+
+#include <boost/bimap/relation/support/is_tag_of_member_at.hpp>
+#include <boost/bimap/detail/debug/static_error.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+
+
+/******************************************************************************
+ BIMAP SYMMETRIC STATIC ACCESS INTERFACE
+*******************************************************************************
+
+template< class Tag, class SYMETRIC_TYPE >
+struct NAME
+{
+ -UNDEFINED BODY-;
+};
+
+******************************************************************************/
+
+
+/*===========================================================================*/
+#define BOOST_BIMAP_SYMMETRIC_STATIC_ACCESS_BUILDER( \
+ \
+ NAME, \
+ SYMMETRIC_TYPE, \
+ LEFT_BODY, \
+ RIGHT_BODY \
+ ) \
+ \
+ template \
+ < \
+ class Tag, \
+ class SYMMETRIC_TYPE, \
+ class Enable = void \
+ > \
+ struct NAME \
+ { \
+ BOOST_BIMAP_STATIC_ERROR( \
+ BOOST_PP_CAT(NAME,_FAILURE), \
+ (SYMMETRIC_TYPE,Tag) \
+ ); \
+ }; \
+ \
+ template< class Tag, class SYMMETRIC_TYPE > \
+ struct NAME \
+ < \
+ Tag, SYMMETRIC_TYPE, \
+ BOOST_DEDUCED_TYPENAME enable_if \
+ < \
+ ::boost::bimaps::relation::support::is_tag_of_member_at_left \
+ < \
+ Tag, \
+ SYMMETRIC_TYPE \
+ > \
+ \
+ >::type \
+ > \
+ { \
+ LEFT_BODY; \
+ }; \
+ \
+ template< class Tag, class SYMMETRIC_TYPE > \
+ struct NAME \
+ < \
+ Tag, SYMMETRIC_TYPE, \
+ BOOST_DEDUCED_TYPENAME enable_if \
+ < \
+ ::boost::bimaps::relation::support::is_tag_of_member_at_right \
+ < \
+ Tag, \
+ SYMMETRIC_TYPE \
+ > \
+ \
+ >::type \
+ > \
+ { \
+ RIGHT_BODY; \
+ };
+/*===========================================================================*/
+
+
+#endif // BOOST_BIMAP_RELATION_DETAIL_STATIC_ACCES_BUILDER_HPP
+
+