diff --git a/deps/ox/OxConfig.cmake b/deps/ox/OxConfig.cmake index 6312e31c..e908c543 100644 --- a/deps/ox/OxConfig.cmake +++ b/deps/ox/OxConfig.cmake @@ -3,9 +3,10 @@ if("${CMAKE_FIND_ROOT_PATH}" STREQUAL "") set(OxStd_LIBRARY /usr/local/lib/ox/libOxStd.a) set(OxFS_LIBRARY /usr/local/lib/ox/libOxFS.a) set(OxClArgs_LIBRARY /usr/local/lib/ox/libOxClArgs.a) + set(OxMetalClaw /usr/local/lib/ox/libOxMetalClaw.a) else("${CMAKE_FIND_ROOT_PATH}" STREQUAL "") set(Ox_INCLUDE_DIRS ${CMAKE_FIND_ROOT_PATH}/include/) set(OxStd_LIBRARY ${CMAKE_FIND_ROOT_PATH}/lib/ox/libOxStd.a) set(OxFS_LIBRARY ${CMAKE_FIND_ROOT_PATH}/lib/ox/libOxFS.a) - set(OxClArgs_LIBRARY ${CMAKE_FIND_ROOT_PATH}/lib/ox/libOxClArgs.a) + set(OxMetalClaw ${CMAKE_FIND_ROOT_PATH}/lib/ox/libOxMetalClaw.a) endif("${CMAKE_FIND_ROOT_PATH}" STREQUAL "") diff --git a/deps/ox/deps/ox/src/ox/mc/optype.hpp b/deps/ox/deps/ox/src/ox/mc/optype.hpp new file mode 100644 index 00000000..7e3b96c6 --- /dev/null +++ b/deps/ox/deps/ox/src/ox/mc/optype.hpp @@ -0,0 +1,27 @@ +/* + * Copyright 2015 - 2017 gtalent2@gmail.com + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +namespace ox { + +enum class OpType { + Read = 0, + Write = 1 +}; + +template +ox::Error ioOp(T *io, O *obj) { + if (io->opType() == ox::OpType::Read) { + return ioOpRead(io, obj); + } else { + return ioOpWrite(io, obj); + } +} + +} diff --git a/deps/ox/src/ox/mc/read.cpp b/deps/ox/src/ox/mc/read.cpp index cd21038d..16b6bc4a 100644 --- a/deps/ox/src/ox/mc/read.cpp +++ b/deps/ox/src/ox/mc/read.cpp @@ -17,6 +17,10 @@ MetalClawReader::MetalClawReader(uint8_t *buff, size_t buffLen): m_fieldPresence m_buffLen = buffLen; } +int MetalClawReader::op(const char*, int8_t *val) { + return readInteger(val); +} + int MetalClawReader::op(const char*, int16_t *val) { return readInteger(val); } @@ -29,6 +33,11 @@ int MetalClawReader::op(const char*, int64_t *val) { return readInteger(val); } + +int MetalClawReader::op(const char*, uint8_t *val) { + return readInteger(val); +} + int MetalClawReader::op(const char*, uint16_t *val) { return readInteger(val); } diff --git a/deps/ox/src/ox/mc/read.hpp b/deps/ox/src/ox/mc/read.hpp index 7a155c71..3b8d27e4 100644 --- a/deps/ox/src/ox/mc/read.hpp +++ b/deps/ox/src/ox/mc/read.hpp @@ -32,10 +32,12 @@ class MetalClawReader { public: MetalClawReader(uint8_t *buff, size_t buffLen); + int op(const char*, int8_t *val); int op(const char*, int16_t *val); int op(const char*, int32_t *val); int op(const char*, int64_t *val); + int op(const char*, uint8_t *val); int op(const char*, uint16_t *val); int op(const char*, uint32_t *val); int op(const char*, uint64_t *val); diff --git a/deps/ox/src/ox/mc/write.cpp b/deps/ox/src/ox/mc/write.cpp index cf214d0e..65b0bd8f 100644 --- a/deps/ox/src/ox/mc/write.cpp +++ b/deps/ox/src/ox/mc/write.cpp @@ -17,6 +17,10 @@ MetalClawWriter::MetalClawWriter(uint8_t *buff, size_t buffLen): m_fieldPresence m_buffLen = buffLen; } +int MetalClawWriter::op(const char*, int8_t *val) { + return appendInteger(*val); +} + int MetalClawWriter::op(const char*, int16_t *val) { return appendInteger(*val); } @@ -29,6 +33,11 @@ int MetalClawWriter::op(const char*, int64_t *val) { return appendInteger(*val); } + +int MetalClawWriter::op(const char*, uint8_t *val) { + return appendInteger(*val); +} + int MetalClawWriter::op(const char*, uint16_t *val) { return appendInteger(*val); } @@ -51,4 +60,8 @@ void MetalClawWriter::setFields(int fields) { m_fieldPresence.setMaxLen(m_buffIt); } +size_t MetalClawWriter::size() { + return m_buffIt; +} + } diff --git a/deps/ox/src/ox/mc/write.hpp b/deps/ox/src/ox/mc/write.hpp index 8aebf220..1cf497f7 100644 --- a/deps/ox/src/ox/mc/write.hpp +++ b/deps/ox/src/ox/mc/write.hpp @@ -29,10 +29,12 @@ class MetalClawWriter { public: MetalClawWriter(uint8_t *buff, size_t buffLen); + int op(const char*, int8_t *val); int op(const char*, int16_t *val); int op(const char*, int32_t *val); int op(const char*, int64_t *val); + int op(const char*, uint8_t *val); int op(const char*, uint16_t *val); int op(const char*, uint32_t *val); int op(const char*, uint64_t *val); @@ -50,6 +52,8 @@ class MetalClawWriter { void setFields(int fields); + size_t size(); + OpType opType() { return OpType::Write; } @@ -125,7 +129,7 @@ int MetalClawWriter::op(const char*, T *val, size_t len) { // write the length typedef uint32_t ArrayLength; if (m_buffIt + sizeof(ArrayLength) < m_buffLen) { - *((T*) &m_buff[m_buffIt]) = ox::bigEndianAdapt((ArrayLength) len); + *((ArrayLength*) &m_buff[m_buffIt]) = ox::bigEndianAdapt((ArrayLength) len); m_buffIt += sizeof(ArrayLength); } else { err = MC_BUFFENDED; @@ -149,9 +153,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; } }