diff --git a/alib2data/src/string/CyclicString.h b/alib2data/src/string/CyclicString.h index 83131a9a1d4ac8038aa7246af0432fdf88f835c4..6b473cc2d59a8541d2f6bd19ba89228985aad854 100644 --- a/alib2data/src/string/CyclicString.h +++ b/alib2data/src/string/CyclicString.h @@ -41,6 +41,10 @@ public: return StringAlphabet::getAlphabet ( ); } + void extendAlphabet ( const std::set < alphabet::Symbol > & symbols ) { + addSymbolsToAlphabet ( symbols ); + } + virtual bool removeSymbolFromAlphabet ( const alphabet::Symbol & symbol ); /** diff --git a/alib2data/src/string/Epsilon.h b/alib2data/src/string/Epsilon.h index a850cfbc7f63f6814830ef28f0ceb6b719c72a37..cdf4a5e733da62ad94f344cc6bbdbc4dc09f180b 100644 --- a/alib2data/src/string/Epsilon.h +++ b/alib2data/src/string/Epsilon.h @@ -35,6 +35,10 @@ public: return StringAlphabet::getAlphabet ( ); } + void extendAlphabet ( const std::set < alphabet::Symbol > & symbols ) { + addSymbolsToAlphabet ( symbols ); + } + virtual bool removeSymbolFromAlphabet ( const alphabet::Symbol & symbol ); /** diff --git a/alib2data/src/string/LinearString.h b/alib2data/src/string/LinearString.h index b959f58d212182ca65dbb0f3b15c1428695cf7f3..f8066f15a42a5ba14966d68a4664a392dcba4a43 100644 --- a/alib2data/src/string/LinearString.h +++ b/alib2data/src/string/LinearString.h @@ -50,6 +50,10 @@ public: return StringAlphabet::getAlphabet ( ); } + void extendAlphabet ( const std::set < alphabet::Symbol > & symbols ) { + addSymbolsToAlphabet ( symbols ); + } + virtual bool removeSymbolFromAlphabet ( const alphabet::Symbol & symbol ); /** diff --git a/alib2data/src/string/LinearStringTerminatingSymbol.h b/alib2data/src/string/LinearStringTerminatingSymbol.h index 5dcb3172e5cff0c42c588815e825769570cb0edb..d055def8ae2e2993bffb1086e70921392d90a7c0 100644 --- a/alib2data/src/string/LinearStringTerminatingSymbol.h +++ b/alib2data/src/string/LinearStringTerminatingSymbol.h @@ -40,6 +40,10 @@ public: return TerminatingSymbolStringAlphabet::getAlphabet ( ); } + void extendAlphabet ( const std::set < alphabet::Symbol > & symbols ) { + addSymbolsToAlphabet ( symbols ); + } + virtual bool removeSymbolFromAlphabet ( const alphabet::Symbol & symbol ); /** diff --git a/alib2data/src/string/String.cpp b/alib2data/src/string/String.cpp index 56c50b0605741dd1db8cceba8b4ce46d8f2ee334..6830d20cb73fc25df85cad373f628277ef85cbfc 100644 --- a/alib2data/src/string/String.cpp +++ b/alib2data/src/string/String.cpp @@ -16,6 +16,10 @@ const std::set<alphabet::Symbol>& String::getAlphabet() const { return this->getData().getAlphabet(); } +void String::extendAlphabet(const std::set < alphabet::Symbol > & symbols ) { + this->getData().extendAlphabet(symbols); +} + string::String stringFrom( const alphabet::Symbol& symbol ) { return string::String { string::LinearString { std::vector<alphabet::Symbol> { symbol } } }; } diff --git a/alib2data/src/string/String.h b/alib2data/src/string/String.h index 15eaa427329b665504023fdb149cc909391884f9..f6c2802b97afef494b3431fd840e35ca514b1a3a 100644 --- a/alib2data/src/string/String.h +++ b/alib2data/src/string/String.h @@ -23,6 +23,7 @@ class String : public alib::wrapper<StringBase>, public alib::WrapperBase { using alib::wrapper<StringBase>::wrapper; public: const std::set<alphabet::Symbol>& getAlphabet() const; + void extendAlphabet(const std::set < alphabet::Symbol > & symbols ); }; string::String stringFrom(const alphabet::Symbol& symbol); diff --git a/alib2data/src/string/StringBase.h b/alib2data/src/string/StringBase.h index 861f2f82d11059b6d623b3f936262c4489815d07..f0ba7c10d840354ef86cd2444b1235172e2223b1 100644 --- a/alib2data/src/string/StringBase.h +++ b/alib2data/src/string/StringBase.h @@ -23,6 +23,7 @@ public: virtual StringBase* plunder() && = 0; virtual const std::set<alphabet::Symbol>& getAlphabet() const = 0; + virtual void extendAlphabet(const std::set<alphabet::Symbol>& symbols) = 0; }; } /* namespace string */ diff --git a/alib2data/src/tree/RankedTreeBase.h b/alib2data/src/tree/RankedTreeBase.h index 783522d83aaacf53945513a352f88e8d318b937c..06ca1615ccd54145a43cce29f8fe17f9a2204e52 100644 --- a/alib2data/src/tree/RankedTreeBase.h +++ b/alib2data/src/tree/RankedTreeBase.h @@ -23,6 +23,7 @@ public: virtual RankedTreeBase * plunder ( ) && = 0; virtual const std::set < alphabet::RankedSymbol > & getAlphabet ( ) const = 0; + virtual void extendAlphabet ( const std::set < alphabet::RankedSymbol > & symbols ) = 0; }; } /* namespace tree */ diff --git a/alib2data/src/tree/RankedTreeWrapper.cpp b/alib2data/src/tree/RankedTreeWrapper.cpp index 5ac4882a9e2dfafbb829595668786b00c3d776b7..d253eecb5ccef2b50e244c744309a6e85ab60495 100644 --- a/alib2data/src/tree/RankedTreeWrapper.cpp +++ b/alib2data/src/tree/RankedTreeWrapper.cpp @@ -13,4 +13,8 @@ const std::set < alphabet::RankedSymbol > & RankedTreeWrapper::getAlphabet ( ) c return this->getData ( ).getAlphabet ( ); } +void RankedTreeWrapper::extendAlphabet ( const std::set < alphabet::RankedSymbol > & symbols ) { + this->getData ( ).extendAlphabet ( symbols ); +} + } /* namespace tree */ diff --git a/alib2data/src/tree/RankedTreeWrapper.h b/alib2data/src/tree/RankedTreeWrapper.h index 393c16f9690524b87549c678595dd56cef7cfbe7..7de1acfff6af798e39f3035cb78a518e8bf8c44c 100644 --- a/alib2data/src/tree/RankedTreeWrapper.h +++ b/alib2data/src/tree/RankedTreeWrapper.h @@ -22,6 +22,7 @@ class RankedTreeWrapper : public alib::wrapper < RankedTreeBase >, public alib:: public: const std::set < alphabet::RankedSymbol > & getAlphabet ( ) const; + void extendAlphabet ( const std::set < alphabet::RankedSymbol > & symbols ); }; } /* namespace tree */ diff --git a/alib2data/src/tree/UnrankedTreeBase.h b/alib2data/src/tree/UnrankedTreeBase.h index 42f1586b805b6c933c6a049949b8f47613ca429a..b3a2cbd403547245d8898690a36853443e2aeab0 100644 --- a/alib2data/src/tree/UnrankedTreeBase.h +++ b/alib2data/src/tree/UnrankedTreeBase.h @@ -23,6 +23,7 @@ public: virtual UnrankedTreeBase * plunder ( ) && = 0; virtual const std::set < alphabet::Symbol > & getAlphabet ( ) const = 0; + virtual void extendAlphabet ( const std::set < alphabet::Symbol > & symbols ) = 0; }; } /* namespace tree */ diff --git a/alib2data/src/tree/UnrankedTreeWrapper.cpp b/alib2data/src/tree/UnrankedTreeWrapper.cpp index 842d46018684bb5c4e6d0210532e7b101d4183db..aa15d7db9172c3832905dee9a706172689c36b96 100644 --- a/alib2data/src/tree/UnrankedTreeWrapper.cpp +++ b/alib2data/src/tree/UnrankedTreeWrapper.cpp @@ -13,4 +13,8 @@ const std::set < alphabet::Symbol > & UnrankedTreeWrapper::getAlphabet ( ) const return this->getData ( ).getAlphabet ( ); } +void UnrankedTreeWrapper::extendAlphabet ( const std::set < alphabet::Symbol > & symbols ) { + this->getData ( ).extendAlphabet ( symbols ); +} + } /* namespace tree */ diff --git a/alib2data/src/tree/UnrankedTreeWrapper.h b/alib2data/src/tree/UnrankedTreeWrapper.h index 4b22c56a253abe4d533fea2e194eef1213f38b3a..cbe856aa19a7bd73f5f6c786a9fe107acdd056e0 100644 --- a/alib2data/src/tree/UnrankedTreeWrapper.h +++ b/alib2data/src/tree/UnrankedTreeWrapper.h @@ -22,6 +22,7 @@ class UnrankedTreeWrapper : public alib::wrapper < UnrankedTreeBase >, public al public: const std::set < alphabet::Symbol > & getAlphabet ( ) const; + void extendAlphabet ( const std::set < alphabet::Symbol > & symbols ); }; } /* namespace tree */ diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h index 155cefb21290c5ffcd4eb12e513faa8685e131b8..aa06c60caa9b52513fcd35fd18380b91e55e4f69 100644 --- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h +++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h @@ -54,6 +54,10 @@ public: return RankedPatternAlphabet::getAlphabet ( ); } + void extendAlphabet ( const std::set < alphabet::RankedSymbol > & symbols ) { + addSymbolsToAlphabet ( symbols ); + } + void setContent ( std::vector < alphabet::RankedSymbol > data ); const alphabet::Symbol & getBarSymbol ( ) const; diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/ranked/PrefixRankedBarTree.h index 54b7ae7d3391bfaaa923078e8717444c3b18cc21..a0118e9c54d31bc820678b458d0a5f84bd2466a7 100644 --- a/alib2data/src/tree/ranked/PrefixRankedBarTree.h +++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.h @@ -51,6 +51,10 @@ public: return RankedAlphabet::getAlphabet ( ); } + void extendAlphabet ( const std::set < alphabet::RankedSymbol > & symbols ) { + addSymbolsToAlphabet ( symbols ); + } + const alphabet::Symbol & getBarSymbol ( ) const; void setContent ( std::vector < alphabet::RankedSymbol > data ); diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.h b/alib2data/src/tree/ranked/PrefixRankedPattern.h index 02b9e56e595047e62ad6bef3ab220988244c32e1..c1f14402d0953ff4b273498a42d0f1756a8aa637 100644 --- a/alib2data/src/tree/ranked/PrefixRankedPattern.h +++ b/alib2data/src/tree/ranked/PrefixRankedPattern.h @@ -45,6 +45,10 @@ public: return RankedPatternAlphabet::getAlphabet ( ); } + void extendAlphabet ( const std::set < alphabet::RankedSymbol > & symbols ) { + addSymbolsToAlphabet ( symbols ); + } + void setContent ( std::vector < alphabet::RankedSymbol > data ); void arityChecksum ( const std::vector < alphabet::RankedSymbol > & data ); diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.h b/alib2data/src/tree/ranked/PrefixRankedTree.h index cbdcb93a5863c866ae9d77889dcec4858e1a5b9c..63dc05218deb3fde1ba12820a1b1a79b834b23a0 100644 --- a/alib2data/src/tree/ranked/PrefixRankedTree.h +++ b/alib2data/src/tree/ranked/PrefixRankedTree.h @@ -45,6 +45,10 @@ public: return RankedAlphabet::getAlphabet ( ); } + void extendAlphabet ( const std::set < alphabet::RankedSymbol > & symbols ) { + addSymbolsToAlphabet ( symbols ); + } + void setContent ( std::vector < alphabet::RankedSymbol > data ); void arityChecksum ( const std::vector < alphabet::RankedSymbol > & data ); diff --git a/alib2data/src/tree/ranked/RankedPattern.h b/alib2data/src/tree/ranked/RankedPattern.h index 63cb4bce6b280cb5f9978dff5227d2dbd04ef912..0b13a5fd273822a5be791d80195cd224f0c3cc0e 100644 --- a/alib2data/src/tree/ranked/RankedPattern.h +++ b/alib2data/src/tree/ranked/RankedPattern.h @@ -63,6 +63,10 @@ public: return RankedPatternAlphabet::getAlphabet ( ); } + void extendAlphabet ( const std::set < alphabet::RankedSymbol > & symbols ) { + addSymbolsToAlphabet ( symbols ); + } + /** * @return Root node of the regular expression pattern */ diff --git a/alib2data/src/tree/ranked/RankedTree.h b/alib2data/src/tree/ranked/RankedTree.h index 3ae18846732f6b0e98bd8b07539e85e06fe50541..88c2b772781f13611826872f53d603163a3d8571 100644 --- a/alib2data/src/tree/ranked/RankedTree.h +++ b/alib2data/src/tree/ranked/RankedTree.h @@ -63,6 +63,10 @@ public: return RankedAlphabet::getAlphabet ( ); } + void extendAlphabet ( const std::set < alphabet::RankedSymbol > & symbols ) { + addSymbolsToAlphabet ( symbols ); + } + /** * @return Root node of the regular expression tree */ diff --git a/alib2data/src/tree/unranked/UnrankedPattern.h b/alib2data/src/tree/unranked/UnrankedPattern.h index 2e003e1b0fd920f9447c3dc55e916dc38678b69f..71e0f4d1acc1418f363f6acc7071e0cfbbd27e1f 100644 --- a/alib2data/src/tree/unranked/UnrankedPattern.h +++ b/alib2data/src/tree/unranked/UnrankedPattern.h @@ -63,6 +63,10 @@ public: return UnrankedPatternAlphabet::getAlphabet ( ); } + void extendAlphabet ( const std::set < alphabet::Symbol > & symbols ) { + addSymbolsToAlphabet ( symbols ); + } + /** * @return Root node of the regular expression pattern */ diff --git a/alib2data/src/tree/unranked/UnrankedTree.h b/alib2data/src/tree/unranked/UnrankedTree.h index 811a0c1610fa09b134e51ba88a9da9ea3d78ab7a..1020ab2c00bb29cc9e139bc15d3528168fe078da 100644 --- a/alib2data/src/tree/unranked/UnrankedTree.h +++ b/alib2data/src/tree/unranked/UnrankedTree.h @@ -63,6 +63,10 @@ public: return UnrankedAlphabet::getAlphabet ( ); } + void extendAlphabet ( const std::set < alphabet::Symbol > & symbols ) { + addSymbolsToAlphabet ( symbols ); + } + /** * @return Root node of the regular expression tree */ diff --git a/alphabetManip2/makefile b/alphabetManip2/makefile new file mode 100644 index 0000000000000000000000000000000000000000..f19c977454b02b96a4b7f81bfdb2e4dcaab19f6e --- /dev/null +++ b/alphabetManip2/makefile @@ -0,0 +1,160 @@ +SHELL:=/bin/bash +USE_RAMDISK ?= 0 +-include makefile.conf + +define NEW_LINE + + +endef + +export NEW_LINE + +LDFLAGS_DEBUG:=$(addprefix -L, $(addsuffix lib-debug, $(LINK_PATHS))) -rdynamic $(addprefix -l, $(LINK_LIBRARIES)) -Wl,-rpath,. + +LDFLAGS_RELEASE:=$(addprefix -L, $(addsuffix lib-release, $(LINK_PATHS))) -rdynamic $(addprefix -l, $(LINK_LIBRARIES)) -Wl,-rpath,. + +OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp)) + +OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp)) + +.PHONY: all build-debug clean-debug doc + +all: + @echo "What to do master?" + +obj%/makefile: makefile makefile.conf + if [ ! -w $(dir $@) ] && [ $(USE_RAMDISK) -eq 1 ]; then\ + ln -s /tmp/`date +'%s%N'`-$(dir $@) $(subst /, , $(dir $@)) 2>/dev/null;\ + fi;\ + if [ -L $(subst /, , $(dir $@)) ]; then\ + mkdir -p `readlink $(subst /, , $(dir $@))`;\ + else\ + mkdir -p $(dir $@);\ + fi + echo "\ + SHELL:=/bin/bash$${NEW_LINE}\ + SRCDIR:=$${NEW_LINE}\ + $${NEW_LINE}\ + define NEW_LINE$${NEW_LINE}\ + $${NEW_LINE}\ + $${NEW_LINE}\ + endef$${NEW_LINE}\ + $${NEW_LINE}\ + export NEW_LINE$${NEW_LINE}\ + $${NEW_LINE}\ + CXXFLAGS:= -pipe -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -Werror -fPIC $(addprefix -I, $(INCLUDE_PATHS))$${NEW_LINE}\ + $${NEW_LINE}\ + SOURCES:= \$$(shell find \$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")$${NEW_LINE}\ + DEPENDENCIES:= \$$(patsubst \$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))$${NEW_LINE}\ + OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))$${NEW_LINE}\ + SOURCES_DIRS:= \$$(shell find \$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)$${NEW_LINE}\ + OBJECTS_DIRS:= \$$(patsubst \$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))$${NEW_LINE}\ + OBJECTS_DIRS_MAKEFILES:= \$$(patsubst %, %makefile, \$$(OBJECTS_DIRS))$${NEW_LINE}\ + $${NEW_LINE}\ + .PHONY: all$${NEW_LINE}\ + .PRECIOUS: \$$(DEPENDECIES) \$$(OBJECTS_DIRS_MAKEFILES)$${NEW_LINE}\ + $${NEW_LINE}\ + all: \$$(OBJECTS_DIRS) \$$(OBJECTS)$${NEW_LINE}\ + $${NEW_LINE}\ + %.d: makefile$${NEW_LINE}\ + @echo \"\\$${NEW_LINE}\ + \$$(shell sha1sum <<< \"\$$@\" | sed \"s/ -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -M \\$$\$$(CXXFLAGS) \$$(patsubst \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\$$\$${NEW_LINE}\\$${NEW_LINE}\ + \$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/ -//g\")) makefile\$$\$${NEW_LINE}\\$${NEW_LINE}\ + \\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\$$\$${NEW_LINE}\\$${NEW_LINE}\ + \" > \$$@$${NEW_LINE}\ + $${NEW_LINE}\ + %/makefile: makefile$${NEW_LINE}\ + mkdir -p \$$(dir \$$@)$${NEW_LINE}\ + cp makefile \$$@$${NEW_LINE}\ + $${NEW_LINE}\ + %/: FORCE | %/makefile$${NEW_LINE}\ + @accesstime=\`stat -c %Y \$$@\` && \\$${NEW_LINE}\ + \$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) SOURCES_BASE_DIR=\$$(SOURCES_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\$${NEW_LINE}\ + accesstime2=\`stat -c %Y \$$@\` && \\$${NEW_LINE}\ + if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\$${NEW_LINE}\ + touch .; \\$${NEW_LINE}\ + fi$${NEW_LINE}\ + $${NEW_LINE}\ + FORCE:$${NEW_LINE}\ + $${NEW_LINE}\ + -include \$$(DEPENDENCIES)" > $@ + +debug: build-debug + +release: build-release + +clean: clean-debug clean-release + $(RM) -r doc + + + +bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG) + if [ ! -w $(dir $@) ] && [ $(USE_RAMDISK) -eq 1 ]; then\ + ln -s /tmp/`date +'%s%N'`-$(dir $@) $(subst /, , $(dir $@)) 2>/dev/null;\ + fi;\ + if [ -L $(subst /, , $(dir $@)) ]; then\ + mkdir -p `readlink $(subst /, , $(dir $@))`;\ + else\ + mkdir -p $(dir $@);\ + fi + $(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG) + +bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE) + if [ ! -w $(dir $@) ] && [ $(USE_RAMDISK) -eq 1 ]; then\ + ln -s /tmp/`date +'%s%N'`-$(dir $@) $(subst /, , $(dir $@)) 2>/dev/null;\ + fi;\ + if [ -L $(subst /, , $(dir $@)) ]; then\ + mkdir -p `readlink $(subst /, , $(dir $@))`;\ + else\ + mkdir -p $(dir $@);\ + fi + $(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE) + + + +obj-debug/: FORCE | obj-debug/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=$(realpath obj-debug) SOURCES_BASE_DIR=$(realpath src) CXX_OTHER_FLAGS="-g -O0" + +obj-release/: FORCE | obj-release/makefile + $(MAKE) -C $@ OBJECTS_BASE_DIR=$(realpath obj-release) SOURCES_BASE_DIR=$(realpath src) CXX_OTHER_FLAGS="-O3" + + + +$(OBJECTS_DEBUG): obj-debug/ + +$(OBJECTS_RELEASE): obj-release/ + + +build-debug: bin-debug/$(EXECUTABLE) + +build-release: bin-release/$(EXECUTABLE) + + + +clean-debug: + if [ -L obj-debug ]; then\ + rm -r `readlink obj-debug`;\ + fi + if [ -L bin-debug ]; then\ + rm -r `readlink bin-debug`;\ + fi + $(RM) -r *.o *.d bin-debug obj-debug + +clean-release: + if [ -L obj-release ]; then\ + rm -r `readlink obj-release`;\ + fi + if [ -L lib-release ]; then\ + rm -r `readlink lib-release`;\ + fi + $(RM) -r *.o *.d bin-release obj-release + + + +FORCE: + + + +doc: + doxygen + diff --git a/alphabetManip2/makefile.conf b/alphabetManip2/makefile.conf new file mode 100644 index 0000000000000000000000000000000000000000..0ff668d6c2389aa4d856d33cfda140e7f2556c5e --- /dev/null +++ b/alphabetManip2/makefile.conf @@ -0,0 +1,4 @@ +EXECUTABLE:=alphabetManip2 +LINK_PATHS=../alib2elgo/ ../alib2algo/ ../alib2data/ ../alib2std/ +LINK_LIBRARIES=alib2elgo alib2algo alib2data alib2std xml2 +INCLUDE_PATHS=\$$(SOURCES_BASE_DIR)/../../alib2elgo/src/ \$$(SOURCES_BASE_DIR)/../../alib2algo/src/ \$$(SOURCES_BASE_DIR)/../../alib2data/src/ \$$(SOURCES_BASE_DIR)/../../alib2std/src/ /usr/include/libxml2/ diff --git a/alphabetManip2/src/alphabetManip.cpp b/alphabetManip2/src/alphabetManip.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7bc7f265a33a587e18832d2e5ed0ef96a3e81530 --- /dev/null +++ b/alphabetManip2/src/alphabetManip.cpp @@ -0,0 +1,136 @@ +/* + * alphabetManip.cpp + * + * Created on: 26. 3. 2014 + * Author: Jan Travnicek + */ + +#include <tclap/CmdLine.h> +#include <vector> + +#include <factory/XmlDataFactory.hpp> +#include <exception/AlibException.h> +#include <tree/RankedTreeWrapper.h> +#include <tree/UnrankedTreeWrapper.h> +#include <string/String.h> +#include <container/ObjectsSet.h> + +#include <iostream> + +template < class T > +void process ( T & data, TCLAP::ValueArg < std::string > & operation, std::deque < sax::Token > & argumentTokens ) { + typedef typename std::remove_const < typename std::remove_reference < decltype ( data.getAlphabet ( ) ) >::type >::type alphabetType; + + if ( operation.getValue ( ) == "get" ) { + std::chrono::measurements::end ( ); + std::chrono::measurements::start ( "Algorithm", std::chrono::measurements::Type::MAIN ); + + const alphabetType & res = data.getAlphabet ( ); + + std::chrono::measurements::end ( ); + std::chrono::measurements::start ( "Output write", std::chrono::measurements::Type::AUXILARY ); + + alib::XmlDataFactory::toStdout ( res ); + } else if ( operation.getValue ( ) == "add" ) { + alphabetType symbols = alib::XmlDataFactory::fromTokens < alphabetType > ( argumentTokens ); + + std::chrono::measurements::end ( ); + std::chrono::measurements::start ( "Algorithm", std::chrono::measurements::Type::MAIN ); + + data.extendAlphabet ( symbols ); + + std::chrono::measurements::end ( ); + std::chrono::measurements::start ( "Output write", std::chrono::measurements::Type::AUXILARY ); + + alib::XmlDataFactory::toStdout ( data ); + } else if ( operation.getValue ( ) == "set" ) { + } else if ( operation.getValue ( ) == "remove" ) { + } else { + throw exception::AlibException ( "Invalid operation" ); + } +} + +int main ( int argc, char * argv[] ) { + try { + TCLAP::CmdLine cmd ( "Alphabet manipulation binary", ' ', "0.01" ); + + std::vector < std::string > allowed; + allowed.push_back ( "get" ); + allowed.push_back ( "set" ); + allowed.push_back ( "add" ); + allowed.push_back ( "remove" ); + TCLAP::ValuesConstraint < std::string > allowedVals ( allowed ); + + TCLAP::ValueArg < std::string > operation ( "o", "operation", "Operation type", false, "", & allowedVals ); + cmd.add ( operation ); + + TCLAP::ValueArg < std::string > input ( "i", "input", "Input from file", false, "-", "file" ); + cmd.add ( input ); + + TCLAP::ValueArg < std::string > argument ( "a", "argument", "Operation argument", false, "", "file" ); + cmd.add ( argument ); + + TCLAP::SwitchArg measure ( "m", "measure", "Measure times", false ); + cmd.add ( measure ); + + TCLAP::SwitchArg verbose ( "v", "verbose", "Be verbose", false ); + cmd.add ( verbose ); + + cmd.parse ( argc, argv ); + + std::chrono::measurements::start ( "Overal", std::chrono::measurements::Type::OVERALL ); + std::chrono::measurements::start ( "Input read", std::chrono::measurements::Type::AUXILARY ); + + std::deque < sax::Token > inputTokens; + + if ( input.isSet ( ) ) { + if ( input.getValue ( ) == "-" ) + sax::SaxParseInterface::parseStdin ( inputTokens ); + else + sax::SaxParseInterface::parseFile ( input.getValue ( ), inputTokens ); + } else { + sax::SaxParseInterface::parseStdin ( inputTokens ); + } + + std::deque < sax::Token > argumentTokens; + + if ( argument.isSet ( ) ) { + if ( argument.getValue ( ) == "-" ) + sax::SaxParseInterface::parseStdin ( argumentTokens ); + else + sax::SaxParseInterface::parseFile ( argument.getValue ( ), argumentTokens ); + } + + if ( alib::XmlDataFactory::first < tree::RankedTreeWrapper > ( inputTokens ) ) { + tree::RankedTreeWrapper data = alib::XmlDataFactory::fromTokens < tree::RankedTreeWrapper > ( inputTokens ); + process ( data, operation, argumentTokens ); + } else if ( alib::XmlDataFactory::first < tree::UnrankedTreeWrapper > ( inputTokens ) ) { + tree::UnrankedTreeWrapper data = alib::XmlDataFactory::fromTokens < tree::UnrankedTreeWrapper > ( inputTokens ); + process ( data, operation, argumentTokens ); + } else if ( alib::XmlDataFactory::first < string::String > ( inputTokens ) ) { + string::String data = alib::XmlDataFactory::fromTokens < string::String > ( inputTokens ); + process ( data, operation, argumentTokens ); + } else { + throw exception::AlibException ( "Invalid data type" ); + } + + std::chrono::measurements::end ( ); + std::chrono::measurements::end ( ); + + if ( measure.getValue ( ) ) std::clog << std::chrono::measurements::results ( ) << std::endl; + + return 0; + } catch ( const exception::AlibException & exception ) { + alib::XmlDataFactory::toStdout ( exception ); + return 1; + } catch ( const TCLAP::ArgException & exception ) { + std::cout << exception.error ( ) << std::endl; + return 2; + } catch ( const std::exception & exception ) { + std::cerr << "Exception caught: " << exception.what ( ) << std::endl; + return 3; + } catch ( ... ) { + std::cerr << "Unknown exception caught." << std::endl; + return 127; + } +} diff --git a/makefile b/makefile index c181e3ef3c0bc68f94ef734f869d2c6ac3072c7b..c88824b4a32c33ecf3f2719715713208c939b0c4 100644 --- a/makefile +++ b/makefile @@ -34,6 +34,7 @@ SUBDIRS_BINS = aecho2 \ astringology2 \ atrim2 \ tniceprint \ + alphabetManip2 \ define NEW_LINE