1#ifndef _BBM_CONTROL_BACKBONE_CONCEPT_H_
2#define _BBM_CONTROL_BACKBONE_CONCEPT_H_
44 { cast<T>( std::declval<T>() ) } -> std::same_as<T>;
54 {
select( std::declval<mask_t<T>>(), a, a ) } -> std::convertible_to<T>;
82 { lookup<T>( std::declval<std::vector<remove_packet_t<T>>>(), std::declval<size_t>(), std::declval<index_mask_t<size_t>>() ) } -> std::convertible_to<T>;
83 { lookup<T>( std::declval<std::vector<T>>(), std::declval<size_t>(), std::declval<index_mask_t<size_t>>() ) } -> std::convertible_to<T>;
84 { lookup<T>( std::declval<std::vector<remove_packet_t<T>>>(), std::declval<index_t<T>>(), std::declval<index_mask_t<T>>() ) } -> std::convertible_to<T>;
85 { lookup<T>( std::declval<std::vector<T>>(), std::declval<index_t<T>>(), std::declval<index_mask_t<T>>() ) } -> std::convertible_to<T>;
87 { lookup<T>( std::declval<std::vector<remove_packet_t<T>>>(), std::declval<size_t>() ) } -> std::convertible_to<T>;
88 { lookup<T>( std::declval<std::vector<T>>(), std::declval<size_t>()) } -> std::convertible_to<T>;
89 { lookup<T>( std::declval<std::vector<remove_packet_t<T>>>(), std::declval<index_t<T>>() ) } -> std::convertible_to<T>;
90 { lookup<T>( std::declval<std::vector<T>>(), std::declval<index_t<T>>() ) } -> std::convertible_to<T>;
113 {
set( std::declval<std::vector<remove_packet_t<T>>>(), std::declval<size_t>(), std::declval<remove_packet_t<T>>(), std::declval<index_mask_t<size_t>>() ) };
114 {
set( std::declval<std::vector<T>>(), std::declval<size_t>(), std::declval<T>(), std::declval<index_mask_t<size_t>>() ) };
115 {
set( std::declval<std::vector<remove_packet_t<T>>>(), std::declval<index_t<T>>(), std::declval<T>(), std::declval<index_mask_t<T>>() ) };
116 {
set( std::declval<std::vector<T>>(), std::declval<index_t<T>>(), std::declval<T>(), std::declval<index_mask_t<T>>() ) };
118 {
set( std::declval<std::vector<remove_packet_t<T>>>(), std::declval<size_t>(), std::declval<remove_packet_t<T>>() ) };
119 {
set( std::declval<std::vector<T>>(), std::declval<size_t>(), std::declval<T>() ) };
120 {
set( std::declval<std::vector<remove_packet_t<T>>>(), std::declval<index_t<T>>(), std::declval<T>() ) };
121 {
set( std::declval<std::vector<T>>(), std::declval<index_t<T>>(), std::declval<T>() ) };
138 { binary_search( std::declval<std::vector<T>>(), [](
const T&) {
return true; }, std::declval<index_mask_t<T>>() ) } -> std::convertible_to< index_t<T> >;
139 { binary_search( std::declval<std::vector<T>>(), [](
const T&) {
return true; } ) } -> std::convertible_to< index_t<T> >;
A type T has valid control methods if:
Definition: control.h:33
Random number generator; built on top of Drjit.
Definition: backbone.h:53
Definition: aggregatebsdf.h:29
constexpr auto select(MASK &&mask, const A &a, const A &b)
Definition: backbone.h:255
void set(C &&container, const Index &idx, Value &&value, const index_mask_t< Index > &mask=true)
Generalization of backbone::set to include tuples/named/reflection-supported objects.
Definition: backbone.h:352
Additional basic helper concepts.