schema.hpp cstddef type_traits serif/utils/dependencies/dependency_context.hpp serif/utils/dependencies/computation_graph.hpp serif/utils/dependencies/detail/result.hpp src/include/serif/utils/dependencies/detail/cache_traits.hpp serif::utils::dependencies::detail::AppendBinding< Bindings< BindingsTs... >, BindingT > serif::utils::dependencies::detail::ResolveComputation serif::utils::dependencies::detail::ResolveComputation< ComputationT, BindingsT, true > serif::utils::dependencies::detail::ResolveStep serif::utils::dependencies::detail::ResolveStep< GraphT, BindingsT, Position, ComputationT, true > serif::utils::dependencies::detail::ResolveGraph< GraphT, BindingsT, Position, false > serif::utils::dependencies::detail::ResolveGraph< GraphT, BindingsT, Position, true > serif::utils::dependencies::detail::ComputationGraphSchema serif::utils::dependencies::detail::ComputationGraphSchema< GraphT, ContextT, true > serif serif::utils serif::utils::dependencies serif::utils::dependencies::detail #pragmaonce #include<cstddef> #include<type_traits> #include"serif/utils/dependencies/dependency_context.hpp" #include"serif/utils/dependencies/computation_graph.hpp" #include"serif/utils/dependencies/detail/result.hpp" namespaceserif::utils::dependencies::detail{ template<typenameBindingsT,typenameBindingT> structAppendBinding; template<typename...BindingsTs,typenameBindingT> structAppendBinding<Bindings<BindingsTs...>,BindingT>{ usingtype=Bindings<BindingsTs...,BindingT>; }; template<typenameComputationT,typenameBindingsT,boolAvailable=SatisfiesKeyList<BindingsT,typenameComputationT::Inputs>> structResolveComputation{ staticconstexprboolvalid=false; }; template<typenameComputationT,typenameBindingsT> structResolveComputation<ComputationT,BindingsT,true>:Invocation<ComputationT,ResolvedTargets<BindingsT,typenameComputationT::Inputs>> { }; template<typenameGraphT,typenameBindingsT,std::size_tPosition,boolDone=(Position==GraphT::size)> structResolveGraph; template<typenameGraphT,typenameBindingsT,std::size_tPosition,typenameComputationT,boolValid> structResolveStep{ staticconstexprboolvalid=false; }; template<typenameGraphT,typenameBindingsT,std::size_tPosition,typenameComputationT> structResolveStep<GraphT,BindingsT,Position,ComputationT,true>:ResolveGraph<GraphT, typenameAppendBinding<BindingsT,Binding<typenameComputationT::Key,typenameResolveComputation<ComputationT,BindingsT>::Value>>::type, Position+1>{}; template<typenameGraphT,typenameBindingsT,std::size_tPosition> structResolveGraph<GraphT,BindingsT,Position,false>:ResolveStep<GraphT,BindingsT,Position, typenameGraphT::templateComputationAt<GraphT::Dependencies::order[Position]>, ResolveComputation<typenameGraphT::templateComputationAt<GraphT::Dependencies::order[Position]>,BindingsT>::valid>{}; template<typenameGraphT,typenameBindingsT,std::size_tPosition> structResolveGraph<GraphT,BindingsT,Position,true>{ staticconstexprboolvalid=true; usingResolvedBindings=BindingsT; }; template<typenameBindingsT,typename...Keys> [[nodiscard]]constevalboolindependent_results(KeyList<Keys...>){ return(!has_binding_v<BindingsT, Keys>&&...); } template<typenameGraphT,typenameContextT,boolIndependent=independent_results<typenameContextT::Bindings>(typenameGraphT::Results{})> structComputationGraphSchema{ staticconstexprboolvalid=false; }; template<typenameGraphT,typenameContextT> structComputationGraphSchema<GraphT,ContextT,true>:ResolveGraph<GraphT,typenameContextT::Bindings,0>{}; } namespaceserif::utils::dependencies{ template<typenameGraphT,typenameContextT> conceptComputationGraphFor=IsComputationGraph<GraphT>&&IsDependencyContext<ContextT>&& detail::ComputationGraphSchema<std::remove_cvref_t<GraphT>,std::remove_cvref_t<ContextT>>::valid; }