Skip to content

Commit 57536f6

Browse files
committed
fixup! derive dense from multivector
1 parent 12e79a4 commit 57536f6

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

core/matrix/dense.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1538,6 +1538,52 @@ void Dense<ValueType>::compute_norm1_impl(absolute_type* result,
15381538
compute_norm1(result, tmp);
15391539
}
15401540

1541+
template <typename ValueType>
1542+
syn::variant_from_tuple<syn::apply_to_list<std::unique_ptr, dense_types>>
1543+
Dense<ValueType>::create_local_view_impl(
1544+
syn::variant_from_tuple<supported_value_types> type)
1545+
{
1546+
return std::visit(
1547+
[this](auto type)
1548+
-> syn::variant_from_tuple<
1549+
syn::apply_to_list<std::unique_ptr, dense_types>> {
1550+
using SndValueType = std::decay_t<decltype(type)>;
1551+
if constexpr (std::is_same_v<ValueType, SndValueType>) {
1552+
return make_dense_view(this);
1553+
} else {
1554+
GKO_INVALID_STATE("Unsupported value type");
1555+
}
1556+
},
1557+
type);
1558+
}
1559+
1560+
template <typename ValueType>
1561+
auto Dense<ValueType>::create_local_view_impl(
1562+
syn::variant_from_tuple<supported_value_types> type) const
1563+
-> syn::variant_from_tuple<syn::apply_to_list<
1564+
std::unique_ptr, syn::apply_to_list<std::add_const_t, dense_types>>>
1565+
{
1566+
return std::visit(
1567+
[this](auto type)
1568+
-> syn::variant_from_tuple<syn::apply_to_list<
1569+
std::unique_ptr,
1570+
syn::apply_to_list<std::add_const_t, dense_types>>> {
1571+
using SndValueType = std::decay_t<decltype(type)>;
1572+
if constexpr (std::is_same_v<ValueType, SndValueType>) {
1573+
return make_const_dense_view(this);
1574+
} else {
1575+
GKO_INVALID_STATE("Unsupported value type");
1576+
}
1577+
},
1578+
type);
1579+
}
1580+
1581+
template <typename ValueType>
1582+
auto Dense<ValueType>::get_stride_impl() const -> size_type
1583+
{
1584+
return get_stride();
1585+
}
1586+
15411587

15421588
template <typename ValueType>
15431589
std::unique_ptr<LinOp> Dense<ValueType>::permute(

include/ginkgo/core/matrix/dense.hpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,6 +1523,19 @@ class Dense : public EnableMultiVector<Dense<ValueType>>,
15231523
void compute_norm1_impl(absolute_type* result,
15241524
array<char>& tmp) const override;
15251525

1526+
[[nodiscard]] syn::variant_from_tuple<
1527+
syn::apply_to_list<std::unique_ptr, dense_types>>
1528+
create_local_view_impl(
1529+
syn::variant_from_tuple<supported_value_types> type) override;
1530+
1531+
[[nodiscard]] auto create_local_view_impl(
1532+
syn::variant_from_tuple<supported_value_types> type) const
1533+
-> syn::variant_from_tuple<syn::apply_to_list<
1534+
std::unique_ptr,
1535+
syn::apply_to_list<std::add_const_t, dense_types>>> override;
1536+
1537+
[[nodiscard]] auto get_stride_impl() const -> size_type override;
1538+
15261539
private:
15271540
size_type stride_;
15281541
array<value_type> values_;

0 commit comments

Comments
 (0)