Skip to content

Commit 3ae7c50

Browse files
committed
conversion specializations
1 parent 7d92163 commit 3ae7c50

1 file changed

Lines changed: 27 additions & 1 deletion

File tree

include/hgl/conversion.hpp

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,33 @@ struct to_impl<impl::list_t<LayoutTag>, impl::flat_list_t<LayoutTag>> {
199199
}
200200
};
201201

202-
// TODO: matrix <-> flat-matrix specializations
202+
// Conversion: matrix -> flat matrix (same layout)
203+
template <traits::c_hypergraph_layout_tag LayoutTag>
204+
requires traits::c_hypergraph_asymmetric_layout_tag<LayoutTag>
205+
struct to_impl<impl::flat_matrix_t<LayoutTag>, impl::matrix_t<LayoutTag>> {
206+
template <typename TargetHypergraph, typename SourceHypergraph>
207+
static void convert(TargetHypergraph& target, SourceHypergraph& source) {
208+
target._impl._matrix =
209+
decltype(target._impl._matrix)(std::views::as_rvalue(std::move(source._impl._matrix)));
210+
}
211+
};
212+
213+
// Conversion: flat matrix -> matrix (same layout)
214+
template <traits::c_hypergraph_layout_tag LayoutTag>
215+
requires traits::c_hypergraph_asymmetric_layout_tag<LayoutTag>
216+
struct to_impl<impl::matrix_t<LayoutTag>, impl::flat_matrix_t<LayoutTag>> {
217+
template <typename TargetHypergraph, typename SourceHypergraph>
218+
static void convert(TargetHypergraph& target, SourceHypergraph& source) {
219+
auto& target_impl = target._impl;
220+
auto& source_impl = source._impl;
221+
222+
target_impl._matrix_row_size = source_impl._matrix.n_cols();
223+
target_impl._matrix.reserve(source_impl._matrix.n_rows());
224+
225+
for (const auto row : source_impl._matrix)
226+
target_impl._matrix.emplace_back(row.begin(), row.end());
227+
}
228+
};
203229

204230
} // namespace detail
205231

0 commit comments

Comments
 (0)