/* * PrefixRankedPattern.h * * Created on: Nov 23, 2013 * Author: Jan Travnicek */ #ifndef PREFIX_RANKED_PATTERN_H_ #define PREFIX_RANKED_PATTERN_H_ #include <set> #include <vector> #include "../../alphabet/RankedSymbol.h" #include "../TreeBase.h" #include "../common/RankedPatternAlphabet.h" namespace tree { class RankedPattern; /** * Represents regular expression parsed from the XML. Regular expression is stored * as a tree of LinearStringElement. */ class PrefixRankedPattern : public TreeBase, public RankedPatternAlphabet { std::vector < alphabet::RankedSymbol > m_Data; public: explicit PrefixRankedPattern ( alphabet::RankedSymbol subtreeWildcard, std::set < alphabet::RankedSymbol > alphabet, std::vector < alphabet::RankedSymbol > data ); explicit PrefixRankedPattern ( alphabet::RankedSymbol subtreeWildcard, std::vector < alphabet::RankedSymbol > data ); explicit PrefixRankedPattern ( const RankedPattern & tree ); virtual TreeBase * clone ( ) const; virtual TreeBase * plunder ( ) &&; virtual bool removeSymbolFromAlphabet ( const alphabet::RankedSymbol & symbol ); /** * @return List of symbols forming tree (const version). */ const std::vector < alphabet::RankedSymbol > & getContent ( ) const; void setContent ( std::vector < alphabet::RankedSymbol > data ); void arityChecksum ( const std::vector < alphabet::RankedSymbol > & data ); /** * @return true if tree is an empty word (vector length is 0) */ bool isEmpty ( ) const; virtual int compare ( const ObjectBase & other ) const { return ObjectBase::compare ( * this, other ); } virtual int compare ( const PrefixRankedPattern & other ) const; virtual void operator >>( std::ostream & out ) const; virtual explicit operator std::string ( ) const; const static std::string XML_TAG_NAME; static PrefixRankedPattern parse ( std::deque < sax::Token >::iterator & input ); void compose ( std::deque < sax::Token > & out ) const; }; } /* namespace tree */ namespace std { template < > struct compare < ::tree::PrefixRankedPattern > { int operator ()( const::tree::PrefixRankedPattern & first, const::tree::PrefixRankedPattern & second ) const { return first.compare ( second ); } }; } /* namespace std */ #endif /* PREFIX_RANKED_PATTERN_H_ */