30 template<
typename ConcreteOutputExtractor>
32 m_Output{std::make_shared<ConcreteOutputExtractor>(std::forward<ConcreteOutputExtractor>(output))}
41 return m_Output->getOutputValueExtractor(component);
45 requires std::constructible_from<T, osc::Variant&&>
48 return m_Output->getValue<T>(component, state);
51 template<
typename T, std::ranges::forward_range R>
53 std::constructible_from<T, osc::Variant&&> and
57 const OpenSim::Component& component,
59 const std::function<
void(T)>& consumer)
const
61 return m_Output->getValues<T>(component, states, consumer);
64 template<
typename T, std::ranges::forward_range R>
66 std::constructible_from<T, osc::Variant&&> and
69 std::vector<T>
slurpValues(
const OpenSim::Component& component,
const R& states)
const
71 return m_Output->slurpValues<T>(component, states);
74 size_t getHash()
const {
return m_Output->getHash(); }
82 return *lhs.m_Output == *rhs.m_Output;
88 std::shared_ptr<const OutputExtractor> m_Output;
std::ostream & operator<<(std::ostream &out, const DataFrame &data_frame)
Writes a pretty-printed representation of data_frame to out.