/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */
#ifndef __NIOHANDLE__
#define __NIOHANDLE__
#include "filesystem/io_base.h"
#include "memory/nweak_ptr.h"
namespace GS {
namespace IO {
//
class Handle
{
WeakPtr io_sys;
public:
NPLACEMENT_NEW(Filesystem)
virtual size_t GetSize();
virtual size_t Rewind();
virtual bool IsEOF();
virtual size_t Tell();
virtual size_t Seek(ptrdiff_t, Base::SeekRef = Base::SeekCurrent);
virtual size_t Read(void *, size_t);
virtual size_t Write(const void *, size_t);
template Handle &operator << (const T &v)
{
io_sys->Write(this, &v, sizeof(T));
return *this;
}
template Handle &operator >> (T &v)
{
io_sys->Read(this, &v, sizeof(T));
return *this;
}
Handle &operator << (const char *);
Handle &operator << (char *);
template bool Write(const T &v)
{ return asbool(io_sys->Write(this, &v, sizeof(T))); }
template T Read()
{
T v;
io_sys->Read(this, &v, sizeof(T));
return v;
}
Base *GetIOSystem() const
{ return io_sys.c_ptr(); }
Handle(Base *);
virtual ~Handle();
};
} // IO
} // GS
#endif // __NIOHANDLE__