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