Sequoia
Loading...
Searching...
No Matches
Classes | Typedefs | Functions | Variables
Suite.hpp File Reference

Utilities for defining a suite of objects, filtered at runtime. More...

#include "sequoia/Core/Object/Nomenclator.hpp"
#include "sequoia/Maths/Graph/DynamicTree.hpp"
#include "sequoia/Maths/Graph/GraphTraits.hpp"
#include <algorithm>
#include <ranges>
#include <string>
#include <tuple>
#include <variant>
#include <vector>

Go to the source code of this file.

Classes

struct  sequoia::object::is_suite< T >
 
struct  sequoia::object::is_suite< suite< Ts... > >
 
class  sequoia::object::suite< Ts >
 
struct  sequoia::object::leaf_extractor< std::tuple< Ts... > >
 
struct  sequoia::object::leaf_extractor< suite< Ts... > >
 
struct  sequoia::object::leaf_extractor< std::tuple< Ts... >, std::tuple< Us... > >
 
struct  sequoia::object::leaf_extractor< suite< Ts... >, std::tuple< Us... > >
 
struct  sequoia::object::leaf_extractor< std::tuple< Ts... >, suite< Us... > >
 
struct  sequoia::object::leaf_extractor< T, U, Vs... >
 
struct  sequoia::object::leaves_to_variant_or_unique_type< std::tuple< Ts... >, Transform >
 
struct  sequoia::object::leaves_to_variant_or_unique_type< std::tuple< T, Ts... >, Transform >
 
struct  sequoia::object::leaves_to_variant_or_unique_type< suite< Ts... >, Transform >
 
struct  sequoia::object::faithful_variant<>
 
struct  sequoia::object::faithful_variant< T >
 
struct  sequoia::object::faithful_variant< std::variant< Ts... >, T >
 
struct  sequoia::object::faithful_variant< std::variant< Ts... >, T, Us... >
 
struct  sequoia::object::faithful_variant< T, Ts... >
 
struct  sequoia::object::to_variant_or_unique_type< T, Transform >
 
struct  sequoia::object::to_variant_or_unique_type< suite< Ts... >, Transform >
 
struct  sequoia::object::item_to_name
 
class  sequoia::object::granular_filter< ItemKeyType, ItemCompare, ItemProjector >
 

Typedefs

template<class T >
using sequoia::object::is_suite_t = typename is_suite< T >::type
 
template<class... Ts>
using sequoia::object::leaf_extractor_t = typename leaf_extractor< Ts... >::type
 
template<class T , class Transform >
using sequoia::object::leaves_to_variant_or_unique_type_t = typename leaves_to_variant_or_unique_type< T, Transform >::type
 
template<class... Ts>
using sequoia::object::faithful_variant_t = typename faithful_variant< Ts... >::type
 
template<class T , class Transform >
using sequoia::object::to_variant_or_unique_type_t = typename to_variant_or_unique_type< T, Transform >::type
 

Functions

template<class... Ts, class Fn >
void sequoia::object::impl::extract_leaves (suite< Ts... > &s, Fn fn)
 
template<class... Ts, class Filter , class Transform , class Container , class... PreviousSuites>
requires (is_suite_v<PreviousSuites> && ...) && ((!is_suite_v<Ts>) && ...)
Container && sequoia::object::impl::extract_leaves (suite< Ts... > &s, Filter &&filter, Transform t, Container &&c, const PreviousSuites &... previous)
 
template<class... Ts, class Filter , class Transform , class Container , class... PreviousSuites>
requires (is_suite_v<PreviousSuites> && ...) && ((is_suite_v<Ts>) && ...)
Container && sequoia::object::impl::extract_leaves (suite< Ts... > &s, Filter &&filter, Transform t, Container &&c, const PreviousSuites &... previous)
 
template<class... Ts, class Transform , class Tree , std::integral SizeType = typename Tree::size_type, class Fn >
requires maths::dynamic_tree<std::remove_cvref_t<Tree>>
Tree && sequoia::object::impl::extract_tree (suite< Ts... > &s, Transform transform, Tree &&tree, const SizeType parentNode, Fn fn)
 
template<class... Ts, class Filter , class Transform , class Tree , std::integral SizeType = typename Tree::size_type, class... PreviousSuites>
requires maths::dynamic_tree<std::remove_cvref_t<Tree>> && (is_suite_v<PreviousSuites> && ...) && ((!is_suite_v<Ts>) && ...)
Tree && sequoia::object::impl::extract_tree (suite< Ts... > &s, Filter &&filter, Transform transform, Tree &&tree, const SizeType parentNode, const PreviousSuites &... previous)
 
template<class... Ts, class Filter , class Transform , class Tree , std::integral SizeType = typename Tree::size_type, class... PreviousSuites>
requires maths::dynamic_tree<std::remove_cvref_t<Tree>> && (is_suite_v<PreviousSuites> && ...) && ((is_suite_v<Ts>) && ...)
Tree && sequoia::object::impl::extract_tree (suite< Ts... > &s, Filter &&filter, Transform transform, Tree &&tree, const SizeType parentNode, const PreviousSuites &... previous)
 
template<class Suite , class Filter , class Transform = std::identity, class Container = std::vector<leaves_to_variant_or_unique_type_t<Suite, Transform>>>
requires is_suite_v<Suite>
Container sequoia::object::extract_leaves (Suite s, Filter &&filter, Transform t={})
 
template<class Suite , class Filter , class Transform , maths::dynamic_tree Tree = maths::directed_tree<maths::tree_link_direction::forward, maths::null_weight, to_variant_or_unique_type_t<Suite, Transform>>>
requires is_suite_v<Suite>
Tree sequoia::object::extract_tree (Suite s, Filter &&filter, Transform transform)
 
template<class Suite , class Filter , class Transform , maths::dynamic_tree Tree>
requires is_suite_v<Suite>
Tree & sequoia::object::extract_tree (Suite s, Filter &&filter, Transform transform, Tree &tree, typename Tree::size_type pos)
 

Variables

template<class T >
constexpr bool sequoia::object::is_suite_v {is_suite<T>::value}
 
template<class ItemKeyType , class ItemCompare , class ItemProjector , class T >
constexpr bool sequoia::object::granular_filter_for
 

Detailed Description

Utilities for defining a suite of objects, filtered at runtime.

Variable Documentation

◆ granular_filter_for

template<class ItemKeyType , class ItemCompare , class ItemProjector , class T >
constexpr bool sequoia::object::granular_filter_for
inlineconstexpr
Initial value:
{
requires (const ItemKeyType& val, ItemCompare comp, ItemProjector proj, const T& t) {
{ comp(val, proj(t)) } -> std::same_as<bool>;
}
}