Synopsis - Cross-Reference

File: /src/Synopsis/ASG/Visitor.hh
 1//
 2// Copyright (C) 2004 Stefan Seefeld
 3// All rights reserved.
 4// Licensed to the public under the terms of the GNU LGPL (>= 2),
 5// see the file COPYING for details.
 6//
 7
 8#ifndef _Synopsis_ASG_Visitor_hh
 9#define _Synopsis_ASG_Visitor_hh
10
11namespace Synopsis
12{
13namespace ASG
14{
15
16class Declaration;
17class Builtin;
18class Macro;
19class Scope;
20class Module;
21class Class;
22class Inheritance;
23class Forward;
24class Typedef;
25class Variable;
26class Const;
27class Enumerator;
28class Enum;
29class Parameter;
30class Function;
31class Operation;
32
33//. The Visitor for the AST hierarchy. This class is just an interface
34//. really. It is abstract, and you must reimplement any methods you want.
35//. The default implementations of the methods call the visit methods for
36//. the subclasses of the visited type, eg visit_namespace calls visit_scope
37//. which calls visit_declaration.
38class Visitor
39{
40public:
41  // Abstract destructor makes the class abstract
42  virtual ~Visitor() {}
43  virtual void visit_declaration(const Declaration*) = 0;
44  virtual void visit_builtin(const Builtin*) = 0;
45  virtual void visit_macro(const Macro*) = 0;
46  virtual void visit_scope(const Scope*) = 0;
47  virtual void visit_module(const Module*) = 0;
48  virtual void visit_class(const Class*) = 0;
49  virtual void visit_inheritance(const Inheritance*) = 0;
50  virtual void visit_forward(const Forward*) = 0;
51  virtual void visit_typedef(const Typedef*) = 0;
52  virtual void visit_variable(const Variable*) = 0;
53  virtual void visit_const(const Const*) = 0;
54  virtual void visit_enum(const Enum*) = 0;
55  virtual void visit_enumerator(const Enumerator*) = 0;
56  virtual void visit_parameter(const Parameter*) = 0;
57  virtual void visit_function(const Function*) = 0;
58  virtual void visit_operation(const Operation*) = 0;
59};
60
61class TypeId;
62class UnknownTypeId;
63class ModifierTypeId;
64class ArrayTypeId;
65class NamedTypeId;
66class BuiltinTypeId;
67class DependentTypeId;
68class DeclaredTypeId;
69class TemplateId;
70class ParametrizedTypeId;
71class FunctionTypeId;
72
73//. The Type Visitor base class
74class TypeIdVisitor
75{
76public:
77  // Virtual destructor makes abstract
78  virtual ~TypeIdVisitor() {}
79  virtual void visit_type_id(const TypeId*) = 0;
80  virtual void visit_named_type_id(const NamedTypeId*) = 0;
81  virtual void visit_builtin_type_id(const BuiltinTypeId*) = 0;
82  virtual void visit_dependent_type_id(const DependentTypeId*) = 0;
83  virtual void visit_unknown_type_id(const UnknownTypeId*) = 0;
84  virtual void visit_modifier_type_id(const ModifierTypeId*) = 0;
85  virtual void visit_array_type_id(const ArrayTypeId*) = 0;
86  virtual void visit_declared_type_id(const DeclaredTypeId*) = 0;
87  virtual void visit_template_id(const TemplateId*) = 0;
88  virtual void visit_parametrized_type_id(const ParametrizedTypeId*) = 0;
89  virtual void visit_function_type_id(const FunctionTypeId*) = 0;
90};
91
92}
93}
94
95#endif