#ifndef INFOENHANCE_HPP
#define INFOENHANCE_HPP

#include <cereal/archives/binary.hpp>
#include <cereal/types/memory.hpp>
#include <streambuf>

class ZeroCopyInput
{
public:
    ZeroCopyInput(const char* data, size_t size) : streamBuf_(data, size), stream_(&streamBuf_)
    {
    }

    cereal::BinaryInputArchive archive()
    {
        return cereal::BinaryInputArchive(stream_);
    }

private:
    class ConstStreamBuf : public std::streambuf
    {
    public:
        ConstStreamBuf(const char* data, size_t size)
        {
            setg(const_cast<char*>(data), const_cast<char*>(data), const_cast<char*>(data + size));
        }
    };

    ConstStreamBuf streamBuf_;
    std::istream stream_;
};

#endif   // INFOENHANCE_HPP