12#include <pybind11/pybind11.h>
13#include <pybind11/stl.h>
15namespace py = pybind11;
16using namespace pybind11::literals;
26 py::class_<Fragment> py_fragment(m,
"Fragment", py::buffer_protocol());
28 py_fragment.def(
"get_header", &
Fragment::get_header, py::return_value_policy::reference_internal)
45 "get_data", [](
Fragment& self,
size_t offset) {
return static_cast<void*
>(
static_cast<char*
>(self.
get_data()) +
offset); },
"offset"_a = 0, py::return_value_policy::reference_internal)
50 throw std::runtime_error(
"Fragment.get_data_bytes: offset exceeds fragment size.");
53 return py::bytes(
reinterpret_cast<char*
>(self->
get_data()) +
offset, bytes_size);
56 py::return_value_policy::reference_internal);
58 py::enum_<Fragment::BufferAdoptionMode>(py_fragment,
"BufferAdoptionMode")
64 py::class_<FragmentHeader>(m,
"FragmentHeader")
65 .def_property_readonly(
66 "fragment_header_marker",
67 [](
const FragmentHeader& self) -> uint32_t {
return self.fragment_header_marker; })
68 .def_property_readonly(
69 "version", [](
const FragmentHeader& self) -> uint32_t {
return self.version; })
71 .def_property_readonly(
"trigger_number",
73 .def_property_readonly(
"trigger_timestamp",
78 .def_property_readonly(
79 "error_bits", [](
const FragmentHeader& self) -> uint32_t {
return self.error_bits; })
80 .def_property_readonly(
"fragment_type",
82 .def_property_readonly(
"sequence_number",
84 .def_property_readonly(
"detector_id", [](
const FragmentHeader& self) -> uint16_t {
return self.detector_id; })
85 .def_property_readonly(
"element_id", [](
const FragmentHeader& self) ->
SourceID {
return self.element_id; })
88 py::enum_<FragmentErrorBits>(m,
"FragmentErrorBits")
95 py::enum_<FragmentType>(m,
"FragmentType")