Skip to content
Snippets Groups Projects
PrefixRankedPattern.h 2.23 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jan Trávníček's avatar
    Jan Trávníček committed
    /*
    
    Jan Trávníček's avatar
    Jan Trávníček committed
     * PrefixRankedPattern.h
    
    Jan Trávníček's avatar
    Jan Trávníček committed
     *
     *  Created on: Nov 23, 2013
     *      Author: Jan Travnicek
     */
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    #ifndef PREFIX_RANKED_PATTERN_H_
    #define PREFIX_RANKED_PATTERN_H_
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    #include <set>
    #include <vector>
    
    #include "../../alphabet/RankedSymbol.h"
    #include "../TreeBase.h"
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    #include "../common/RankedPatternAlphabet.h"
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    namespace tree {
    
    
    class RankedPattern;
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    /**
     * 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;
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    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 );
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    	/**
    	 * @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 );
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    	/**
    	 * @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;
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    	const static std::string XML_TAG_NAME;
    
    
    	static PrefixRankedPattern parse ( std::deque < sax::Token >::iterator & input );
    
    	void compose ( std::deque < sax::Token > & out ) const;
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    };
    
    } /* namespace tree */
    
    namespace std {
    
    
    template < >
    struct compare < ::tree::PrefixRankedPattern > {
    	int operator ()( const::tree::PrefixRankedPattern & first, const::tree::PrefixRankedPattern & second ) const {
    		return first.compare ( second );
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    };
    
    } /* namespace std */
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    #endif /* PREFIX_RANKED_PATTERN_H_ */