runtime.hpp string_view serif/discretization/blocks/concepts.hpp src/include/serif/discretization/blocks/blocks.hpp src/include/serif/discretization/forms/runtime.hpp serif::discretization::blocks::FieldDescriptor serif::discretization::blocks::TermDescriptor std::formatter< serif::discretization::blocks::FieldDescriptor > std::formatter< serif::discretization::blocks::TermDescriptor > serif serif::discretization serif::discretization::blocks Runtime descriptors for fields and terms, used to project compile time types into runtime values. Emily M. Boudreaux #pragmaonce #include<string_view> #include"serif/discretization/blocks/concepts.hpp" namespaceserif::discretization::blocks{ structFieldDescriptorfinal{ std::string_viewname; [[nodiscard]]friendconstexprbooloperator==(constFieldDescriptor&,constFieldDescriptor&)noexcept=default; }; structTermDescriptorfinal{ FieldDescriptorfield; std::string_viewname; [[nodiscard]]friendconstexprbooloperator==(constTermDescriptor&,constTermDescriptor&)noexcept=default; }; template<FieldFieldT> inlineconstexprFieldDescriptorfield_descriptor{.name=FieldT::name}; template<TermTermT> inlineconstexprTermDescriptorterm_descriptor{ .field=field_descriptor<typename TermT::field_type>, .name=TermT::name }; } template<> structstd::formatter<serif::discretization::blocks::FieldDescriptor>:std::formatter<std::string_view>{ template<typenameFormatContext> autoformat(constserif::discretization::blocks::FieldDescriptor&fd,FormatContext&ctx)const{ returnstd::formatter<std::string_view>::format(fd.name,ctx); } }; template<> structstd::formatter<serif::discretization::blocks::TermDescriptor>:std::formatter<std::string>{ template<typenameFormatContext> autoformat(constserif::discretization::blocks::TermDescriptor&td,FormatContext&ctx)const{ returnstd::formatter<std::string>::format(std::format("TermDescriptor(field={},name={})",td.field,td.name),ctx); } };