#ifndef MSP_IO_HANDLE_H_
#define MSP_IO_HANDLE_H_
+#include <cstddef>
+#include <msp/core/mspcore_api.h>
+
namespace Msp {
namespace IO {
-class Handle
+class MSPCORE_API Handle
{
public:
struct Private;
private:
- Private *priv;
+ Private *priv = nullptr;
public:
Handle();
Private &operator*() { return *priv; }
const Private &operator*() const { return *priv; }
- /** This is effectively a boolean conversion, but avoids accidental
- conversion to OS native handles. Unix-based systems use int and win32 uses
- void *; const void * is not implicitly convertible to either. */
- operator const void *() const;
+ explicit operator bool() const;
};
+
+void sys_set_blocking(Handle &, bool);
+void sys_set_inherit(Handle &, bool);
+std::size_t sys_read(Handle &, char *, std::size_t);
+std::size_t sys_write(Handle &, const char *, std::size_t);
+void sys_close(Handle &);
+
} // namespace IO
} // namespace Msp