Skip to content
Snippets Groups Projects
PrefixRankedPattern.h 2.13 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 {
    
    /**
     * Represents regular expression parsed from the XML. Regular expression is stored
     * as a tree of LinearStringElement.
     */
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    class PrefixRankedPattern : public std::acceptor<PrefixRankedPattern, VisitableTreeBase, std::acceptor<PrefixRankedPattern, alib::VisitableObjectBase, TreeBase> >, public RankedPatternAlphabet {
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	std::vector<alphabet::RankedSymbol> m_Data;
    
    public:
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	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);
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    	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);
    
    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);
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	virtual int compare(const PrefixRankedPattern& other) const;
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    	virtual void operator >>(std::ostream& out) const;
    
    	virtual explicit operator std::string() const;
    
    	virtual int selfTypeId() const {
    		return typeId(*this);
    	}
    };
    
    } /* namespace tree */
    
    namespace std {
    
    template<>
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    struct compare<::tree::PrefixRankedPattern> {
    	int operator()(const ::tree::PrefixRankedPattern& first, const ::tree::PrefixRankedPattern& second) const {
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    		return first.compare(second);
    	}
    };
    
    } /* namespace std */
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    #endif /* PREFIX_RANKED_PATTERN_H_ */