... | ... |
@@ -12,50 +12,50 @@ |
12 | 12 |
* |
13 | 13 |
* This software is provided "AS IS" with no warranty of any kind, |
14 | 14 |
* express or implied, and with no claim as to its suitability for any |
15 | 15 |
* purpose. |
16 | 16 |
* |
17 | 17 |
*/ |
18 | 18 |
|
19 | 19 |
// This file contains a modified version of the concept checking |
20 | 20 |
// utility from BOOST. |
21 | 21 |
// See the appropriate copyright notice below. |
22 | 22 |
|
23 | 23 |
// (C) Copyright Jeremy Siek 2000. |
24 | 24 |
// Distributed under the Boost Software License, Version 1.0. (See |
25 | 25 |
// accompanying file LICENSE_1_0.txt or copy at |
26 | 26 |
// http://www.boost.org/LICENSE_1_0.txt) |
27 | 27 |
// |
28 | 28 |
// Revision History: |
29 | 29 |
// 05 May 2001: Workarounds for HP aCC from Thomas Matelich. (Jeremy Siek) |
30 | 30 |
// 02 April 2001: Removed limits header altogether. (Jeremy Siek) |
31 | 31 |
// 01 April 2001: Modified to use new <boost/limits.hpp> header. (JMaddock) |
32 | 32 |
// |
33 | 33 |
|
34 | 34 |
// See http://www.boost.org/libs/concept_check for documentation. |
35 | 35 |
|
36 |
#ifndef LEMON_BOOST_CONCEPT_CHECKS_HPP |
|
37 |
#define LEMON_BOOST_CONCEPT_CHECKS_HPP |
|
36 |
#ifndef LEMON_CONCEPT_CHECKS_H |
|
37 |
#define LEMON_CONCEPT_CHECKS_H |
|
38 | 38 |
|
39 | 39 |
namespace lemon { |
40 | 40 |
|
41 | 41 |
/* |
42 | 42 |
"inline" is used for ignore_unused_variable_warning() |
43 | 43 |
and function_requires() to make sure there is no |
44 | 44 |
overtarget with g++. |
45 | 45 |
*/ |
46 | 46 |
|
47 | 47 |
template <class T> inline void ignore_unused_variable_warning(const T&) { } |
48 | 48 |
|
49 | 49 |
template <class Concept> |
50 | 50 |
inline void function_requires() |
51 | 51 |
{ |
52 | 52 |
#if !defined(NDEBUG) |
53 | 53 |
void (Concept::*x)() = & Concept::constraints; |
54 | 54 |
ignore_unused_variable_warning(x); |
55 | 55 |
#endif |
56 | 56 |
} |
57 | 57 |
|
58 | 58 |
template <typename Concept, typename Type> |
59 | 59 |
inline void checkConcept() { |
60 | 60 |
#if !defined(NDEBUG) |
61 | 61 |
typedef typename Concept::template Constraints<Type> ConceptCheck; |
... | ... |
@@ -81,25 +81,25 @@ |
81 | 81 |
BOOST_FPTR ns::concept<type_var1,type_var2>::constraints> \ |
82 | 82 |
concept_checking_typedef_##type_var1##type_var2##concept |
83 | 83 |
|
84 | 84 |
#define BOOST_CLASS_REQUIRE3(tv1, tv2, tv3, ns, concept) \ |
85 | 85 |
typedef void (ns::concept <tv1,tv2,tv3>::* \ |
86 | 86 |
func##tv1##tv2##tv3##concept)(); \ |
87 | 87 |
template <func##tv1##tv2##tv3##concept Tp1_> \ |
88 | 88 |
struct concept_checking_##tv1##tv2##tv3##concept { }; \ |
89 | 89 |
typedef concept_checking_##tv1##tv2##tv3##concept< \ |
90 | 90 |
BOOST_FPTR ns::concept<tv1,tv2,tv3>::constraints> \ |
91 | 91 |
concept_checking_typedef_##tv1##tv2##tv3##concept |
92 | 92 |
|
93 | 93 |
#define BOOST_CLASS_REQUIRE4(tv1, tv2, tv3, tv4, ns, concept) \ |
94 | 94 |
typedef void (ns::concept <tv1,tv2,tv3,tv4>::* \ |
95 | 95 |
func##tv1##tv2##tv3##tv4##concept)(); \ |
96 | 96 |
template <func##tv1##tv2##tv3##tv4##concept Tp1_> \ |
97 | 97 |
struct concept_checking_##tv1##tv2##tv3##tv4##concept { }; \ |
98 | 98 |
typedef concept_checking_##tv1##tv2##tv3##tv4##concept< \ |
99 | 99 |
BOOST_FPTR ns::concept<tv1,tv2,tv3,tv4>::constraints> \ |
100 | 100 |
concept_checking_typedef_##tv1##tv2##tv3##tv4##concept |
101 | 101 |
|
102 | 102 |
|
103 | 103 |
} // namespace lemon |
104 | 104 |
|
105 |
#endif // |
|
105 |
#endif // LEMON_CONCEPT_CHECKS_H |
0 comments (0 inline)