#ifndef COMPONENTVISITOR_H
#define COMPONENTVISITOR_H
namespace ue2 {
class AsciiComponentClass;
class Component;
class ComponentAlternation;
class ComponentAssertion;
class ComponentAtomicGroup;
class ComponentBackReference;
class ComponentBoundary;
class ComponentByte;
class ComponentClass;
class ComponentCondReference;
class ComponentEmpty;
class ComponentEUS;
class ComponentRepeat;
class ComponentSequence;
class ComponentWordBoundary;
class UTF8ComponentClass;
class ComponentVisitor {
public:
virtual ~ComponentVisitor();
virtual Component *visit(AsciiComponentClass *c) = 0;
virtual Component *visit(ComponentAlternation *c) = 0;
virtual Component *visit(ComponentAssertion *c) = 0;
virtual Component *visit(ComponentAtomicGroup *c) = 0;
virtual Component *visit(ComponentBackReference *c) = 0;
virtual Component *visit(ComponentBoundary *c) = 0;
virtual Component *visit(ComponentByte *c) = 0;
virtual Component *visit(ComponentCondReference *c) = 0;
virtual Component *visit(ComponentEmpty *c) = 0;
virtual Component *visit(ComponentEUS *c) = 0;
virtual Component *visit(ComponentRepeat *c) = 0;
virtual Component *visit(ComponentSequence *c) = 0;
virtual Component *visit(ComponentWordBoundary *c) = 0;
virtual Component *visit(UTF8ComponentClass *c) = 0;
virtual void post(AsciiComponentClass *c) = 0;
virtual void post(ComponentAlternation *c) = 0;
virtual void post(ComponentAssertion *c) = 0;
virtual void post(ComponentAtomicGroup *c) = 0;
virtual void post(ComponentBackReference *c) = 0;
virtual void post(ComponentBoundary *c) = 0;
virtual void post(ComponentByte *c) = 0;
virtual void post(ComponentCondReference *c) = 0;
virtual void post(ComponentEmpty *c) = 0;
virtual void post(ComponentEUS *c) = 0;
virtual void post(ComponentRepeat *c) = 0;
virtual void post(ComponentSequence *c) = 0;
virtual void post(ComponentWordBoundary *c) = 0;
virtual void post(UTF8ComponentClass *c) = 0;
};
class DefaultComponentVisitor : public ComponentVisitor {
public:
DefaultComponentVisitor();
~DefaultComponentVisitor() override;
Component *visit(AsciiComponentClass *c) override;
Component *visit(ComponentAlternation *c) override;
Component *visit(ComponentAssertion *c) override;
Component *visit(ComponentAtomicGroup *c) override;
Component *visit(ComponentBackReference *c) override;
Component *visit(ComponentBoundary *c) override;
Component *visit(ComponentByte *c) override;
Component *visit(ComponentCondReference *c) override;
Component *visit(ComponentEmpty *c) override;
Component *visit(ComponentEUS *c) override;
Component *visit(ComponentRepeat *c) override;
Component *visit(ComponentSequence *c) override;
Component *visit(ComponentWordBoundary *c) override;
Component *visit(UTF8ComponentClass *c) override;
void post(AsciiComponentClass *c) override;
void post(ComponentAlternation *c) override;
void post(ComponentAssertion *c) override;
void post(ComponentAtomicGroup *c) override;
void post(ComponentBackReference *c) override;
void post(ComponentBoundary *c) override;
void post(ComponentByte *c) override;
void post(ComponentCondReference *c) override;
void post(ComponentEmpty *c) override;
void post(ComponentEUS *c) override;
void post(ComponentRepeat *c) override;
void post(ComponentSequence *c) override;
void post(ComponentWordBoundary *c) override;
void post(UTF8ComponentClass *c) override;
};
}
#endif