diff --git a/alib2data/src/common/wrapper.hpp b/alib2data/src/common/wrapper.hpp index f1ba7aff7f7b6e6cb6aa7902f9e47b57e291e9a9..3b674f9bb2b5d3a65a9208f9e10497ee6614aafc 100644 --- a/alib2data/src/common/wrapper.hpp +++ b/alib2data/src/common/wrapper.hpp @@ -82,6 +82,10 @@ public: os << *(instance.data); return os; } + + operator std::string () const { + return (std::string) *data; + } }; } /* namespace alib */ diff --git a/alib2data/src/label/Label.cpp b/alib2data/src/label/Label.cpp deleted file mode 100644 index c54a821e439f8ee363f31773d520a0e9a782c9a0..0000000000000000000000000000000000000000 --- a/alib2data/src/label/Label.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Label.cpp - * - * Created on: Apr 16, 2013 - * Author: Jan Travnicek - */ - -#include "Label.h" - -namespace label { - -Label::Label(const LabelBase& label) : label(label.clone()) { - -} - -Label::Label(LabelBase&& label) : label(std::move(label).plunder()) { - -} - -Label::Label(const Label& other) : label(other.getLabel().clone()) { - -} - -Label::Label(Label&& other) noexcept : label(other.label) { - other.label = NULL; -} - -Label& Label::operator=(const Label& other) { - if(this == &other) return *this; - - delete label; - label = other.getLabel().clone(); - - return *this; -} - -Label& Label::operator=(Label&& other) noexcept { - std::swap(this->label, other.label); - return *this; -} - -Label::~Label() { - delete label; -} - -const LabelBase& Label::getLabel() const { - return *label; -} - -LabelBase& Label::getLabel() { - return *label; -} - -void Label::setLabel(const LabelBase& label) { - delete this->label; - this->label = label.clone(); -} - -void Label::setLabel(LabelBase&& label) { - delete this->label; - this->label = std::move(label).plunder(); -} - -bool Label::operator!=(const Label& other) const { - return !(*this == other); -} - -bool Label::operator<(const Label& other) const { - return *label < *other.label; -} - -bool Label::operator==(const Label& other) const { - return *label == *other.label; -} - -std::ostream& operator<<(std::ostream& os, const Label& label) { - os << label.getLabel(); - return os; -} - -Label::operator std::string () const { - return (std::string) *label; -} - -} /* namespace label */ - diff --git a/alib2data/src/label/Label.h b/alib2data/src/label/Label.h index 608c44043320d0fccc48fa4b67baafee51aa05f5..7ed6d1e12e82337bddd570f13f1b6db540aa91a4 100644 --- a/alib2data/src/label/Label.h +++ b/alib2data/src/label/Label.h @@ -9,6 +9,7 @@ #define LABEL_H_ #include "../std/visitor.hpp" +#include "../common/wrapper.hpp" #include "LabelBase.h" namespace label { @@ -16,34 +17,7 @@ namespace label { /** * Wrapper around automata. */ -class Label { -protected: - LabelBase* label; -public: - explicit Label(const LabelBase& label); - explicit Label(LabelBase&& label); - Label(const Label& other); - Label(Label&&) noexcept; - Label& operator=(const Label& other); - Label& operator=(Label&& other) noexcept; - virtual ~Label() noexcept; - - const LabelBase& getLabel() const; - LabelBase& getLabel(); - - void setLabel(const LabelBase& label); - void setLabel(LabelBase&& label); - - bool operator<(const Label& other) const; - - bool operator!=(const Label& other) const; - - bool operator==(const Label& other) const; - - friend std::ostream& operator<<(std::ostream& os, const Label& label); - - operator std::string () const; -}; +typedef alib::wrapper<LabelBase> Label; } /* namespace label */ diff --git a/alib2data/src/label/LabelToStringComposer.cpp b/alib2data/src/label/LabelToStringComposer.cpp index 0480d50a2ff8f0e610f1b24336b34b65798b0c3d..722bf0a182c46365b5198e585758f717393811fe 100644 --- a/alib2data/src/label/LabelToStringComposer.cpp +++ b/alib2data/src/label/LabelToStringComposer.cpp @@ -42,7 +42,7 @@ void LabelToStringComposer::Visit(void* userData, const IntegerLabel& symbol) { } void LabelToStringComposer::Visit(void* userData, const Label& symbol) { - symbol.getLabel().Accept(userData, *this); + symbol.getData().Accept(userData, *this); } diff --git a/alib2data/src/label/LabelToXMLComposer.cpp b/alib2data/src/label/LabelToXMLComposer.cpp index f87828ea666776ea42885cff65382dee11ddef06..74d5efc2eccffeeda93c3ad99e74f22bff837d13 100644 --- a/alib2data/src/label/LabelToXMLComposer.cpp +++ b/alib2data/src/label/LabelToXMLComposer.cpp @@ -38,7 +38,7 @@ void LabelToXMLComposer::Visit(void* userData, const StringLabel& label) const { } void LabelToXMLComposer::Visit(void* userData, const Label& label) const { - label.getLabel().Accept(userData, *this); + label.getData().Accept(userData, *this); } diff --git a/alib2data/src/label/NextLabel.cpp b/alib2data/src/label/NextLabel.cpp index c08ae9ff5f5c12849e2048431620ba568959631c..51e60c336379ef45cd14560218e97a4c3fd59ae6 100644 --- a/alib2data/src/label/NextLabel.cpp +++ b/alib2data/src/label/NextLabel.cpp @@ -32,7 +32,7 @@ void NextLabel::Visit(void* userData, const StringLabel& label) { } void NextLabel::Visit(void* userData, const Label& label) { - label.getLabel().Accept(userData, *this); + label.getData().Accept(userData, *this); }