Files
MeanField_SERiF/docs/man/man3/observers.hpp.3
Emily Boudreaux 6b57738330 docs(docs): built docs
Note for now much of the docs is LLM written. This was done to save time and focus on code development. The docs have been LOOSLEY reviewed. However, the code itself has been either fully written by hand or fully reviewed. Therefore, the docs should at the moment be seen as a loose resource rather than authoratiative (and this is on top of the general ability for docs to drift)
2026-11-09 14:09:44 -05:00

195 lines
8.4 KiB
Groff

.TH "src/include/serif/utils/dependencies/observers.hpp" 3 "Version v0.0.1a" "SERiF" \" -*- nroff -*-
.ad l
.nh
.SH NAME
src/include/serif/utils/dependencies/observers.hpp
.SH SYNOPSIS
.br
.PP
\fR#include <array>\fP
.br
\fR#include <concepts>\fP
.br
\fR#include <cstddef>\fP
.br
\fR#include <exception>\fP
.br
\fR#include <functional>\fP
.br
\fR#include <tuple>\fP
.br
\fR#include <type_traits>\fP
.br
\fR#include <utility>\fP
.br
\fR#include <format>\fP
.br
\fR#include <string_view>\fP
.br
\fR#include 'serif/utils/dependencies/detail/schema\&.hpp'\fP
.br
.SS "Classes"
.in +1c
.ti -1c
.RI "struct \fBserif::utils::dependencies::NodeObserver< KeyT, BeforeT, AfterT >\fP"
.br
.ti -1c
.RI "struct \fBserif::utils::dependencies::AllNodesObserver< BeforeT, AfterT >\fP"
.br
.RI "One registration can inspect every result without building a graph-sized observer tuple\&. "
.ti -1c
.RI "struct \fBserif::utils::dependencies::EdgeObserver< InputT, ConsumerT, FunctionT >\fP"
.br
.ti -1c
.RI "class \fBserif::utils::dependencies::detail::NodeObservation< BeforeT, AfterT >\fP"
.br
.RI "Each started hook owns one invocation state and finishes once, including on exceptional exit\&. "
.ti -1c
.RI "class \fBserif::utils::dependencies::Observers< Registrations >\fP"
.br
.RI "Own registrations; execution state lasts for one invocation and is never part of the numerical cache\&. "
.ti -1c
.RI "struct \fBserif::utils::dependencies::NoGraphObservers\fP"
.br
.RI "Default high-level binding adds no observation storage, timers, or callback work\&. "
.ti -1c
.RI "struct \fBserif::utils::dependencies::detail::ValidObservers< ObserversT, GraphT, ContextT, Valid >\fP"
.br
.ti -1c
.RI "struct \fBserif::utils::dependencies::detail::ValidObservers< Observers< Registrations\&.\&.\&. >, GraphT, ContextT, true >\fP"
.br
.ti -1c
.RI "struct \fBstd::formatter< serif::utils::dependencies::NodeOutcome >\fP"
.br
.in -1c
.SS "Namespaces"
.in +1c
.ti -1c
.RI "namespace \fBserif\fP"
.br
.ti -1c
.RI "namespace \fBserif::utils\fP"
.br
.ti -1c
.RI "namespace \fBserif::utils::dependencies\fP"
.br
.ti -1c
.RI "namespace \fBserif::utils::dependencies::detail\fP"
.br
.in -1c
.SS "Concepts"
.in +1c
.ti -1c
.RI "concept \fBserif::utils::dependencies::NodeObserverCallbacks\fP"
.br
.RI "Completion must be safe during stack unwinding and receives the state created by the before hook\&. "
.ti -1c
.RI "concept \fBserif::utils::dependencies::KeyedNodeObserverCallbacks\fP"
.br
.RI "An all-node callback receives the compiled result identity before creating its invocation state\&. "
.ti -1c
.RI "concept \fBserif::utils::dependencies::ObserversFor\fP"
.br
.RI "Reject unknown nodes, nonexistent edges, and callbacks that cannot observe the graph's immutable values\&. "
.in -1c
.SS "Enumerations"
.in +1c
.ti -1c
.RI "enum class \fBserif::utils::dependencies::NodeOutcome\fP { \fBserif::utils::dependencies::completed\fP, \fBserif::utils::dependencies::rejected\fP, \fBserif::utils::dependencies::exception\fP }"
.br
.RI "Describe a node invocation, independently of whether the whole graph request is later accepted\&. "
.in -1c
.SS "Functions"
.in +1c
.ti -1c
.RI "template<typename KeyT, typename BeforeT, typename AfterT> decltype(auto) \fBserif::utils::dependencies::detail::begin_node\fP (\fBNodeObserver\fP< KeyT, BeforeT, AfterT > &observer)"
.br
.RI "Preserve the existing nullary callback contract for individually selected nodes\&. "
.ti -1c
.RI "template<typename KeyT, typename BeforeT, typename AfterT> decltype(auto) \fBserif::utils::dependencies::detail::begin_node\fP (\fBAllNodesObserver\fP< BeforeT, AfterT > &observer)"
.br
.RI "Bind the identity once so generic registrations use the same exception-safe invocation scope\&. "
.ti -1c
.RI "template<typename InputT, typename ConsumerT, typename ObserverT, typename ValueT> void \fBserif::utils::dependencies::detail::observe_input\fP (ObserverT &, const ValueT &)"
.br
.RI "Unrelated registrations do not observe this edge\&. "
.ti -1c
.RI "template<typename InputT, typename ConsumerT, typename FunctionT, typename ValueT> void \fBserif::utils::dependencies::detail::observe_input\fP (\fBEdgeObserver\fP< InputT, ConsumerT, FunctionT > &observer, const ValueT &value)"
.br
.RI "Edge observers read the numerical value even when its consumer receives an owning handle\&. "
.ti -1c
.RI "template<typename KeyT, typename BeforeT, typename AfterT>
.br
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 \fBserif::utils::dependencies::observe_node\fP (BeforeT &&before, AfterT &&after)"
.br
.RI "Bind before/after callbacks to a result key; callback captures determine any external storage lifetime\&. "
.ti -1c
.RI "template<typename BeforeT, typename AfterT>
.br
requires std::constructible_from<std::decay_t<BeforeT>, BeforeT> && std::constructible_from<std::decay_t<AfterT>, AfterT>auto \fBserif::utils::dependencies::observe_nodes\fP (BeforeT &&before, AfterT &&after)"
.br
.RI "Observe all executed nodes; cache construction checks the callback contract for every result key\&. "
.ti -1c
.RI "template<typename InputT, typename ConsumerT, typename FunctionT>
.br
requires std::constructible_from<std::decay_t<FunctionT>, FunctionT>auto \fBserif::utils::dependencies::observe_edge\fP (FunctionT &&function)"
.br
.RI "Bind a read-only callback to one input of one consumer; graph construction validates the edge and value type\&. "
.ti -1c
.RI "template<typename\&.\&.\&. Registrations>
.br
requires (\fBdetail::is_observer_v\fP<std::remove_cvref_t<Registrations>> && \&.\&.\&.) && (std::constructible_from<std::remove_cvref_t<Registrations>, Registrations> && \&.\&.\&.)auto \fBserif::utils::dependencies::make_observers\fP (Registrations &&\&.\&.\&. observers)"
.br
.RI "Collect any number of registrations, including several observers of the same node or edge\&. "
.ti -1c
.RI "template<typename GraphT, typename BindingsT, typename KeyT, typename BeforeT, typename AfterT> consteval bool \fBserif::utils::dependencies::detail::valid_observer\fP (\fBNodeObserver\fP< KeyT, BeforeT, AfterT > *)"
.br
.RI "Nodes are identified by result keys, including constant computations without inputs\&. "
.ti -1c
.RI "template<typename BeforeT, typename AfterT, typename\&.\&.\&. Keys> consteval bool \fBserif::utils::dependencies::detail::valid_all_nodes\fP (\fBKeyList\fP< Keys\&.\&.\&. >)"
.br
.RI "Use a bounded array scan rather than a graph-sized fold expression at the compiler's nesting limit\&. "
.ti -1c
.RI "template<typename GraphT, typename BindingsT, typename BeforeT, typename AfterT> consteval bool \fBserif::utils::dependencies::detail::valid_observer\fP (\fBAllNodesObserver\fP< BeforeT, AfterT > *)"
.br
.RI "A generic callback must accept every node, including constant computations without inputs\&. "
.ti -1c
.RI "template<typename GraphT, typename BindingsT, typename InputT, typename ConsumerT, typename FunctionT> consteval bool \fBserif::utils::dependencies::detail::valid_observer\fP (\fBEdgeObserver\fP< InputT, ConsumerT, FunctionT > *)"
.br
.RI "Use declared inputs to include source edges as well as computed prerequisites\&. "
.in -1c
.SS "Variables"
.in +1c
.ti -1c
.RI "template<typename T> constexpr bool \fBserif::utils::dependencies::detail::is_observer_v\fP = false"
.br
.ti -1c
.RI "template<typename KeyT, typename BeforeT, typename AfterT> constexpr bool \fBserif::utils::dependencies::detail::is_observer_v< NodeObserver< KeyT, BeforeT, AfterT > >\fP = true"
.br
.ti -1c
.RI "template<typename BeforeT, typename AfterT> constexpr bool \fBserif::utils::dependencies::detail::is_observer_v< AllNodesObserver< BeforeT, AfterT > >\fP = true"
.br
.ti -1c
.RI "template<typename InputT, typename ConsumerT, typename FunctionT> constexpr bool \fBserif::utils::dependencies::detail::is_observer_v< EdgeObserver< InputT, ConsumerT, FunctionT > >\fP = true"
.br
.ti -1c
.RI "template<typename ObserverT, typename KeyT> constexpr bool \fBserif::utils::dependencies::detail::observes_node_v\fP = false"
.br
.ti -1c
.RI "template<typename KeyT, typename BeforeT, typename AfterT> constexpr bool \fBserif::utils::dependencies::detail::observes_node_v< NodeObserver< KeyT, BeforeT, AfterT >, KeyT >\fP = true"
.br
.ti -1c
.RI "template<typename BeforeT, typename AfterT, typename KeyT> constexpr bool \fBserif::utils::dependencies::detail::observes_node_v< AllNodesObserver< BeforeT, AfterT >, KeyT >\fP = true"
.br
.in -1c
.SH "Author"
.PP
Generated automatically by Doxygen for SERiF from the source code\&.