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)
426 lines
20 KiB
Groff
426 lines
20 KiB
Groff
.TH "serif::utils::dependencies::detail" 3 "Version v0.0.1a" "SERiF" \" -*- nroff -*-
|
|
.ad l
|
|
.nh
|
|
.SH NAME
|
|
serif::utils::dependencies::detail
|
|
.SH SYNOPSIS
|
|
.br
|
|
.PP
|
|
.SS "Classes"
|
|
|
|
.in +1c
|
|
.ti -1c
|
|
.RI "struct \fBAppendBinding\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBAppendBinding< Bindings< BindingsTs\&.\&.\&. >, BindingT >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBAppendKeys\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBAppendKeys< ResultT, FirstT, Rest\&.\&.\&. >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBAppendUnique\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBAppendUnique< KeyList< Keys\&.\&.\&. >, T >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBBindingLookup\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBBindingLookup< Bindings< BindingTs\&.\&.\&. > >\fP"
|
|
.br
|
|
.RI "Share one compile-time lookup structure across all keys in a binding collection\&. "
|
|
.ti -1c
|
|
.RI "struct \fBBorrowedValue\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBBoundType\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBCachedResult\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBComputationCacheStorage\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBComputationCacheStorage< GraphT, BindingsT, types::TypeList< Resources\&.\&.\&. >, std::index_sequence< Indices\&.\&.\&. > >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBComputationCacheTraits\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBComputationCacheTraits< GraphT, ContextT, ErrorT, true >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBComputationGraphSchema\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBComputationGraphSchema< GraphT, ContextT, true >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBGraph\fP"
|
|
.br
|
|
.RI "Immutable topology of computed nodes; context sources are resolved separately\&. "
|
|
.ti -1c
|
|
.RI "struct \fBHasBinding\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBHasBinding< Bindings< BindingTs\&.\&.\&. >, KeyT >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBInvocation\fP"
|
|
.br
|
|
.RI "Ill-formed calls fail the graph concept instead of producing a hard instantiation error\&. "
|
|
.ti -1c
|
|
.RI "struct \fBInvocation< ComputationT, types::TypeList< Arguments\&.\&.\&. >, std::void_t< InvocationResult< ComputationT, Arguments\&.\&.\&. > > >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBKeyListSize\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBKeyListSize< KeyList< Keys\&.\&.\&. > >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBMergeKeyLists\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBMergeKeyLists< ResultT, KeyList< Keys\&.\&.\&. >, Rest\&.\&.\&. >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "class \fBNodeObservation\fP"
|
|
.br
|
|
.RI "Each started hook owns one invocation state and finishes once, including on exceptional exit\&. "
|
|
.ti -1c
|
|
.RI "struct \fBOwnedValue\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBResolveComputation\fP"
|
|
.br
|
|
.RI "Missing inputs stop resolution before instantiating the callable or its result type\&. "
|
|
.ti -1c
|
|
.RI "struct \fBResolveComputation< ComputationT, BindingsT, true >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBResolveGraph\fP"
|
|
.br
|
|
.RI "Walk execution positions, appending each result type to the available input bindings\&. "
|
|
.ti -1c
|
|
.RI "struct \fBResolveGraph< GraphT, BindingsT, Position, false >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBResolveGraph< GraphT, BindingsT, Position, true >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBResolveStep\fP"
|
|
.br
|
|
.RI "An invalid callable must not instantiate the remaining graph or access a missing Value type\&. "
|
|
.ti -1c
|
|
.RI "struct \fBResolveStep< GraphT, BindingsT, Position, ComputationT, true >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBResourceKeys\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBResourceKeys< types::TypeList< Resources\&.\&.\&. > >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBResult\fP"
|
|
.br
|
|
.RI "Computations publish owned, movable values, either directly or through std::expected\&. "
|
|
.ti -1c
|
|
.RI "struct \fBResult< std::expected< ValueT, ErrorT > >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBSourceSnapshot\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBUsedResource\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBValidObservers\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "struct \fBValidObservers< Observers< Registrations\&.\&.\&. >, GraphT, ContextT, true >\fP"
|
|
.br
|
|
.in -1c
|
|
.SS "Typedefs"
|
|
|
|
.in +1c
|
|
.ti -1c
|
|
.RI "template<typename GraphT, typename ContextT> using \fBUsedResources\fP = \fBmisc::concepts::FilterT\fP<typename ContextT::Resources, \fBUsedResource\fP<GraphT>::template Predicate>"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename ComputationT, typename TargetT> using \fBComputationArgument\fP = std::conditional_t<ComputationT::owns_inputs, std::shared_ptr<const TargetT>, TargetT>"
|
|
.br
|
|
.RI "Owning computations receive the cache handle; ordinary computations receive the value\&. "
|
|
.ti -1c
|
|
.RI "template<typename ComputationT, typename\&.\&.\&. Arguments> using \fBInvocationResult\fP"
|
|
.br
|
|
.RI "Match the const argument access used by the runtime cache without constructing any values\&. "
|
|
.in -1c
|
|
.SS "Functions"
|
|
|
|
.in +1c
|
|
.ti -1c
|
|
.RI "template<typename\&.\&.\&. Resources> consteval bool \fBcombinable_resources\fP (\fBtypes::TypeList\fP< Resources\&.\&.\&. >)"
|
|
.br
|
|
.RI "Combining contexts must preserve every resource, with exactly one owner of each key\&. "
|
|
.ti -1c
|
|
.RI "template<typename GraphT, typename BindingsT, typename ErrorT, std::size_t\&.\&.\&. Indices> consteval bool \fBcompatible_errors\fP (std::index_sequence< Indices\&.\&.\&. >)"
|
|
.br
|
|
.RI "Value-returning calculations can share a graph with expected results carrying its declared error or an exact union alternative\&. "
|
|
.ti -1c
|
|
.RI "template<typename BindingsT, typename\&.\&.\&. Keys> consteval bool \fBindependent_results\fP (\fBKeyList\fP< Keys\&.\&.\&. >)"
|
|
.br
|
|
.RI "A key has exactly one producer: either the context or a computation\&. "
|
|
.ti -1c
|
|
.RI "template<typename KeyT, typename\&.\&.\&. Types> consteval std::size_t \fBtype_index\fP (\fBtypes::TypeList\fP< Types\&.\&.\&. >)"
|
|
.br
|
|
.RI "Locate a type without requiring the types themselves to be constructible\&. "
|
|
.ti -1c
|
|
.RI "template<typename KeyT, typename BeforeT, typename AfterT> decltype(auto) \fBbegin_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) \fBbegin_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 \fBobserve_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 \fBobserve_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 GraphT, typename BindingsT, typename KeyT, typename BeforeT, typename AfterT> consteval bool \fBvalid_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 \fBvalid_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 \fBvalid_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 \fBvalid_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\&.\&.\&. Types> constexpr bool \fBvalid_binding_types_v\fP"
|
|
.br
|
|
.RI "Validate each binding without an implicit constraint fold proportional to the collection size\&. "
|
|
.ti -1c
|
|
.RI "template<typename ComputationT, typename ResultKeysT> constexpr bool \fBvalid_input_ownership_v\fP"
|
|
.br
|
|
.RI "Owning nodes can retain computed inputs; context resources remain borrowed\&. "
|
|
.ti -1c
|
|
.RI "template<typename Source, typename Target> constexpr bool \fBcompatible_error_v\fP = std::same_as<Source, Target>"
|
|
.br
|
|
.RI "Ordinary graph failures retain an exact type; numerical conversions must not erase diagnostics\&. "
|
|
.ti -1c
|
|
.RI "template<typename Source, typename\&.\&.\&. Alternatives> constexpr bool \fBcompatible_error_v< Source, std::variant< Alternatives\&.\&.\&. > >\fP"
|
|
.br
|
|
.RI "Independent modules may explicitly aggregate their unchanged failures in an unambiguous tagged union\&. "
|
|
.ti -1c
|
|
.RI "template<typename KeyT, typename KeysT> constexpr bool \fBcontains_key_v\fP = false"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename KeyT, typename\&.\&.\&. Keys> constexpr bool \fBcontains_key_v< KeyT, KeyList< Keys\&.\&.\&. > >\fP = \fBtype_index\fP<KeyT>(\fBtypes::TypeList\fP<Keys\&.\&.\&.>{}) < sizeof\&.\&.\&.(Keys)"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename RequiredT, typename AvailableT> constexpr bool \fBkey_list_subset_v\fP = false"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename\&.\&.\&. Keys, typename AvailableT> constexpr bool \fBkey_list_subset_v< KeyList< Keys\&.\&.\&. >, AvailableT >\fP"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename T> constexpr bool \fBis_observer_v\fP = false"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename KeyT, typename BeforeT, typename AfterT> constexpr bool \fBis_observer_v< NodeObserver< KeyT, BeforeT, AfterT > >\fP = true"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename BeforeT, typename AfterT> constexpr bool \fBis_observer_v< AllNodesObserver< BeforeT, AfterT > >\fP = true"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename InputT, typename ConsumerT, typename FunctionT> constexpr bool \fBis_observer_v< EdgeObserver< InputT, ConsumerT, FunctionT > >\fP = true"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename ObserverT, typename KeyT> constexpr bool \fBobserves_node_v\fP = false"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename KeyT, typename BeforeT, typename AfterT> constexpr bool \fBobserves_node_v< NodeObserver< KeyT, BeforeT, AfterT >, KeyT >\fP = true"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename BeforeT, typename AfterT, typename KeyT> constexpr bool \fBobserves_node_v< AllNodesObserver< BeforeT, AfterT >, KeyT >\fP = true"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename TimePoint> constexpr bool \fBnode_time_point_v\fP = false"
|
|
.br
|
|
.ti -1c
|
|
.RI "template<typename Clock, typename Duration> constexpr bool \fBnode_time_point_v< std::chrono::time_point< Clock, Duration > >\fP = std::is_arithmetic_v<typename Duration::rep>"
|
|
.br
|
|
.in -1c
|
|
.SH "Typedef Documentation"
|
|
.PP
|
|
.SS "template<typename ComputationT, typename TargetT> using \fBserif::utils::dependencies::detail::ComputationArgument\fP = std::conditional_t<ComputationT::owns_inputs, std::shared_ptr<const TargetT>, TargetT>"
|
|
|
|
.PP
|
|
Owning computations receive the cache handle; ordinary computations receive the value\&.
|
|
.SS "template<typename ComputationT, typename\&.\&.\&. Arguments> using \fBserif::utils::dependencies::detail::InvocationResult\fP"
|
|
\fBInitial value:\fP
|
|
.nf
|
|
decltype(std::declval<const ComputationT&>()\&.evaluate(
|
|
std::declval<const ComputationArgument<ComputationT, Arguments>&>()\&.\&.\&.
|
|
))
|
|
.PP
|
|
.fi
|
|
|
|
.PP
|
|
Match the const argument access used by the runtime cache without constructing any values\&.
|
|
.SS "template<typename GraphT, typename ContextT> using \fBserif::utils::dependencies::detail::UsedResources\fP = \fBmisc::concepts::FilterT\fP<typename ContextT::Resources, \fBUsedResource\fP<GraphT>::template Predicate>"
|
|
|
|
.SH "Function Documentation"
|
|
.PP
|
|
.SS "template<typename KeyT, typename BeforeT, typename AfterT> decltype(auto) serif::utils::dependencies::detail::begin_node (\fBAllNodesObserver\fP< BeforeT, AfterT > & observer)\fR [nodiscard]\fP"
|
|
|
|
.PP
|
|
Bind the identity once so generic registrations use the same exception-safe invocation scope\&.
|
|
.SS "template<typename KeyT, typename BeforeT, typename AfterT> decltype(auto) serif::utils::dependencies::detail::begin_node (\fBNodeObserver\fP< KeyT, BeforeT, AfterT > & observer)\fR [nodiscard]\fP"
|
|
|
|
.PP
|
|
Preserve the existing nullary callback contract for individually selected nodes\&.
|
|
.SS "template<typename\&.\&.\&. Resources> bool serif::utils::dependencies::detail::combinable_resources (\fBtypes::TypeList\fP< Resources\&.\&.\&. > )\fR [nodiscard]\fP, \fR [consteval]\fP"
|
|
|
|
.PP
|
|
Combining contexts must preserve every resource, with exactly one owner of each key\&.
|
|
.SS "template<typename GraphT, typename BindingsT, typename ErrorT, std::size_t\&.\&.\&. Indices> bool serif::utils::dependencies::detail::compatible_errors (std::index_sequence< Indices\&.\&.\&. > )\fR [nodiscard]\fP, \fR [consteval]\fP"
|
|
|
|
.PP
|
|
Value-returning calculations can share a graph with expected results carrying its declared error or an exact union alternative\&.
|
|
.SS "template<typename BindingsT, typename\&.\&.\&. Keys> bool serif::utils::dependencies::detail::independent_results (\fBKeyList\fP< Keys\&.\&.\&. > )\fR [nodiscard]\fP, \fR [consteval]\fP"
|
|
|
|
.PP
|
|
A key has exactly one producer: either the context or a computation\&.
|
|
.SS "template<typename InputT, typename ConsumerT, typename FunctionT, typename ValueT> void serif::utils::dependencies::detail::observe_input (\fBEdgeObserver\fP< InputT, ConsumerT, FunctionT > & observer, const ValueT & value)"
|
|
|
|
.PP
|
|
Edge observers read the numerical value even when its consumer receives an owning handle\&.
|
|
.SS "template<typename InputT, typename ConsumerT, typename ObserverT, typename ValueT> void serif::utils::dependencies::detail::observe_input (ObserverT & , const ValueT & )"
|
|
|
|
.PP
|
|
Unrelated registrations do not observe this edge\&.
|
|
.SS "template<typename KeyT, typename\&.\&.\&. Types> std::size_t serif::utils::dependencies::detail::type_index (\fBtypes::TypeList\fP< Types\&.\&.\&. > )\fR [nodiscard]\fP, \fR [consteval]\fP"
|
|
|
|
.PP
|
|
Locate a type without requiring the types themselves to be constructible\&.
|
|
.SS "template<typename BeforeT, typename AfterT, typename\&.\&.\&. Keys> bool serif::utils::dependencies::detail::valid_all_nodes (\fBKeyList\fP< Keys\&.\&.\&. > )\fR [nodiscard]\fP, \fR [consteval]\fP"
|
|
|
|
.PP
|
|
Use a bounded array scan rather than a graph-sized fold expression at the compiler's nesting limit\&.
|
|
.SS "template<typename GraphT, typename BindingsT, typename BeforeT, typename AfterT> bool serif::utils::dependencies::detail::valid_observer (\fBAllNodesObserver\fP< BeforeT, AfterT > * )\fR [nodiscard]\fP, \fR [consteval]\fP"
|
|
|
|
.PP
|
|
A generic callback must accept every node, including constant computations without inputs\&.
|
|
.SS "template<typename GraphT, typename BindingsT, typename InputT, typename ConsumerT, typename FunctionT> bool serif::utils::dependencies::detail::valid_observer (\fBEdgeObserver\fP< InputT, ConsumerT, FunctionT > * )\fR [nodiscard]\fP, \fR [consteval]\fP"
|
|
|
|
.PP
|
|
Use declared inputs to include source edges as well as computed prerequisites\&.
|
|
.SS "template<typename GraphT, typename BindingsT, typename KeyT, typename BeforeT, typename AfterT> bool serif::utils::dependencies::detail::valid_observer (\fBNodeObserver\fP< KeyT, BeforeT, AfterT > * )\fR [nodiscard]\fP, \fR [consteval]\fP"
|
|
|
|
.PP
|
|
Nodes are identified by result keys, including constant computations without inputs\&.
|
|
.SH "Variable Documentation"
|
|
.PP
|
|
.SS "template<typename Source, typename Target> bool serif::utils::dependencies::detail::compatible_error_v = std::same_as<Source, Target>\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.PP
|
|
Ordinary graph failures retain an exact type; numerical conversions must not erase diagnostics\&.
|
|
.SS "template<typename Source, typename\&.\&.\&. Alternatives> bool \fBserif::utils::dependencies::detail::compatible_error_v\fP< Source, std::variant< Alternatives\&.\&.\&. > >\fR [inline]\fP, \fR [constexpr]\fP"
|
|
\fBInitial value:\fP
|
|
.nf
|
|
=
|
|
std::same_as<Source, std::variant<Alternatives\&.\&.\&.>> || ((std::same_as<Source, Alternatives> || \&.\&.\&.) && std::constructible_from<std::variant<Alternatives\&.\&.\&.>, Source>)
|
|
.PP
|
|
.fi
|
|
|
|
.PP
|
|
Independent modules may explicitly aggregate their unchanged failures in an unambiguous tagged union\&.
|
|
.SS "template<typename KeyT, typename KeysT> bool serif::utils::dependencies::detail::contains_key_v = false\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.SS "template<typename KeyT, typename\&.\&.\&. Keys> bool \fBserif::utils::dependencies::detail::contains_key_v\fP< KeyT, \fBKeyList\fP< Keys\&.\&.\&. > > = \fBtype_index\fP<KeyT>(\fBtypes::TypeList\fP<Keys\&.\&.\&.>{}) < sizeof\&.\&.\&.(Keys)\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.SS "template<typename T> bool serif::utils::dependencies::detail::is_observer_v = false\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.SS "template<typename BeforeT, typename AfterT> bool \fBserif::utils::dependencies::detail::is_observer_v\fP< \fBAllNodesObserver\fP< BeforeT, AfterT > > = true\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.SS "template<typename InputT, typename ConsumerT, typename FunctionT> bool \fBserif::utils::dependencies::detail::is_observer_v\fP< \fBEdgeObserver\fP< InputT, ConsumerT, FunctionT > > = true\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.SS "template<typename KeyT, typename BeforeT, typename AfterT> bool \fBserif::utils::dependencies::detail::is_observer_v\fP< \fBNodeObserver\fP< KeyT, BeforeT, AfterT > > = true\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.SS "template<typename RequiredT, typename AvailableT> bool serif::utils::dependencies::detail::key_list_subset_v = false\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.SS "template<typename\&.\&.\&. Keys, typename AvailableT> bool \fBserif::utils::dependencies::detail::key_list_subset_v\fP< \fBKeyList\fP< Keys\&.\&.\&. >, AvailableT >\fR [inline]\fP, \fR [constexpr]\fP"
|
|
\fBInitial value:\fP
|
|
.nf
|
|
= [] {
|
|
constexpr std::array<bool, sizeof\&.\&.\&.(Keys)> available{contains_key_v<Keys, AvailableT>\&.\&.\&.};
|
|
for (const bool present : available) {
|
|
if (!present) { return false; }
|
|
}
|
|
return true;
|
|
}()
|
|
.PP
|
|
.fi
|
|
|
|
.SS "template<typename TimePoint> bool serif::utils::dependencies::detail::node_time_point_v = false\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.SS "template<typename Clock, typename Duration> bool \fBserif::utils::dependencies::detail::node_time_point_v\fP< std::chrono::time_point< Clock, Duration > > = std::is_arithmetic_v<typename Duration::rep>\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.SS "template<typename ObserverT, typename KeyT> bool serif::utils::dependencies::detail::observes_node_v = false\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.SS "template<typename BeforeT, typename AfterT, typename KeyT> bool \fBserif::utils::dependencies::detail::observes_node_v\fP< \fBAllNodesObserver\fP< BeforeT, AfterT >, KeyT > = true\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.SS "template<typename KeyT, typename BeforeT, typename AfterT> bool \fBserif::utils::dependencies::detail::observes_node_v\fP< \fBNodeObserver\fP< KeyT, BeforeT, AfterT >, KeyT > = true\fR [inline]\fP, \fR [constexpr]\fP"
|
|
|
|
.SS "template<typename\&.\&.\&. Types> bool serif::utils::dependencies::detail::valid_binding_types_v\fR [inline]\fP, \fR [constexpr]\fP"
|
|
\fBInitial value:\fP
|
|
.nf
|
|
= [] {
|
|
constexpr std::array<bool, sizeof\&.\&.\&.(Types)> valid{IsBinding<Types>\&.\&.\&.};
|
|
for (const bool binding : valid) {
|
|
if (!binding) { return false; }
|
|
}
|
|
return true;
|
|
}()
|
|
.PP
|
|
.fi
|
|
|
|
.PP
|
|
Validate each binding without an implicit constraint fold proportional to the collection size\&.
|
|
.SS "template<typename ComputationT, typename ResultKeysT> bool serif::utils::dependencies::detail::valid_input_ownership_v\fR [inline]\fP, \fR [constexpr]\fP"
|
|
\fBInitial value:\fP
|
|
.nf
|
|
= !std::remove_cvref_t<ComputationT>::owns_inputs ||
|
|
key_list_subset_v<typename std::remove_cvref_t<ComputationT>::Inputs, ResultKeysT>
|
|
.PP
|
|
.fi
|
|
|
|
.PP
|
|
Owning nodes can retain computed inputs; context resources remain borrowed\&.
|
|
.SH "Author"
|
|
.PP
|
|
Generated automatically by Doxygen for SERiF from the source code\&.
|