3 #include "hate/type_traits.h"
4 #include "hate/visibility.h"
7 #if defined(__GENPYBIND__) or defined(__GENPYBIND_GENERATED__)
8 #include <pybind11/pybind11.h>
18 template <
typename Builder,
typename Result>
32 template <
typename Seq>
37 decltype(std::declval<Seq>().
generate()),
39 "Derived class lacks generate() function returning "
40 "PlaybackGeneratorReturn<Seq::Builder, Seq::Result>");
42 return seq.generate();
46 #if defined(__GENPYBIND__) or defined(__GENPYBIND_GENERATED__)
50 struct SYMBOL_VISIBLE PlaybackGenerator
52 virtual pybind11::tuple
generate()
const = 0;
53 virtual ~PlaybackGenerator() = 0;
59 pybind11::tuple py_generate_impl(T
const& seq)
61 using namespace pybind11::literals;
62 auto const [pbp, res] = ::stadls::vx::generate<T>(seq);
63 if constexpr (std::is_same<hate::remove_all_qualifiers_t<decltype(res)>, hate::Nil>::value) {
64 auto tuple = pybind11::make_tuple<pybind11::return_value_policy::move>(
65 std::move(pbp), pybind11::cast<pybind11::none>(Py_None));
68 auto tuple = pybind11::make_tuple<pybind11::return_value_policy::move>(std::move(pbp), res);
#define GENPYBIND_TAG_STADLS_VX
auto generate(Seq const &seq)
Generate function to be called on an object implementing the PlaybackGenerator concept.
Return type of generate() call on playback sequence.