SimiLie
Loading...
Searching...
No Matches
domain_contains.hpp
1// SPDX-FileCopyrightText: 2024 Baptiste Legouix
2// SPDX-License-Identifier: MIT
3
4#pragma once
5
6#include <ddc/ddc.hpp>
7
8#include "select_from_type_seq.hpp"
9#include "type_seq_ext.hpp"
10
11namespace sil {
12
13namespace misc {
14
15namespace detail {
16
17template <class Seq>
18struct IsInDomain;
19
20template <class... DDim>
21struct IsInDomain<ddc::detail::TypeSeq<DDim...>>
22{
23 static KOKKOS_FUNCTION bool run(
24 ddc::DiscreteDomain<DDim...> dom,
25 ddc::DiscreteElement<DDim...> elem)
26 {
27 return ((elem.template uid<DDim>() >= dom.front().template uid<DDim>()) && ...)
28 && ((elem.template uid<DDim>() <= dom.back().template uid<DDim>()) && ...);
29 }
30};
31
32} // namespace detail
33
34template <class... DDim, class... ODDim>
35KOKKOS_FUNCTION bool domain_contains(
36 ddc::DiscreteDomain<DDim...> dom,
37 ddc::DiscreteElement<ODDim...> elem)
38{
39 return detail::IsInDomain<misc::type_seq_intersect_t<
40 ddc::detail::TypeSeq<DDim...>,
41 ddc::detail::TypeSeq<ODDim...>>>::
43 ddc::detail::TypeSeq<ODDim...>,
44 ddc::detail::TypeSeq<DDim...>>>(dom),
46 ddc::detail::TypeSeq<ODDim...>,
47 ddc::detail::TypeSeq<DDim...>>>(elem));
48}
49
50} // namespace misc
51
52} // namespace sil
KOKKOS_FUNCTION bool domain_contains(ddc::DiscreteDomain< DDim... > dom, ddc::DiscreteElement< ODDim... > elem)
ddc::type_seq_remove_t< TagSeqA, ddc::type_seq_remove_t< TagSeqA, TagSeqB > > type_seq_intersect_t
KOKKOS_FUNCTION auto select_from_type_seq(T t)
The top-level namespace of SimiLie.
Definition csr.hpp:14