Skip to content

Commit

Permalink
Return py::object in the Binout read method on macos
Browse files Browse the repository at this point in the history
  • Loading branch information
PucklaJ committed Feb 22, 2024
1 parent ac92e3f commit 3083dad
Showing 1 changed file with 33 additions and 23 deletions.
56 changes: 33 additions & 23 deletions src/python/pybind11_binout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,15 @@

namespace py = pybind11;

#ifdef __APPLE__
template <typename T> inline py::object read_return(T arr) noexcept {
return py::cast(std::move(arr));
}

py::object
#else
template <typename T> inline T read_return(T arr) noexcept { return arr; }

std::variant<dro::Array<int8_t>, dro::Array<int16_t>, dro::Array<int32_t>,
dro::Array<int64_t>, dro::Array<uint8_t>, dro::Array<uint16_t>,
dro::Array<uint32_t>, dro::Array<uint64_t>, dro::Array<float>,
Expand All @@ -43,6 +52,7 @@ std::variant<dro::Array<int8_t>, dro::Array<int16_t>, dro::Array<int32_t>,
std::vector<dro::Array<uint32_t>>,
std::vector<dro::Array<uint64_t>>, std::vector<dro::Array<float>>,
std::vector<dro::Array<double>>, std::vector<dro::String>>
#endif
Binout_read(dro::Binout &self, std::string path) {
dro::BinoutType type_id;
bool timed;
Expand All @@ -53,25 +63,25 @@ Binout_read(dro::Binout &self, std::string path) {

switch (type_id) {
case dro::BinoutType::Int8:
return self.read_timed<int8_t>(real_path);
return read_return(std::move(self.read_timed<int8_t>(real_path)));
case dro::BinoutType::Int16:
return self.read_timed<int16_t>(real_path);
return read_return(std::move(self.read_timed<int16_t>(real_path)));
case dro::BinoutType::Int32:
return self.read_timed<int32_t>(real_path);
return read_return(std::move(self.read_timed<int32_t>(real_path)));
case dro::BinoutType::Int64:
return self.read_timed<int64_t>(real_path);
return read_return(std::move(self.read_timed<int64_t>(real_path)));
case dro::BinoutType::Uint8:
return self.read_timed<uint8_t>(real_path);
return read_return(std::move(self.read_timed<uint8_t>(real_path)));
case dro::BinoutType::Uint16:
return self.read_timed<uint16_t>(real_path);
return read_return(std::move(self.read_timed<uint16_t>(real_path)));
case dro::BinoutType::Uint32:
return self.read_timed<uint32_t>(real_path);
return read_return(std::move(self.read_timed<uint32_t>(real_path)));
case dro::BinoutType::Uint64:
return self.read_timed<uint64_t>(real_path);
return read_return(std::move(self.read_timed<uint64_t>(real_path)));
case dro::BinoutType::Float32:
return self.read_timed<float>(real_path);
return read_return(std::move(self.read_timed<float>(real_path)));
case dro::BinoutType::Float64:
return self.read_timed<double>(real_path);
return read_return(std::move(self.read_timed<double>(real_path)));
default:
error_buffer = (char *)malloc(1024);
sprintf(error_buffer,
Expand All @@ -83,25 +93,25 @@ Binout_read(dro::Binout &self, std::string path) {
} else {
switch (type_id) {
case dro::BinoutType::Int8:
return self.read<int8_t>(real_path);
return read_return(std::move(self.read<int8_t>(real_path)));
case dro::BinoutType::Int16:
return self.read<int16_t>(real_path);
return read_return(std::move(self.read<int16_t>(real_path)));
case dro::BinoutType::Int32:
return self.read<int32_t>(real_path);
return read_return(std::move(self.read<int32_t>(real_path)));
case dro::BinoutType::Int64:
return self.read<int64_t>(real_path);
return read_return(std::move(self.read<int64_t>(real_path)));
case dro::BinoutType::Uint8:
return self.read<uint8_t>(real_path);
return read_return(std::move(self.read<uint8_t>(real_path)));
case dro::BinoutType::Uint16:
return self.read<uint16_t>(real_path);
return read_return(std::move(self.read<uint16_t>(real_path)));
case dro::BinoutType::Uint32:
return self.read<uint32_t>(real_path);
return read_return(std::move(self.read<uint32_t>(real_path)));
case dro::BinoutType::Uint64:
return self.read<uint64_t>(real_path);
return read_return(std::move(self.read<uint64_t>(real_path)));
case dro::BinoutType::Float32:
return self.read<float>(real_path);
return read_return(std::move(self.read<float>(real_path)));
case dro::BinoutType::Float64:
return self.read<double>(real_path);
return read_return(std::move(self.read<double>(real_path)));
default:
// If the type is invalid it's likely to be a folder and then the children
// should be returned
Expand All @@ -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));
}
}
}
Expand Down Expand Up @@ -194,4 +204,4 @@ void add_binout_library_to_module(py::module_ &m) {
py::arg("path"))

;
}
}

0 comments on commit 3083dad

Please sign in to comment.