Newer
Older
*
* 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"
namespace tree {
/**
* Represents regular expression parsed from the XML. Regular expression is stored
* as a tree of LinearStringElement.
*/
class PrefixRankedPattern : public std::acceptor<PrefixRankedPattern, VisitableTreeBase, std::acceptor<PrefixRankedPattern, alib::VisitableObjectBase, 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;
virtual int selfTypeId() const {
return typeId(*this);
}
};
} /* 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 */