stephensolis/kameris-formats

View on GitHub
cpp/common/binary_io.hpp

Summary

Maintainability
Test Coverage
#ifndef _KAMERIS_FORMATS_COMMON_BINARY_IO_
#define _KAMERIS_FORMATS_COMMON_BINARY_IO_

#include <istream>
#include <ostream>

#include "storage_encoding.hpp"

namespace kameris {
    template <typename T>
    inline void read_binary_raw(std::istream &stream, T &target) {
        stream.read(reinterpret_cast<char *>(&target), sizeof(T)); // NOLINT
    }

    template <typename T>
    inline void read_binary(std::istream &stream, T &target) {
        storage_encoding_t<T> val;
        read_binary_raw(stream, val);
        target = from_storage_encoding<T>(val); // NOLINT
    }

    template <typename T>
    inline void write_binary_raw(std::ostream &stream, const T &data) {
        stream.write(reinterpret_cast<const char *>(&data), sizeof(T)); // NOLINT
    }

    template <typename T>
    inline void write_binary(std::ostream &stream, const T &data) {
        write_binary_raw(stream, to_storage_encoding(data));
    }
}

#endif