cache_storage.hpp array cstddef cstdint memory tuple utility serif/utils/dependencies/detail/cache_traits.hpp src/include/serif/utils/dependencies/computation_cache.hpp serif::utils::dependencies::detail::SourceSnapshot serif::utils::dependencies::detail::CachedResult serif::utils::dependencies::detail::ComputationCacheStorage< GraphT, BindingsT, types::TypeList< Resources... >, std::index_sequence< Indices... > > serif serif::utils serif::utils::dependencies serif::utils::dependencies::detail #pragmaonce #include<array> #include<cstddef> #include<cstdint> #include<memory> #include<tuple> #include<utility> #include"serif/utils/dependencies/detail/cache_traits.hpp" namespaceserif::utils::dependencies::detail{ template<typenameResourceT> structSourceSnapshot{ usingCaptured=decltype(std::declval<consttypenameResourceT::Policy&>().capture(std::declval<consttypenameResourceT::Target&>())); constvoid*identity{nullptr}; std::shared_ptr<constCaptured>captured; }; template<typenameValueT,std::size_tInputCount> structCachedResult{ std::shared_ptr<constValueT>value; std::array<std::uint64_t,InputCount>input_versions{}; }; template<typenameGraphT,typenameBindingsT,typenameResourcesT,typenameIndicesT> structComputationCacheStorage; //Sharedimmutableobjectsmakecandidatepreparationcheaptostageandsafetodiscardonfailure. template<typenameGraphT,typenameBindingsT,typename...Resources,std::size_t...Indices> structComputationCacheStorage<GraphT,BindingsT,types::TypeList<Resources...>,std::index_sequence<Indices...>>{ std::tuple<SourceSnapshot<Resources>...>sources; std::tuple<CachedResult<bound_type_t<BindingsT,typenameGraphT::templateComputationAt<Indices>::Key>, KeyListSize<typename GraphT::template ComputationAt<Indices>::Inputs>::value>...>results; std::array<std::uint64_t,sizeof...(Resources)+sizeof...(Indices)>versions{}; }; }