#ifndef __STG_STGLIBS_BLOCK_IO_H__
#define __STG_STGLIBS_BLOCK_IO_H__

#include <vector>

#include <sys/uio.h>

namespace STG
{

typedef std::vector<iovec> IOVec;

class BlockReader
{
    public:
        BlockReader(const IOVec& ioVec);

        bool read(int socket);
        bool done() const { return m_remainder == 0; }
        size_t remainder() const { return m_remainder; }

    private:
        IOVec m_dest;
        size_t m_remainder;
};

class BlockWriter
{
    public:
        BlockWriter(const IOVec& ioVec);

        bool write(int socket);
        bool done() const { return m_remainder == 0; }
        size_t remainder() const { return m_remainder; }

    private:
        IOVec m_source;
        size_t m_remainder;
};

} // namespace STG

#endif