|
SERiF v0.0.1a
Stellar Evolution and Rotation in Four Dimensions
|
#include <array>#include <concepts>#include <cstddef>#include <exception>#include <functional>#include <tuple>#include <type_traits>#include <utility>#include <format>#include <string_view>#include "serif/utils/dependencies/detail/schema.hpp"Namespaces | |
| namespace | serif |
| namespace | serif::utils |
| namespace | serif::utils::dependencies |
| namespace | serif::utils::dependencies::detail |
Concepts | |
| concept | serif::utils::dependencies::NodeObserverCallbacks |
| Completion must be safe during stack unwinding and receives the state created by the before hook. | |
| concept | serif::utils::dependencies::KeyedNodeObserverCallbacks |
| An all-node callback receives the compiled result identity before creating its invocation state. | |
| concept | serif::utils::dependencies::ObserversFor |
| Reject unknown nodes, nonexistent edges, and callbacks that cannot observe the graph's immutable values. | |
Enumerations | |
| enum class | serif::utils::dependencies::NodeOutcome { serif::utils::dependencies::completed , serif::utils::dependencies::rejected , serif::utils::dependencies::exception } |
| Describe a node invocation, independently of whether the whole graph request is later accepted. More... | |
Functions | |
| template<typename KeyT, typename BeforeT, typename AfterT> | |
| decltype(auto) | serif::utils::dependencies::detail::begin_node (NodeObserver< KeyT, BeforeT, AfterT > &observer) |
| Preserve the existing nullary callback contract for individually selected nodes. | |
| template<typename KeyT, typename BeforeT, typename AfterT> | |
| decltype(auto) | serif::utils::dependencies::detail::begin_node (AllNodesObserver< BeforeT, AfterT > &observer) |
| Bind the identity once so generic registrations use the same exception-safe invocation scope. | |
| template<typename InputT, typename ConsumerT, typename ObserverT, typename ValueT> | |
| void | serif::utils::dependencies::detail::observe_input (ObserverT &, const ValueT &) |
| Unrelated registrations do not observe this edge. | |
| template<typename InputT, typename ConsumerT, typename FunctionT, typename ValueT> | |
| void | serif::utils::dependencies::detail::observe_input (EdgeObserver< InputT, ConsumerT, FunctionT > &observer, const ValueT &value) |
| Edge observers read the numerical value even when its consumer receives an owning handle. | |
| template<typename KeyT, typename BeforeT, typename AfterT> requires NodeObserverCallbacks<std::decay_t<BeforeT>, std::decay_t<AfterT>> && std::constructible_from<std::decay_t<BeforeT>, BeforeT> && std::constructible_from<std::decay_t<AfterT>, AfterT> | |
| auto | serif::utils::dependencies::observe_node (BeforeT &&before, AfterT &&after) |
| Bind before/after callbacks to a result key; callback captures determine any external storage lifetime. | |
| template<typename BeforeT, typename AfterT> requires std::constructible_from<std::decay_t<BeforeT>, BeforeT> && std::constructible_from<std::decay_t<AfterT>, AfterT> | |
| auto | serif::utils::dependencies::observe_nodes (BeforeT &&before, AfterT &&after) |
| Observe all executed nodes; cache construction checks the callback contract for every result key. | |
| template<typename InputT, typename ConsumerT, typename FunctionT> requires std::constructible_from<std::decay_t<FunctionT>, FunctionT> | |
| auto | serif::utils::dependencies::observe_edge (FunctionT &&function) |
| Bind a read-only callback to one input of one consumer; graph construction validates the edge and value type. | |
| template<typename... Registrations> requires (detail::is_observer_v<std::remove_cvref_t<Registrations>> && ...) && (std::constructible_from<std::remove_cvref_t<Registrations>, Registrations> && ...) | |
| auto | serif::utils::dependencies::make_observers (Registrations &&... observers) |
| Collect any number of registrations, including several observers of the same node or edge. | |
| template<typename GraphT, typename BindingsT, typename KeyT, typename BeforeT, typename AfterT> | |
| consteval bool | serif::utils::dependencies::detail::valid_observer (NodeObserver< KeyT, BeforeT, AfterT > *) |
| Nodes are identified by result keys, including constant computations without inputs. | |
| template<typename BeforeT, typename AfterT, typename... Keys> | |
| consteval bool | serif::utils::dependencies::detail::valid_all_nodes (KeyList< Keys... >) |
| Use a bounded array scan rather than a graph-sized fold expression at the compiler's nesting limit. | |
| template<typename GraphT, typename BindingsT, typename BeforeT, typename AfterT> | |
| consteval bool | serif::utils::dependencies::detail::valid_observer (AllNodesObserver< BeforeT, AfterT > *) |
| A generic callback must accept every node, including constant computations without inputs. | |
| template<typename GraphT, typename BindingsT, typename InputT, typename ConsumerT, typename FunctionT> | |
| consteval bool | serif::utils::dependencies::detail::valid_observer (EdgeObserver< InputT, ConsumerT, FunctionT > *) |
| Use declared inputs to include source edges as well as computed prerequisites. | |