Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions .github/workflows/add_to_project.yml

This file was deleted.

2 changes: 1 addition & 1 deletion include/bmi_serialization.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ extern "C" {
#include "bmi.h"

int free_serialized_cfe(Bmi* bmi);
int load_serialized_cfe(Bmi* bmi, const char* data);
int load_serialized_cfe(Bmi* bmi, char* data);
int new_serialized_cfe(Bmi* bmi);

#ifdef __cplusplus
Expand Down
12 changes: 11 additions & 1 deletion include/vecbuf.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,17 @@ class vecbuf : public std::basic_streambuf<CharT> {
// Forwarder for std::vector::clear()
constexpr void clear() { vector_.clear(); }

// Forwarder for std::vector::resize(size)
constexpr void resize(size_type size) { vector_.resize(size); }

// Forwarder for std::vector::reserve
constexpr void reserve(size_type capacity) { vector_.reserve(capacity); setp_from_vector(); }

// Increase the capacity of the buffer by reserving the current_size + additional_capacity
constexpr void reserve_additional(size_type additional_capacity) { reserve(size() + additional_capacity); }

// Forwarder for std::vector::data
constexpr const value_type* data() const { return vector_.data(); }
constexpr value_type* data() { return vector_.data(); }

// Forwarder for std::vector::size
constexpr size_type size() const { return vector_.size(); }
Expand Down Expand Up @@ -112,4 +115,11 @@ class vecbuf : public std::basic_streambuf<CharT> {

};

class membuf : public std::streambuf {
public:
membuf(char *begin, size_t size) {
this->setg(begin, begin, begin + size);
}
};

#endif
13 changes: 9 additions & 4 deletions src/bmi_serialization.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,12 @@ int free_serialized_cfe(Bmi* bmi) {
return BMI_SUCCESS;
}

int load_serialized_cfe(Bmi* bmi, const char* data) {
int load_serialized_cfe(Bmi* bmi, char* data) {
CfeSerializer serializer(bmi);
std::istringstream stream(data);
// get size of data from header
uint64_t size;
memcpy(&size, data, sizeof(uint64_t));
membuf stream(data + sizeof(uint64_t), size);
boost::archive::binary_iarchive archive(stream);
try {
archive >> serializer;
Expand Down Expand Up @@ -146,7 +149,8 @@ int new_serialized_cfe(Bmi* bmi) {
free(model->serialized);
}
// set size and allocate memory
model->serialized_length = stream.size();
uint64_t serialized_size = stream.size();
model->serialized_length = sizeof(uint64_t) + serialized_size;
model->serialized = (char*)malloc(model->serialized_length);
// make sure memory could be allocated
if (model->serialized == NULL) {
Expand All @@ -155,7 +159,8 @@ int new_serialized_cfe(Bmi* bmi) {
return BMI_FAILURE;
}
// copy stream data to new allocation
memcpy(model->serialized, stream.data(), model->serialized_length);
memcpy(model->serialized, &serialized_size, sizeof(uint64_t));
memcpy(model->serialized + sizeof(uint64_t), stream.data(), serialized_size);
return BMI_SUCCESS;
}

Expand Down