Loading...
Searching...
No Matches
Namespaces | Functions
control.h File Reference

Data and flow control. More...

#include "core/error.h"
#include "util/iterator_util.h"
#include "backbone/type_traits.h"
#include "backbone/array.h"

Go to the source code of this file.

Namespaces

namespace  backbone
 Random number generator; built on top of Drjit.
 

Functions

template<typename NEWTYPE , typename OLDTYPE >
NEWTYPE cast (OLDTYPE &&val)
 cast
 
template<typename MASK , typename A , typename B >
auto select (MASK &&mask, A &&a, B &&b)
 Extension of drjit::select to diff/non-diff masks.
 
template<typename RET , typename C , typename Index >
requires (!is_packet_v<Index>) && std::ranges::range<C> && std::convertible_to<bbm::iterable_value_t<C>, RET> && is_index_v<Index>
constexpr RET lookup (C &&container, const Index &idx, const index_mask_t< Index > &mask=true)
 Non-packet look up.
 
template<typename RET , typename C , typename Index >
requires is_packet_v<RET> && is_packet_v<Index> && std::ranges::range<C> && is_index_v<Index> && std::convertible_to<bbm::iterable_value_t<C>, remove_packet_t<RET>> && (!is_packet_v<bbm::iterable_value_t<C>>)
RET lookup (C &&container, const Index &idx, const index_mask_t< Index > &mask=true)
 Non-packet data, Packet look up.
 
template<typename RET , typename C , typename Index >
requires is_packet_v<RET> && is_packet_v<Index> && std::ranges::range<C> && is_index_v<Index> && std::convertible_to<bbm::iterable_value_t<C>, RET> && is_packet_v<bbm::iterable_value_t<C>>
RET lookup (C &&container, const Index &idx, const index_mask_t< Index > &mask=true)
 Packet data, Packet look up.
 
template<typename VAL , typename C , typename Index >
requires (!is_packet_v<Index>) && std::ranges::range<C> && is_index_v<Index> && std::convertible_to<VAL, bbm::iterable_value_t<C>>
constexpr void set (C &&container, const Index &idx, VAL &&value, const index_mask_t< Index > &mask=true)
 Non-packet set.
 
template<typename VAL , typename C , typename Index >
requires is_packet_v<VAL> && is_packet_v<Index> && std::ranges::range<C> && is_index_v<Index> && std::convertible_to<remove_packet_t<VAL>, bbm::iterable_value_t<C>> && (!is_packet_v<bbm::iterable_value_t<C>>)
void set (C &&container, const Index &idx, VAL &&value, const index_mask_t< Index > &mask=true)
 Non-packet data, Packet set.
 
template<typename VAL , typename C , typename Index >
requires is_packet_v<VAL> && is_packet_v<Index> && std::ranges::range<C> && is_index_v<Index> && std::convertible_to<VAL, bbm::iterable_value_t<C>> && is_packet_v<bbm::iterable_value_t<C>>
void set (C &&container, const Index &idx, VAL &&value, const index_mask_t< Index > &mask=true)
 Packet data, Packet set.
 
template<typename C , typename PRED >
requires std::ranges::range<C> && std::is_invocable_r_v<mask_t<bbm::iterable_value_t<C>>, PRED, bbm::iterable_value_t<C>>
constexpr index_t< bbm::iterable_value_t< C > > binary_search (C &&container, PRED &&predicate, const index_mask_t< bbm::iterable_value_t< C > > &mask=true)
 binary search
 

Detailed Description

Data and flow control.