IMP logo
IMP Reference Guide  2.14.0
The Integrative Modeling Platform
set_map_macros.h
Go to the documentation of this file.
1 /**
2  * \file IMP/set_map_macros.h
3  * \brief Macros to choose the best set or map for different purposes.
4  *
5  * Copyright 2007-2020 IMP Inventors. All rights reserved.
6  *
7  */
8 
9 #ifndef IMPKERNEL_SET_MAP_MACROS_H
10 #define IMPKERNEL_SET_MAP_MACROS_H
11 
12 #ifdef IMP_DOXYGEN
13 //! Macro to support platform independent declaration of a small ordered set
14 /** Declare a small, ordered set like IMP_KERNEL_SMALL_ORDERED_SET<item>. */
15 #define IMP_KERNEL_SMALL_ORDERED_SET boost::container::flat_set
16 //! Macro to support platform independent declaration of a small ordered map
17 /** Declare a small, ordered set like IMP_KERNEL_SMALL_ORDERED_MAP<key, value>. */
18 #define IMP_KERNEL_SMALL_ORDERED_MAP boost::container::flat_map
19 //! Macro to support platform independent declaration of a small unordered set
20 /** Declare a small, ordered set like IMP_KERNEL_SMALL_UNORDERED_SET<item>. */
21 #define IMP_KERNEL_SMALL_UNORDERED_SET boost::container::flat_set
22 //! Macro to support platform independent declaration of a small unordered map
23 /** Declare a small, ordered set like IMP_KERNEL_SMALL_UNORDERED_MAP<key, value>.
24  */
25 #define IMP_KERNEL_SMALL_UNORDERED_MAP boost::container::flat_map
26 //! Macro to support platform independent declaration of a large ordered set
27 /** Declare a small, ordered set like IMP_KERNEL_LARGE_ORDERED_SET<item>. */
28 #define IMP_KERNEL_LARGE_ORDERED_SET std::set
29 //! Macro to support platform independent declaration of a large ordered map
30 /** Declare a small, ordered set like IMP_KERNEL_LARGE_ORDERED_MAP<key, value>. */
31 #define IMP_KERNEL_LARGE_ORDERED_MAP std::map
32 //! Macro to support platform independent declaration of a large unordered set
33 /** Declare a small, ordered set like IMP_KERNEL_LARGE_UNORDERED_SET<item>. */
34 #define IMP_KERNEL_LARGE_UNORDERED_SET boost::unordered_set
35 //! Macro to support platform independent declaration of a large unordered map
36 /** Declare a small, ordered set like IMP_KERNEL_LARGE_UNORDERED_MAP<key, value>.
37  */
38 #define IMP_KERNEL_LARGE_UNORDERED_MAP boost::unordered_map
39 
40 #else
41 
42 #include "IMP/kernel_config.h"
43 #include <boost/version.hpp>
44 #include <boost/functional/hash/hash.hpp> // IWYU pragma: export
45 
46 #include <boost/functional/hash/hash.hpp> // IWYU pragma: export
47 #include <set> // IWYU pragma: export
48 #include <map> // IWYU pragma: export
49 #include <boost/unordered_set.hpp> // IWYU pragma: export
50 #include <boost/unordered_map.hpp> // IWYU pragma: export
51 
52 #define IMP_KERNEL_LARGE_ORDERED_SET std::set
53 #define IMP_KERNEL_LARGE_ORDERED_MAP std::map
54 #define IMP_KERNEL_LARGE_UNORDERED_SET boost::unordered_set
55 #define IMP_KERNEL_LARGE_UNORDERED_MAP boost::unordered_map
56 
57 #if BOOST_VERSION < 104900 || defined(_MSC_VER) && _MSC_VER <= 1500
58 #include <set> // IWYU pragma: export
59 #include <map> // IWYU pragma: export
60 #include <boost/unordered_set.hpp> // IWYU pragma: export
61 #include <boost/unordered_map.hpp> // IWYU pragma: export
62 
63 #define IMP_KERNEL_SMALL_ORDERED_SET std::set
64 #define IMP_KERNEL_SMALL_ORDERED_MAP std::map
65 #define IMP_KERNEL_SMALL_UNORDERED_SET boost::unordered_set
66 #define IMP_KERNEL_SMALL_UNORDERED_MAP boost::unordered_map
67 #else
68 #include <boost/container/flat_set.hpp> // IWYU pragma: export
69 #include <boost/container/flat_map.hpp> // IWYU pragma: export
70 #define IMP_KERNEL_SMALL_ORDERED_SET boost::container::flat_set
71 #define IMP_KERNEL_SMALL_ORDERED_MAP boost::container::flat_map
72 #define IMP_KERNEL_SMALL_UNORDERED_SET boost::container::flat_set
73 #define IMP_KERNEL_SMALL_UNORDERED_MAP boost::container::flat_map
74 #endif
75 #endif
76 
77 #endif /* IMPKERNEL_SET_MAP_MACROS_H */