@@ -33,24 +33,45 @@ limitations under the License.
3333namespace osp {
3434
3535/* *
36- * @brief Macro to define a trait that checks for the existence of a specific type member .
36+ * @brief Traits to check for the existence of specific type members .
3737 *
38- * Creates a struct `test_name<T>` inheriting from `std::true_type` if `T::member_name` exists ,
39- * otherwise inherits from `std::false_type`.
38+ * These structs inherit from `std::true_type` if the specified member type exists in `T` ,
39+ * otherwise they inherit from `std::false_type`.
4040 */
41- #define DEFINE_TYPE_MEMBER_TEST (test_name, member_name ) \
42- template <typename T, typename = void > \
43- struct test_name : std::false_type {}; \
44- template <typename T> \
45- struct test_name <T, std::void_t <typename T::member_name>> : std::true_type {};
46-
47- DEFINE_TYPE_MEMBER_TEST (has_vertex_idx_tmember, vertex_idx)
48- DEFINE_TYPE_MEMBER_TEST (has_edge_desc_tmember, directed_edge_descriptor)
49- DEFINE_TYPE_MEMBER_TEST (has_vertex_work_weight_tmember, vertex_work_weight_type)
50- DEFINE_TYPE_MEMBER_TEST (has_vertex_comm_weight_tmember, vertex_comm_weight_type)
51- DEFINE_TYPE_MEMBER_TEST (has_vertex_mem_weight_tmember, vertex_mem_weight_type)
52- DEFINE_TYPE_MEMBER_TEST (has_vertex_type_tmember, vertex_type_type)
53- DEFINE_TYPE_MEMBER_TEST (has_edge_comm_weight_tmember, edge_comm_weight_type)
41+ template <typename T, typename = void >
42+ struct has_vertex_idx_tmember : std::false_type {};
43+ template <typename T>
44+ struct has_vertex_idx_tmember <T, std::void_t <typename T::vertex_idx>> : std::true_type {};
45+
46+ template <typename T, typename = void >
47+ struct has_edge_desc_tmember : std::false_type {};
48+ template <typename T>
49+ struct has_edge_desc_tmember <T, std::void_t <typename T::directed_edge_descriptor>> : std::true_type {};
50+
51+ template <typename T, typename = void >
52+ struct has_vertex_work_weight_tmember : std::false_type {};
53+ template <typename T>
54+ struct has_vertex_work_weight_tmember <T, std::void_t <typename T::vertex_work_weight_type>> : std::true_type {};
55+
56+ template <typename T, typename = void >
57+ struct has_vertex_comm_weight_tmember : std::false_type {};
58+ template <typename T>
59+ struct has_vertex_comm_weight_tmember <T, std::void_t <typename T::vertex_comm_weight_type>> : std::true_type {};
60+
61+ template <typename T, typename = void >
62+ struct has_vertex_mem_weight_tmember : std::false_type {};
63+ template <typename T>
64+ struct has_vertex_mem_weight_tmember <T, std::void_t <typename T::vertex_mem_weight_type>> : std::true_type {};
65+
66+ template <typename T, typename = void >
67+ struct has_vertex_type_tmember : std::false_type {};
68+ template <typename T>
69+ struct has_vertex_type_tmember <T, std::void_t <typename T::vertex_type_type>> : std::true_type {};
70+
71+ template <typename T, typename = void >
72+ struct has_edge_comm_weight_tmember : std::false_type {};
73+ template <typename T>
74+ struct has_edge_comm_weight_tmember <T, std::void_t <typename T::edge_comm_weight_type>> : std::true_type {};
5475
5576/* *
5677 * @brief Core traits for any directed graph type.
@@ -81,7 +102,6 @@ using vertex_idx_t = typename directed_graph_traits<T>::vertex_idx;
81102 */
82103template <typename Graph_t>
83104struct directed_edge {
84-
85105 vertex_idx_t <Graph_t> source;
86106 vertex_idx_t <Graph_t> target;
87107
0 commit comments