From 74ba5dc98710b016e1952020f33518a4ddf19a7f Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Tue, 12 Aug 2014 08:06:33 +0200 Subject: [PATCH] templated string wrapper --- alib2data/src/string/String.cpp | 93 ------------------- alib2data/src/string/String.h | 37 +------- alib2data/src/string/StringAlphabetGetter.cpp | 4 +- alib2data/src/string/StringBase.h | 3 +- alib2data/src/string/StringFromXMLParser.cpp | 8 +- .../src/string/StringToStringComposer.cpp | 2 +- alib2data/src/string/StringToXMLComposer.cpp | 2 +- 7 files changed, 12 insertions(+), 137 deletions(-) delete mode 100644 alib2data/src/string/String.cpp diff --git a/alib2data/src/string/String.cpp b/alib2data/src/string/String.cpp deleted file mode 100644 index 21a97e3b2c..0000000000 --- a/alib2data/src/string/String.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * String.cpp - * - * Created on: Apr 16, 2013 - * Author: Jan Travnicek - */ - -#include "String.h" -#include "../exception/AlibException.h" -#include <algorithm> -#include "Epsilon.h" - -namespace string { - -String::String() : string(NULL) { - setString(Epsilon()); -} - -String::String(const StringBase& string) : string(NULL) { - setString(string); -} - -String::String(StringBase&& string) : string(NULL) { - setString(std::move(string)); -} - -String::String(const String& other) : string(other.getString().clone()) { - -} - -String::String(String&& other) noexcept : string(other.string) { - other.string = NULL; -} - -String& String::operator=(const String& other) { - if(this == &other) return *this; - - *this = String(other); - - return *this; -} - -String& String::operator=(String&& other) noexcept { - std::swap(this->string, other.string); - - return *this; -} - -String::~String() { - delete string; -} - -const StringBase& String::getString() const { - return *string; -} - -StringBase& String::getString() { - return *string; -} - -void String::setString(const StringBase& string) { - delete this->string; - this->string = string.clone(); -} - -void String::setString(StringBase&& string) { - delete this->string; - this->string = std::move(string).plunder(); -} - -bool String::operator<(const String& other) const { - return *(this->string) < *(other.string); -} - -bool String::operator!=(const String& other) const { - return !(*this == other); -} - -bool String::operator==(const String& other) const { - return *string == *other.string; -} - -std::ostream& operator<<(std::ostream& os, const String& string) { - os << string.getString(); - return os; -} - -String::operator std::string() const { - return (std::string) *string; -} - -} /* namespace string */ - diff --git a/alib2data/src/string/String.h b/alib2data/src/string/String.h index 4a653732ac..9da127df94 100644 --- a/alib2data/src/string/String.h +++ b/alib2data/src/string/String.h @@ -9,46 +9,15 @@ #define STRING_H_ #include "../std/visitor.hpp" +#include "../common/wrapper.hpp" #include "StringBase.h" -#include <set> -#include "../alphabet/Symbol.h" namespace string { -class StringBase; - /** - * Wrapper around strings. + * Wrapper around automata. */ -class String { -protected: - StringBase* string; -public: - explicit String(); - explicit String(const StringBase& string); - explicit String(StringBase&& string); - String(const String& other); - String(String&&) noexcept; - String& operator=(const String& other); - String& operator=(String&& other) noexcept; - virtual ~String() noexcept; - - const StringBase& getString() const; - StringBase& getString(); - - void setString(const StringBase& string); - void setString(StringBase&& string); - - bool operator<(const String& other) const; - - bool operator!=(const String& other) const; - - bool operator==(const String& other) const; - - friend std::ostream& operator<<(std::ostream& os, const String& string); - - operator std::string () const; -}; +typedef alib::wrapper<StringBase> String; } /* namespace string */ diff --git a/alib2data/src/string/StringAlphabetGetter.cpp b/alib2data/src/string/StringAlphabetGetter.cpp index 8fb6656d54..e22b8d916c 100644 --- a/alib2data/src/string/StringAlphabetGetter.cpp +++ b/alib2data/src/string/StringAlphabetGetter.cpp @@ -10,7 +10,7 @@ namespace string { void StringAlphabetGetter::Visit(void* userData, const String& string) const { - string.getString().Accept(userData, *this); + string.getData().Accept(userData, *this); } void StringAlphabetGetter::Visit(void* userData, const StringBase::element_type& element) const { @@ -34,7 +34,7 @@ void StringAlphabetGetter::Visit(void* userData, const LinearString& string) con std::set<alphabet::Symbol> StringAlphabetGetter::getAlphabet(const String& string) const { std::set<alphabet::Symbol> res; - string.getString().Accept((void*) &res, *this); + Visit((void*) &res, string); return std::move(res); } diff --git a/alib2data/src/string/StringBase.h b/alib2data/src/string/StringBase.h index d69637fa06..374df8863e 100644 --- a/alib2data/src/string/StringBase.h +++ b/alib2data/src/string/StringBase.h @@ -12,8 +12,7 @@ #include <ostream> #include <set> #include "../alphabet/Symbol.h" -#include "String.h" - + namespace string { class LinearString; diff --git a/alib2data/src/string/StringFromXMLParser.cpp b/alib2data/src/string/StringFromXMLParser.cpp index 8d14f73ee1..ffe2e61ac9 100644 --- a/alib2data/src/string/StringFromXMLParser.cpp +++ b/alib2data/src/string/StringFromXMLParser.cpp @@ -20,7 +20,7 @@ String StringFromXMLParser::parse(std::list<sax::Token>& input) const { } String StringFromXMLParser::parse(std::list<sax::Token>& input, const std::set<FEATURES>& features) const { - String string; + String string { Epsilon {} }; parseContent(input, string, features); return string; @@ -36,7 +36,7 @@ void StringFromXMLParser::parseContent(std::list<sax::Token>& input, String& str epsilon.setAlphabet(alphabet); popToken(input, sax::Token::TokenType::END_ELEMENT, "Epsilon"); - string.setString(epsilon); + string.setData(epsilon); } else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "LinearString")) { if(!features.count(FEATURES::LINEAR)) throw exception::AlibException(); popToken(input, sax::Token::TokenType::START_ELEMENT, "LinearString"); @@ -49,7 +49,7 @@ void StringFromXMLParser::parseContent(std::list<sax::Token>& input, String& str linearString.setContent(data); popToken(input, sax::Token::TokenType::END_ELEMENT, "LinearString"); - string.setString(linearString); + string.setData(linearString); } else if(isToken(input, sax::Token::TokenType::START_ELEMENT, "CyclicString")) { if(!features.count(FEATURES::CYCLIC)) throw exception::AlibException(); popToken(input, sax::Token::TokenType::START_ELEMENT, "CyclicString"); @@ -61,7 +61,7 @@ void StringFromXMLParser::parseContent(std::list<sax::Token>& input, String& str std::vector<alphabet::Symbol> data = parseContentData(input); cyclicString.setContent(data); - string.setString(cyclicString); + string.setData(cyclicString); popToken(input, sax::Token::TokenType::END_ELEMENT, "CyclicString"); } else { throw sax::ParserException(sax::Token("Epsilon, LinearString, CyclicString", sax::Token::TokenType::START_ELEMENT), input.front()); diff --git a/alib2data/src/string/StringToStringComposer.cpp b/alib2data/src/string/StringToStringComposer.cpp index e8fffe4e7d..76d17ce8f2 100644 --- a/alib2data/src/string/StringToStringComposer.cpp +++ b/alib2data/src/string/StringToStringComposer.cpp @@ -43,7 +43,7 @@ void StringToStringComposer::Visit(void* userData, const Epsilon&) { } void StringToStringComposer::Visit(void* userData, const String& string) { - string.getString().Accept(userData, *this); + string.getData().Accept(userData, *this); } diff --git a/alib2data/src/string/StringToXMLComposer.cpp b/alib2data/src/string/StringToXMLComposer.cpp index 9a7278356b..15a2adbe85 100644 --- a/alib2data/src/string/StringToXMLComposer.cpp +++ b/alib2data/src/string/StringToXMLComposer.cpp @@ -59,7 +59,7 @@ void StringToXMLComposer::Visit(void* userData, const LinearString& string) cons } void StringToXMLComposer::Visit(void* userData, const String& string) const { - string.getString().Accept(userData, *this); + string.getData().Accept(userData, *this); } std::list<sax::Token> StringToXMLComposer::compose(const String& string) const { -- GitLab