From e9ddc18d2aaf5f114866dc6b8da563ddab617431 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Mon, 1 Aug 2016 20:25:08 +0200
Subject: [PATCH] update suffix trie indexes to components2

---
 .../suffixTrie/SuffixTrieFinalMark.cpp        | 26 +++-----------
 .../indexes/suffixTrie/SuffixTrieFinalMark.h  | 23 +++++++++++--
 .../SuffixTrieTerminatingSymbol.cpp           | 33 ++----------------
 .../suffixTrie/SuffixTrieTerminatingSymbol.h  | 34 +++++++++++++++++--
 4 files changed, 60 insertions(+), 56 deletions(-)

diff --git a/alib2data/src/indexes/suffixTrie/SuffixTrieFinalMark.cpp b/alib2data/src/indexes/suffixTrie/SuffixTrieFinalMark.cpp
index 55b4c280ed..1bed73e922 100644
--- a/alib2data/src/indexes/suffixTrie/SuffixTrieFinalMark.cpp
+++ b/alib2data/src/indexes/suffixTrie/SuffixTrieFinalMark.cpp
@@ -24,23 +24,23 @@ namespace indexes {
 SuffixTrieFinalMark::SuffixTrieFinalMark ( std::set < alphabet::Symbol > alphabet ) : SuffixTrieFinalMark ( std::move ( alphabet ), SuffixTrieNodeFinalMark ( { }, true ) ) {
 }
 
-SuffixTrieFinalMark::SuffixTrieFinalMark ( std::set < alphabet::Symbol > alphabet, SuffixTrieNodeFinalMark tree ) : std::Components < SuffixTrieFinalMark, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( std::move ( alphabet ) ), std::tuple < > ( ) ), tree ( NULL ) {
+SuffixTrieFinalMark::SuffixTrieFinalMark ( std::set < alphabet::Symbol > alphabet, SuffixTrieNodeFinalMark tree ) : std::Components2 < SuffixTrieFinalMark, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( std::move ( alphabet ) ), std::tuple < > ( ) ), tree ( NULL ) {
 	setTree ( std::move ( tree ) );
 }
 
 SuffixTrieFinalMark::SuffixTrieFinalMark ( SuffixTrieNodeFinalMark tree ) : SuffixTrieFinalMark ( tree.computeMinimalAlphabet ( ), tree ) {
 }
 
-SuffixTrieFinalMark::SuffixTrieFinalMark ( const SuffixTrieTerminatingSymbol & other ) : std::Components < SuffixTrieFinalMark, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( other.getAlphabet ( ) ), std::tuple < > ( ) ), tree ( NULL ) {
+SuffixTrieFinalMark::SuffixTrieFinalMark ( const SuffixTrieTerminatingSymbol & other ) : std::Components2 < SuffixTrieFinalMark, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( other.getAlphabet ( ) ), std::tuple < > ( ) ), tree ( NULL ) {
 	this->accessComponent < GeneralAlphabet > ( ).remove ( other.accessElement < TerminatingSymbol > ( ).get ( ) );
 	setTree ( SuffixTrieNodeFinalMark ( other.getRoot ( ), other.accessElement < TerminatingSymbol > ( ).get ( ) ) );
 }
 
-SuffixTrieFinalMark::SuffixTrieFinalMark ( const SuffixTrieFinalMark & other ) : std::Components < SuffixTrieFinalMark, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( other.getAlphabet ( ) ), std::tuple < > ( ) ), tree ( other.tree->clone ( ) ) {
+SuffixTrieFinalMark::SuffixTrieFinalMark ( const SuffixTrieFinalMark & other ) : std::Components2 < SuffixTrieFinalMark, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( other.getAlphabet ( ) ), std::tuple < > ( ) ), tree ( other.tree->clone ( ) ) {
 	this->tree->attachTree ( this );
 }
 
-SuffixTrieFinalMark::SuffixTrieFinalMark ( SuffixTrieFinalMark && other ) noexcept : std::Components < SuffixTrieFinalMark, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( std::move ( other.accessComponent < GeneralAlphabet > ( ).get ( ) ) ), std::tuple < > ( ) ), tree ( other.tree ) {
+SuffixTrieFinalMark::SuffixTrieFinalMark ( SuffixTrieFinalMark && other ) noexcept : std::Components2 < SuffixTrieFinalMark, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( std::move ( other.accessComponent < GeneralAlphabet > ( ).get ( ) ) ), std::tuple < > ( ) ), tree ( other.tree ) {
 	this->tree->attachTree ( this );
 	other.tree = NULL;
 }
@@ -135,24 +135,6 @@ void SuffixTrieFinalMark::compose ( std::deque < sax::Token > & out ) const {
 
 } /* namespace indexes */
 
-namespace std {
-
-template < >
-bool indexes::SuffixTrieFinalMark::Component < indexes::SuffixTrieFinalMark, alphabet::Symbol, indexes::GeneralAlphabet >::used ( const alphabet::Symbol & symbol ) const {
-	return static_cast < const indexes::SuffixTrieFinalMark * > ( this )->getRoot ( ).testSymbol ( symbol );
-}
-
-template < >
-bool indexes::SuffixTrieFinalMark::Component < indexes::SuffixTrieFinalMark, alphabet::Symbol, indexes::GeneralAlphabet >::available ( const alphabet::Symbol & ) const {
-	return true;
-}
-
-template < >
-void indexes::SuffixTrieFinalMark::Component < indexes::SuffixTrieFinalMark, alphabet::Symbol, indexes::GeneralAlphabet >::valid ( const alphabet::Symbol & ) const {
-}
-
-} /* namespace std */
-
 namespace alib {
 
 auto suffixTreeFinalMarkParserRegister = xmlApi < alib::Object >::ParserRegister < indexes::SuffixTrieFinalMark > ( );
diff --git a/alib2data/src/indexes/suffixTrie/SuffixTrieFinalMark.h b/alib2data/src/indexes/suffixTrie/SuffixTrieFinalMark.h
index 74af98ea34..0d6740120b 100644
--- a/alib2data/src/indexes/suffixTrie/SuffixTrieFinalMark.h
+++ b/alib2data/src/indexes/suffixTrie/SuffixTrieFinalMark.h
@@ -12,7 +12,7 @@
 #include <list>
 #include <string>
 #include <set>
-#include <core/components.hpp>
+#include <core/components2.hpp>
 #include "SuffixTrieNodeFinalMark.h"
 #include <object/ObjectBase.h>
 
@@ -25,7 +25,7 @@ class GeneralAlphabet;
  * Represents regular expression parsed from the XML. Regular expression is stored
  * as a tree of RegExpElement.
  */
-class SuffixTrieFinalMark : public alib::ObjectBase, public std::Components < SuffixTrieFinalMark, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > {
+class SuffixTrieFinalMark : public alib::ObjectBase, public std::Components2 < SuffixTrieFinalMark, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > {
 protected:
 	SuffixTrieNodeFinalMark * tree;
 
@@ -114,4 +114,23 @@ public:
 
 } /* namespace tree */
 
+namespace std {
+
+template < >
+class ComponentConstraint2< indexes::SuffixTrieFinalMark, alphabet::Symbol, indexes::GeneralAlphabet > {
+public:
+	static bool used ( const indexes::SuffixTrieFinalMark & index, const alphabet::Symbol & symbol ) {
+		return index.getRoot ( ).testSymbol ( symbol );
+	}
+
+	static bool available ( const indexes::SuffixTrieFinalMark &, const alphabet::Symbol & ) {
+		return true;
+	}
+
+	static void valid ( const indexes::SuffixTrieFinalMark &, const alphabet::Symbol & ) {
+	}
+};
+
+} /* namespace std */
+
 #endif /* SUFFIX_TRIE_FINAL_MARK_H_ */
diff --git a/alib2data/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp b/alib2data/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp
index 083027555a..224f858ac1 100644
--- a/alib2data/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp
+++ b/alib2data/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.cpp
@@ -23,18 +23,18 @@ namespace indexes {
 SuffixTrieTerminatingSymbol::SuffixTrieTerminatingSymbol ( std::set < alphabet::Symbol > alphabet, alphabet::Symbol terminatingSymbol ) : SuffixTrieTerminatingSymbol ( std::move ( alphabet ), std::move ( terminatingSymbol ), SuffixTrieNodeTerminatingSymbol ( { } ) ) {
 }
 
-SuffixTrieTerminatingSymbol::SuffixTrieTerminatingSymbol ( std::set < alphabet::Symbol > alphabet, alphabet::Symbol terminatingSymbol, SuffixTrieNodeTerminatingSymbol tree ) : std::Components < SuffixTrieTerminatingSymbol, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < TerminatingSymbol > > ( std::make_tuple ( std::move ( alphabet ) ), std::make_tuple ( std::move ( terminatingSymbol ) ) ), tree ( NULL ) {
+SuffixTrieTerminatingSymbol::SuffixTrieTerminatingSymbol ( std::set < alphabet::Symbol > alphabet, alphabet::Symbol terminatingSymbol, SuffixTrieNodeTerminatingSymbol tree ) : std::Components2 < SuffixTrieTerminatingSymbol, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < TerminatingSymbol > > ( std::make_tuple ( std::move ( alphabet ) ), std::make_tuple ( std::move ( terminatingSymbol ) ) ), tree ( NULL ) {
 	setTree ( std::move ( tree ) );
 }
 
 SuffixTrieTerminatingSymbol::SuffixTrieTerminatingSymbol ( alphabet::Symbol terminatingSymbol, SuffixTrieNodeTerminatingSymbol tree ) : SuffixTrieTerminatingSymbol ( tree.computeMinimalAlphabet ( ) + std::set < alphabet::Symbol > { terminatingSymbol }, terminatingSymbol, tree ) {
 }
 
-SuffixTrieTerminatingSymbol::SuffixTrieTerminatingSymbol ( const SuffixTrieTerminatingSymbol & other ) : std::Components < SuffixTrieTerminatingSymbol, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < TerminatingSymbol > > ( std::make_tuple ( other.getAlphabet ( ) ), std::make_tuple ( other.getTerminatingSymbol ( ) ) ), tree ( other.tree->clone ( ) ) {
+SuffixTrieTerminatingSymbol::SuffixTrieTerminatingSymbol ( const SuffixTrieTerminatingSymbol & other ) : std::Components2 < SuffixTrieTerminatingSymbol, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < TerminatingSymbol > > ( std::make_tuple ( other.getAlphabet ( ) ), std::make_tuple ( other.getTerminatingSymbol ( ) ) ), tree ( other.tree->clone ( ) ) {
 	this->tree->attachTree ( this );
 }
 
-SuffixTrieTerminatingSymbol::SuffixTrieTerminatingSymbol ( SuffixTrieTerminatingSymbol && other ) noexcept : std::Components < SuffixTrieTerminatingSymbol, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < TerminatingSymbol > > ( std::make_tuple ( std::move ( other.accessComponent < GeneralAlphabet > ( ).get ( ) ) ), std::make_tuple ( std::move ( other.accessElement < TerminatingSymbol > ( ).get ( ) ) ) ), tree ( other.tree ) {
+SuffixTrieTerminatingSymbol::SuffixTrieTerminatingSymbol ( SuffixTrieTerminatingSymbol && other ) noexcept : std::Components2 < SuffixTrieTerminatingSymbol, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < TerminatingSymbol > > ( std::make_tuple ( std::move ( other.accessComponent < GeneralAlphabet > ( ).get ( ) ) ), std::make_tuple ( std::move ( other.accessElement < TerminatingSymbol > ( ).get ( ) ) ) ), tree ( other.tree ) {
 	this->tree->attachTree ( this );
 	other.tree = NULL;
 }
@@ -132,33 +132,6 @@ void SuffixTrieTerminatingSymbol::compose ( std::deque < sax::Token > & out ) co
 
 } /* namespace indexes */
 
-namespace std {
-
-template < >
-bool indexes::SuffixTrieTerminatingSymbol::Component < indexes::SuffixTrieTerminatingSymbol, alphabet::Symbol, indexes::GeneralAlphabet >::used ( const alphabet::Symbol & symbol ) const {
-	return static_cast < const indexes::SuffixTrieTerminatingSymbol * > ( this )->getTerminatingSymbol ( ) == symbol || static_cast < const indexes::SuffixTrieTerminatingSymbol * > ( this )->getRoot ( ).testSymbol ( symbol );
-}
-
-template < >
-bool indexes::SuffixTrieTerminatingSymbol::Component < indexes::SuffixTrieTerminatingSymbol, alphabet::Symbol, indexes::GeneralAlphabet >::available ( const alphabet::Symbol & ) const {
-	return true;
-}
-
-template < >
-bool indexes::SuffixTrieTerminatingSymbol::Element < indexes::SuffixTrieTerminatingSymbol, alphabet::Symbol, indexes::TerminatingSymbol >::available ( const alphabet::Symbol & symbol ) const {
-	return static_cast < const indexes::SuffixTrieTerminatingSymbol * > ( this )->getAlphabet ( ).count ( symbol );
-}
-
-template < >
-void indexes::SuffixTrieTerminatingSymbol::Component < indexes::SuffixTrieTerminatingSymbol, alphabet::Symbol, indexes::GeneralAlphabet >::valid ( const alphabet::Symbol & ) const {
-}
-
-template < >
-void indexes::SuffixTrieTerminatingSymbol::Element < indexes::SuffixTrieTerminatingSymbol, alphabet::Symbol, indexes::TerminatingSymbol >::valid ( const alphabet::Symbol & ) const {
-}
-
-} /* namespace std */
-
 namespace alib {
 
 auto suffixTreeTerminatingSymbolParserRegister = xmlApi < alib::Object >::ParserRegister < indexes::SuffixTrieTerminatingSymbol > ( );
diff --git a/alib2data/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.h b/alib2data/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.h
index da5df918d4..b3113b70a4 100644
--- a/alib2data/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.h
+++ b/alib2data/src/indexes/suffixTrie/SuffixTrieTerminatingSymbol.h
@@ -12,7 +12,7 @@
 #include <list>
 #include <string>
 #include <set>
-#include <core/components.hpp>
+#include <core/components2.hpp>
 #include "SuffixTrieNodeTerminatingSymbol.h"
 #include <object/ObjectBase.h>
 
@@ -25,7 +25,7 @@ class TerminatingSymbol;
  * Represents regular expression parsed from the XML. Regular expression is stored
  * as a tree of RegExpElement.
  */
-class SuffixTrieTerminatingSymbol : public alib::ObjectBase, public std::Components < SuffixTrieTerminatingSymbol, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < TerminatingSymbol > > {
+class SuffixTrieTerminatingSymbol : public alib::ObjectBase, public std::Components2 < SuffixTrieTerminatingSymbol, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < TerminatingSymbol > > {
 protected:
 	SuffixTrieNodeTerminatingSymbol * tree;
 
@@ -110,4 +110,34 @@ public:
 
 } /* namespace tree */
 
+namespace std {
+
+template < >
+class ComponentConstraint2< indexes::SuffixTrieTerminatingSymbol, alphabet::Symbol, indexes::GeneralAlphabet > {
+public:
+	static bool used ( const indexes::SuffixTrieTerminatingSymbol & index, const alphabet::Symbol & symbol ) {
+		return index.getTerminatingSymbol ( ) == symbol || index.getRoot ( ).testSymbol ( symbol );
+	}
+
+	static bool available ( const indexes::SuffixTrieTerminatingSymbol &, const alphabet::Symbol & ) {
+		return true;
+	}
+
+	static void valid ( const indexes::SuffixTrieTerminatingSymbol &, const alphabet::Symbol & ) {
+	}
+};
+
+template < >
+class ElementConstraint2< indexes::SuffixTrieTerminatingSymbol, alphabet::Symbol, indexes::TerminatingSymbol > {
+public:
+	static bool available ( const indexes::SuffixTrieTerminatingSymbol & index, const alphabet::Symbol & symbol ) {
+		return index.getAlphabet ( ).count ( symbol );
+	}
+
+	static void valid ( const indexes::SuffixTrieTerminatingSymbol &, const alphabet::Symbol & ) {
+	}
+};
+
+} /* namespace std */
+
 #endif /* SUFFIX_TRIE_TERMINATING_SYMBOL_H_ */
-- 
GitLab