From 047ce94899e24ea7ab52cff39d362d340b7d1291 Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Fri, 2 Mar 2018 11:23:46 +0100 Subject: [PATCH] Add Jungfrau header data type --- conda-recipe/meta.yaml | 2 +- src/ZmqReceiver.cpp | 41 +++++++++++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/conda-recipe/meta.yaml b/conda-recipe/meta.yaml index 37410a3..7059cce 100644 --- a/conda-recipe/meta.yaml +++ b/conda-recipe/meta.yaml @@ -1,6 +1,6 @@ package: name: lib_cpp_h5_writer - version: 0.0.2 + version: 0.0.3 build: number: 0 diff --git a/src/ZmqReceiver.cpp b/src/ZmqReceiver.cpp index 8d2056a..bcca82e 100644 --- a/src/ZmqReceiver.cpp +++ b/src/ZmqReceiver.cpp @@ -74,34 +74,55 @@ pair, char*> ZmqReceiver::receive() shared_ptr ZmqReceiver::get_value_from_json(const pt::ptree& json_header, const string& name, const string& type) { if (type == "uint8") { - return shared_ptr(reinterpret_cast(new uint8_t(json_header.get(name)))); + return shared_ptr(reinterpret_cast(new uint8_t(json_header.get(name))), default_delete()); } else if (type == "uint16") { - return shared_ptr(reinterpret_cast(new uint16_t(json_header.get(name)))); + return shared_ptr(reinterpret_cast(new uint16_t(json_header.get(name))), default_delete()); } else if (type == "uint32") { - return shared_ptr(reinterpret_cast(new uint32_t(json_header.get(name)))); + return shared_ptr(reinterpret_cast(new uint32_t(json_header.get(name))), default_delete()); } else if (type == "uint64") { - return shared_ptr(reinterpret_cast(new uint64_t(json_header.get(name)))); + return shared_ptr(reinterpret_cast(new uint64_t(json_header.get(name))), default_delete()); } else if (type == "int8") { - return shared_ptr(reinterpret_cast(new int8_t(json_header.get(name)))); + return shared_ptr(reinterpret_cast(new int8_t(json_header.get(name))), default_delete()); } else if (type == "int16") { - return shared_ptr(reinterpret_cast(new int16_t(json_header.get(name)))); + return shared_ptr(reinterpret_cast(new int16_t(json_header.get(name))), default_delete()); } else if (type == "int32") { - return shared_ptr(reinterpret_cast(new int32_t(json_header.get(name)))); + return shared_ptr(reinterpret_cast(new int32_t(json_header.get(name))), default_delete()); } else if (type == "int64") { - return shared_ptr(reinterpret_cast(new int64_t(json_header.get(name)))); + return shared_ptr(reinterpret_cast(new int64_t(json_header.get(name))), default_delete()); } else if (type == "float32") { - return shared_ptr(reinterpret_cast(new float(json_header.get(name)))); + return shared_ptr(reinterpret_cast(new float(json_header.get(name))), default_delete()); } else if (type == "float64") { - return shared_ptr(reinterpret_cast(new double(json_header.get(name)))); + return shared_ptr(reinterpret_cast(new double(json_header.get(name))), default_delete()); + + // TODO: This is so ugly I cannot even talk about it. Remove after production panic is over. + } else if (type == "JF4.5M_header") { + + // 8 bytes (int64) * 9 values + char* buffer = new char[72]; + + size_t index = 0; + + for (const auto& item : json_header.get_child(name)) { + + auto value = item.second.get_value(); + char* value_buffer = reinterpret_cast(&value); + + // 8 bytes per value. + memcpy(buffer + (index * 8), value_buffer, 8); + + ++index; + } + + return shared_ptr(buffer, default_delete()); } else { // We cannot really convert this attribute.