From 502e94f7d4a3af79037faa373ee55a58c6fc8bb8 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Tue, 30 Sep 2014 23:07:19 +0200
Subject: [PATCH] Void datatype

---
 alib2data/src/object/Void.cpp | 54 +++++++++++++++++++++++++++++++++++
 alib2data/src/object/Void.h   | 51 +++++++++++++++++++++++++++++++++
 2 files changed, 105 insertions(+)
 create mode 100644 alib2data/src/object/Void.cpp
 create mode 100644 alib2data/src/object/Void.h

diff --git a/alib2data/src/object/Void.cpp b/alib2data/src/object/Void.cpp
new file mode 100644
index 0000000000..4c86fe19fa
--- /dev/null
+++ b/alib2data/src/object/Void.cpp
@@ -0,0 +1,54 @@
+/*
+ * Void.cpp
+ *
+ *  Created on: Mar 26, 2013
+ *      Author: Jan Travnicek
+ */
+
+#include "Void.h"
+
+namespace alib {
+
+Void::Void() {
+
+}
+
+ObjectBase* Void::clone() const {
+	return new Void(*this);
+}
+
+ObjectBase* Void::plunder() && {
+	return new Void(std::move(*this));
+}
+
+bool Void::operator <(const ObjectBase& other) const {
+	return other > *this;
+}
+
+bool Void::operator ==(const ObjectBase& other) const {
+	return other == *this;
+}
+
+bool Void::operator >(const ObjectBase& other) const {
+	return other < *this;
+}
+
+bool Void::operator ==(const Void&) const {
+	return true;
+}
+
+bool Void::operator <(const Void&) const {
+	return false;
+}
+
+void Void::operator>>(std::ostream& out) const {
+	out << "(Void)";
+}
+
+Void::operator std::string () const {
+	return "V";
+}
+
+Void Void::VOID = Void();
+
+} /* namespace alib */
diff --git a/alib2data/src/object/Void.h b/alib2data/src/object/Void.h
new file mode 100644
index 0000000000..bfbea1238f
--- /dev/null
+++ b/alib2data/src/object/Void.h
@@ -0,0 +1,51 @@
+/*
+ * Void.h
+ *
+ *  Created on: Mar 26, 2013
+ *      Author: Jan Travnicek
+ */
+
+#ifndef VOID_H_
+#define VOID_H_
+
+#include "ObjectBase.h"
+#include "../std/visitor.hpp"
+#include "../common/wrapper.hpp"
+
+namespace alib {
+
+/**
+ * Represents void.
+ */
+class Void : public std::acceptor<Void, VisitableObjectBase, ObjectBase> {
+public:
+	/**
+	 * Creates a blank symbol.
+	 * @param symbol name of the symbol
+	 */
+	explicit Void();
+
+	virtual ObjectBase* clone() const;
+	virtual ObjectBase* plunder() &&;
+
+	virtual bool operator <(const alib::ObjectBase& other) const;
+	virtual bool operator ==(const alib::ObjectBase& other) const;
+	virtual bool operator >(const alib::ObjectBase& other) const;
+
+	virtual bool operator ==(const Void& other) const;
+	virtual bool operator <(const Void& other) const;
+
+	virtual void operator>>(std::ostream& out) const;
+
+	virtual operator std::string () const;
+
+	virtual int selfTypeId() const {
+		return typeId(*this);
+	}
+
+	static Void VOID;
+};
+
+} /* namespace alib */
+
+#endif /* VOID_H_ */
-- 
GitLab