From 2a00a1669eb8ca7612b1f6c7eb94eae9ea69dced Mon Sep 17 00:00:00 2001 From: Julien Le Dem Date: Mon, 8 Aug 2016 11:23:16 -0700 Subject: [PATCH] autodetect endianness --- cpp/src/arrow/ipc/metadata-internal.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/cpp/src/arrow/ipc/metadata-internal.cc b/cpp/src/arrow/ipc/metadata-internal.cc index 7c7dc6ba10f02..a38b05610f755 100644 --- a/cpp/src/arrow/ipc/metadata-internal.cc +++ b/cpp/src/arrow/ipc/metadata-internal.cc @@ -262,11 +262,21 @@ Status MessageBuilder::SetSchema(const Schema* schema) { return Status::OK(); } +// will return the endianness of the system we are running on +flatbuf::Endianness endianness(void) { + union { + uint32_t i; + char c[4]; + } bint = {0x01020304}; + + return bint.c[0] == 1 ? flatbuf::Endianness_Big : flatbuf::Endianness_Little; +} + Status MessageBuilder::SetRecordBatch(int32_t length, int64_t body_length, const std::vector& nodes, const std::vector& buffers) { header_type_ = flatbuf::MessageHeader_RecordBatch; - header_ = flatbuf::CreateRecordBatch(fbb_, length, flatbuf::Endianness_Little, + header_ = flatbuf::CreateRecordBatch(fbb_, length, endianness(), fbb_.CreateVectorOfStructs(nodes), fbb_.CreateVectorOfStructs(buffers)) .Union();