]> git.tdb.fi Git - libs/core.git/blobdiff - source/io/handle.cpp
Add a pimpl Handle class
[libs/core.git] / source / io / handle.cpp
diff --git a/source/io/handle.cpp b/source/io/handle.cpp
new file mode 100644 (file)
index 0000000..d5183e5
--- /dev/null
@@ -0,0 +1,53 @@
+#include "handle.h"
+#include "handle_private.h"
+
+namespace Msp {
+namespace IO {
+
+Handle::Handle():
+       priv(new Private)
+{ }
+
+Handle::Handle(const Handle &other):
+       priv(new Private)
+{
+       priv->handle = other.priv->handle;
+}
+
+Handle &Handle::operator=(const Handle &other)
+{
+       priv->handle = other.priv->handle;
+       return *this;
+}
+
+Handle::~Handle()
+{
+       delete priv;
+}
+
+Handle::operator const void *() const
+{
+#ifdef WIN32
+       return priv->handle!=INVALID_HANDLE_VALUE ? this : 0;
+#else
+       return priv->handle!=-1 ? this : 0;
+#endif
+}
+
+
+Handle::Private::Private():
+#ifdef WIN32
+       handle(INVALID_HANDLE_VALUE)
+#else
+       handle(-1)
+#endif
+{ }
+
+Handle::Private &Handle::Private::operator=(H h)
+{
+       handle = h;
+       return *this;
+}
+
+} // namespace IO
+} // namespace Msp