From 489736d23b90b2bfe7331696962406cba46f3061 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Tue, 7 Nov 2017 21:39:18 -0600 Subject: [PATCH] Add an optional sizeOut parameter to Metal Claw write --- src/ox/mc/write.cpp | 4 ++++ src/ox/mc/write.hpp | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/ox/mc/write.cpp b/src/ox/mc/write.cpp index cf214d0e1..7b691019c 100644 --- a/src/ox/mc/write.cpp +++ b/src/ox/mc/write.cpp @@ -51,4 +51,8 @@ void MetalClawWriter::setFields(int fields) { m_fieldPresence.setMaxLen(m_buffIt); } +size_t MetalClawWriter::size() { + return m_buffIt; +} + } diff --git a/src/ox/mc/write.hpp b/src/ox/mc/write.hpp index ccaabd154..875558f0a 100644 --- a/src/ox/mc/write.hpp +++ b/src/ox/mc/write.hpp @@ -49,6 +49,8 @@ class MetalClawWriter { void setFields(int fields); + size_t size(); + private: template int appendInteger(I val); @@ -144,9 +146,13 @@ int MetalClawWriter::op(const char*, T *val, size_t len) { }; template -int write(uint8_t *buff, size_t buffLen, T *val) { +int write(uint8_t *buff, size_t buffLen, T *val, size_t *sizeOut = nullptr) { MetalClawWriter writer(buff, buffLen); - return ioOp(&writer, val); + auto err = ioOp(&writer, val); + if (sizeOut) { + *sizeOut = writer.size(); + } + return err; } }