diff --git a/src/python/pybind11_binout.cpp b/src/python/pybind11_binout.cpp index a9034c0..ed177c4 100644 --- a/src/python/pybind11_binout.cpp +++ b/src/python/pybind11_binout.cpp @@ -33,6 +33,15 @@ namespace py = pybind11; +#ifdef __APPLE__ +template inline py::object read_return(T arr) noexcept { + return py::cast(std::move(arr)); +} + +py::object +#else +template inline T read_return(T arr) noexcept { return arr; } + std::variant, dro::Array, dro::Array, dro::Array, dro::Array, dro::Array, dro::Array, dro::Array, dro::Array, @@ -43,6 +52,7 @@ std::variant, dro::Array, dro::Array, std::vector>, std::vector>, std::vector>, std::vector>, std::vector> +#endif Binout_read(dro::Binout &self, std::string path) { dro::BinoutType type_id; bool timed; @@ -53,25 +63,25 @@ Binout_read(dro::Binout &self, std::string path) { switch (type_id) { case dro::BinoutType::Int8: - return self.read_timed(real_path); + return read_return(std::move(self.read_timed(real_path))); case dro::BinoutType::Int16: - return self.read_timed(real_path); + return read_return(std::move(self.read_timed(real_path))); case dro::BinoutType::Int32: - return self.read_timed(real_path); + return read_return(std::move(self.read_timed(real_path))); case dro::BinoutType::Int64: - return self.read_timed(real_path); + return read_return(std::move(self.read_timed(real_path))); case dro::BinoutType::Uint8: - return self.read_timed(real_path); + return read_return(std::move(self.read_timed(real_path))); case dro::BinoutType::Uint16: - return self.read_timed(real_path); + return read_return(std::move(self.read_timed(real_path))); case dro::BinoutType::Uint32: - return self.read_timed(real_path); + return read_return(std::move(self.read_timed(real_path))); case dro::BinoutType::Uint64: - return self.read_timed(real_path); + return read_return(std::move(self.read_timed(real_path))); case dro::BinoutType::Float32: - return self.read_timed(real_path); + return read_return(std::move(self.read_timed(real_path))); case dro::BinoutType::Float64: - return self.read_timed(real_path); + return read_return(std::move(self.read_timed(real_path))); default: error_buffer = (char *)malloc(1024); sprintf(error_buffer, @@ -83,25 +93,25 @@ Binout_read(dro::Binout &self, std::string path) { } else { switch (type_id) { case dro::BinoutType::Int8: - return self.read(real_path); + return read_return(std::move(self.read(real_path))); case dro::BinoutType::Int16: - return self.read(real_path); + return read_return(std::move(self.read(real_path))); case dro::BinoutType::Int32: - return self.read(real_path); + return read_return(std::move(self.read(real_path))); case dro::BinoutType::Int64: - return self.read(real_path); + return read_return(std::move(self.read(real_path))); case dro::BinoutType::Uint8: - return self.read(real_path); + return read_return(std::move(self.read(real_path))); case dro::BinoutType::Uint16: - return self.read(real_path); + return read_return(std::move(self.read(real_path))); case dro::BinoutType::Uint32: - return self.read(real_path); + return read_return(std::move(self.read(real_path))); case dro::BinoutType::Uint64: - return self.read(real_path); + return read_return(std::move(self.read(real_path))); case dro::BinoutType::Float32: - return self.read(real_path); + return read_return(std::move(self.read(real_path))); case dro::BinoutType::Float64: - return self.read(real_path); + return read_return(std::move(self.read(real_path))); default: // If the type is invalid it's likely to be a folder and then the children // should be returned @@ -123,9 +133,9 @@ Binout_read(dro::Binout &self, std::string path) { return strcmp(lhs.data(), rhs.data()) < 0; }); - return metadata_children; + return read_return(std::move(metadata_children)); } - return children; + return read_return(std::move(children)); } } } @@ -194,4 +204,4 @@ void add_binout_library_to_module(py::module_ &m) { py::arg("path")) ; -} \ No newline at end of file +}