Revert "Bypass alignment related copy whenever possible (#1443)"
This reverts commit 235d4f8957ee4566d6217783638fa58a586bb35a.
old-commit-hash: d5ca841b0f
commatwo_master
parent
004c0e277b
commit
16cbb5e255
10 changed files with 121 additions and 95 deletions
@ -1,42 +0,0 @@ |
|||||||
#pragma once |
|
||||||
#include <capnp/serialize.h> |
|
||||||
|
|
||||||
#include "cereal/gen/cpp/log.capnp.h" |
|
||||||
#include "messaging.hpp" |
|
||||||
class MessageReader { |
|
||||||
public: |
|
||||||
MessageReader(Message *msg) : msg(msg), buf(nullptr), msg_reader(nullptr) {} |
|
||||||
~MessageReader() { |
|
||||||
if (msg_reader) delete msg_reader; |
|
||||||
if (buf) free(buf); |
|
||||||
if (msg) delete msg; |
|
||||||
} |
|
||||||
inline operator bool() { return msg != NULL; } |
|
||||||
inline const char* getData() { return msg->getData(); } |
|
||||||
inline size_t getSize() { return msg->getSize(); } |
|
||||||
cereal::Event::Reader &getEvent() { |
|
||||||
if (!msg_reader) { |
|
||||||
msg_reader = newReader(); |
|
||||||
event = msg_reader->getRoot<cereal::Event>(); |
|
||||||
} |
|
||||||
return event; |
|
||||||
} |
|
||||||
|
|
||||||
private: |
|
||||||
capnp::FlatArrayMessageReader *newReader() { |
|
||||||
const char *data = msg->getData(); |
|
||||||
const size_t size = msg->getSize(); |
|
||||||
if (((reinterpret_cast<uintptr_t>(data)) % sizeof(capnp::word) == 0) && size % sizeof(capnp::word) == 0) { |
|
||||||
return new capnp::FlatArrayMessageReader(kj::ArrayPtr<capnp::word>((capnp::word *)data, size / sizeof(capnp::word))); |
|
||||||
} else { |
|
||||||
const size_t words = size / sizeof(capnp::word) + 1; |
|
||||||
buf = (capnp::word *)malloc(words * sizeof(capnp::word)); |
|
||||||
memcpy(buf, data, size); |
|
||||||
return new capnp::FlatArrayMessageReader(kj::ArrayPtr<capnp::word>(buf, words)); |
|
||||||
} |
|
||||||
} |
|
||||||
capnp::word *buf; |
|
||||||
Message *msg; |
|
||||||
capnp::FlatArrayMessageReader *msg_reader; |
|
||||||
cereal::Event::Reader event; |
|
||||||
}; |
|
Loading…
Reference in new issue