7template <
typename,
typename =
void>
14template <
typename T,
typename Fallback,
typename =
void>
struct get_State_or {
15 using type = Fallback;
19template <
typename T,
typename Fallback>
21 using type =
typename T::State;
25template <
typename T,
typename Fallback>
26using get_State_or_t =
typename get_State_or<T, Fallback>::type;
30template <
typename VertexType,
typename State,
typename Traits,
typename T>
31__global__
void backup_state_kernel(VertexType **vertices, State *dst,
32 const uint8_t *active_state,
33 const size_t num_vertices) {
35 const size_t vertex_id = get_thread_id();
37 if (vertex_id >= num_vertices || !is_vertex_active(active_state, vertex_id))
40 dst[vertex_id] = Traits::get_state(*vertices[vertex_id]);
42 dst[vertex_id] = *vertices[vertex_id];
46template <
typename VertexType,
typename State,
typename Traits,
typename T>
47__global__
void set_state_kernel(VertexType **vertices,
const State *src,
48 const uint8_t *active_state,
49 const size_t num_vertices) {
51 const size_t vertex_id = get_thread_id();
53 if (vertex_id >= num_vertices || !is_vertex_active(active_state, vertex_id))
56 if constexpr (has_type_alias_State<Traits>::value) {
57 Traits::set_state(*vertices[vertex_id], src[vertex_id]);
59 *vertices[vertex_id] = src[vertex_id];
The top-level namespace for Graphite.
Definition eigen_solver.cpp:4