1// (C) Copyright Jeremy Siek 2001.
2// Distributed under the Boost Software License, Version 1.0. (See
3// accompanying file LICENSE_1_0.txt or copy at
4// http://www.boost.org/LICENSE_1_0.txt)
5
6#include <boost/property_map/property_map.hpp>
7#include <boost/property_map/shared_array_property_map.hpp>
8#include <map>
9
10// This file checks the property map concepts against the property map
11// archetypes to make sure they are consistent and that they compile.
12// This also checks all the property map classes defined in
13// property_map.hpp against the concept checking classes.
14
15int
16main()
17{
18 using namespace boost;
19 {
20 typedef null_archetype<> Key;
21 typedef assignable_archetype<copy_constructible_archetype<> > Value;
22 typedef readable_property_map_archetype<Key, Value> PMap;
23 BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept<PMap, Key>));
24 }
25 {
26 typedef null_archetype<> Key;
27 typedef assignable_archetype<copy_constructible_archetype<> > Value;
28 typedef writable_property_map_archetype<Key, Value> PMap;
29 BOOST_CONCEPT_ASSERT((WritablePropertyMapConcept<PMap, Key>));
30 }
31 {
32 typedef null_archetype<> Key;
33 typedef assignable_archetype<copy_constructible_archetype<> > Value;
34 typedef read_write_property_map_archetype<Key, Value> PMap;
35 BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept<PMap, Key>));
36 }
37 {
38 typedef null_archetype<> Key;
39 typedef assignable_archetype<copy_constructible_archetype<> > Value;
40 typedef lvalue_property_map_archetype<Key, Value> PMap;
41 BOOST_CONCEPT_ASSERT((LvaluePropertyMapConcept<PMap, Key>));
42 }
43 {
44 typedef null_archetype<> Key;
45 typedef assignable_archetype<copy_constructible_archetype<> > Value;
46 typedef mutable_lvalue_property_map_archetype<Key, Value> PMap;
47 BOOST_CONCEPT_ASSERT((Mutable_LvaluePropertyMapConcept<PMap, Key>));
48 }
49 {
50 typedef std::ptrdiff_t Key;
51 typedef int* PMap;
52 BOOST_CONCEPT_ASSERT((Mutable_LvaluePropertyMapConcept<PMap, Key>));
53 }
54 {
55 typedef std::ptrdiff_t Key;
56 typedef const int* PMap;
57 BOOST_CONCEPT_ASSERT((LvaluePropertyMapConcept<PMap, Key>));
58 }
59 {
60 typedef sgi_assignable_archetype<> Key; // ?
61 typedef sgi_assignable_archetype<> Value;
62 typedef random_access_iterator_archetype<Value> Iterator;
63 typedef readable_property_map_archetype<Key, std::ptrdiff_t> IndexMap;
64 typedef iterator_property_map<Iterator, IndexMap
65#ifdef BOOST_NO_STD_ITERATOR_TRAITS
66 , Value, const Value&
67#endif
68 > PMap;
69 BOOST_CONCEPT_ASSERT((LvaluePropertyMapConcept<PMap, Key>));
70 }
71 {
72 typedef sgi_assignable_archetype<> Key;
73 typedef sgi_assignable_archetype<> Value;
74 typedef mutable_random_access_iterator_archetype<Value> Iterator;
75 typedef readable_property_map_archetype<Key, std::ptrdiff_t> IndexMap;
76 typedef iterator_property_map<Iterator, IndexMap
77#ifdef BOOST_NO_STD_ITERATOR_TRAITS
78 , Value, Value&
79#endif
80 > PMap;
81 BOOST_CONCEPT_ASSERT((Mutable_LvaluePropertyMapConcept<PMap, Key>));
82 }
83 {
84 typedef sgi_assignable_archetype< less_than_comparable_archetype<> > Key;
85 typedef default_constructible_archetype< sgi_assignable_archetype<> >
86 Value;
87 typedef std::map<Key, Value> Container;
88 typedef associative_property_map<Container> PMap;
89 BOOST_CONCEPT_ASSERT((Mutable_LvaluePropertyMapConcept<PMap, Key>));
90 }
91 {
92 typedef sgi_assignable_archetype< less_than_comparable_archetype<> > Key;
93 typedef default_constructible_archetype< sgi_assignable_archetype<> >
94 Value;
95 typedef std::map<Key, Value> Container;
96 typedef const_associative_property_map<Container> PMap;
97 BOOST_CONCEPT_ASSERT((LvaluePropertyMapConcept<PMap, Key>));
98 }
99 {
100 typedef identity_property_map PMap;
101 BOOST_CONCEPT_ASSERT((ReadablePropertyMapConcept<PMap, int>));
102 }
103 {
104 typedef dummy_property_map PMap;
105 BOOST_CONCEPT_ASSERT((ReadWritePropertyMapConcept<PMap, int>));
106 }
107 {
108 typedef sgi_assignable_archetype<> Key; // ?
109 typedef sgi_assignable_archetype<> Value;
110 typedef readable_property_map_archetype<Key, std::ptrdiff_t> IndexMap;
111 typedef shared_array_property_map<Value, IndexMap> PMap;
112 BOOST_CONCEPT_ASSERT((Mutable_LvaluePropertyMapConcept<PMap, Key>));
113 }
114 return 0;
115}
116

source code of boost/libs/property_map/test/property_map_cc.cpp