NEURON
lookup_visitor.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2023 Blue Brain Project, EPFL.
3  * See the top-level LICENSE file for details.
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 ///
9 /// THIS FILE IS GENERATED AT BUILD TIME AND SHALL NOT BE EDITED.
10 ///
11 
12 #pragma once
13 
14 /**
15  * \file
16  * \brief \copybrief nmodl::visitor::AstLookupVisitor
17  */
18 
19 #include "visitors/visitor.hpp"
20 
21 namespace nmodl {
22 namespace visitor {
23 
24 /**
25  * \addtogroup visitor_classes
26  * \{
27  */
28 
29 /**
30  * \class AstLookupVisitor
31  * \brief %Visitor to find AST nodes based on their types
32  */
33 template <typename DefaultVisitor>
34 class MetaAstLookupVisitor: public DefaultVisitor {
36 
37  template <typename T>
38  struct identity {
39  using type = T;
40  };
41 
42  template <typename T>
44  typename std::conditional<is_const_visitor, std::add_const<T>, identity<T>>::type;
46  using nodes_t = std::vector<std::shared_ptr<ast_t>>;
47 
48  private:
49  /// node types to search in the ast
50  std::vector<ast::AstNodeType> types;
51 
52  /// matching nodes found in the ast
53  std::vector<std::shared_ptr<ast_t>> nodes;
54 
55  public:
56  MetaAstLookupVisitor() = default;
57 
59  : types{type} {}
60 
61  MetaAstLookupVisitor(const std::vector<ast::AstNodeType>& types)
62  : types(types) {}
63 
65 
67 
68  const nodes_t& lookup(ast_t& node, const std::vector<ast::AstNodeType>& t_types);
69 
70  const nodes_t& get_nodes() const noexcept {
71  return nodes;
72  }
73 
74  void clear() {
75  types.clear();
76  nodes.clear();
77  }
78 
79  protected:
80  // clang-format off
81  void visit_node(typename visit_arg_trait<ast::Node>::type& node) override;
84  void visit_block(typename visit_arg_trait<ast::Block>::type& node) override;
86  void visit_number(typename visit_arg_trait<ast::Number>::type& node) override;
87  void visit_string(typename visit_arg_trait<ast::String>::type& node) override;
89  void visit_float(typename visit_arg_trait<ast::Float>::type& node) override;
90  void visit_double(typename visit_arg_trait<ast::Double>::type& node) override;
92  void visit_name(typename visit_arg_trait<ast::Name>::type& node) override;
134  void visit_unit(typename visit_arg_trait<ast::Unit>::type& node) override;
137  void visit_limits(typename visit_arg_trait<ast::Limits>::type& node) override;
150  void visit_watch(typename visit_arg_trait<ast::Watch>::type& node) override;
154  void visit_valence(typename visit_arg_trait<ast::Valence>::type& node) override;
157  void visit_model(typename visit_arg_trait<ast::Model>::type& node) override;
158  void visit_define(typename visit_arg_trait<ast::Define>::type& node) override;
159  void visit_include(typename visit_arg_trait<ast::Include>::type& node) override;
180  void visit_suffix(typename visit_arg_trait<ast::Suffix>::type& node) override;
181  void visit_useion(typename visit_arg_trait<ast::Useion>::type& node) override;
184  void visit_range(typename visit_arg_trait<ast::Range>::type& node) override;
185  void visit_global(typename visit_arg_trait<ast::Global>::type& node) override;
187  void visit_pointer(typename visit_arg_trait<ast::Pointer>::type& node) override;
195  void visit_program(typename visit_arg_trait<ast::Program>::type& node) override;
205  // clang-format on
206 };
207 
210 
211 // explicit template instantiation declarations
212 extern template class MetaAstLookupVisitor<Visitor>;
213 extern template class MetaAstLookupVisitor<ConstVisitor>;
214 
215 /** \} */ // end of visitor_classes
216 
217 } // namespace visitor
218 } // namespace nmodl
219 
void visit_valence(typename visit_arg_trait< ast::Valence >::type &node) override
std::vector< std::shared_ptr< ast_t > > nodes_t
void visit_unit_state(typename visit_arg_trait< ast::UnitState >::type &node) override
void visit_function_block(typename visit_arg_trait< ast::FunctionBlock >::type &node) override
void visit_line_comment(typename visit_arg_trait< ast::LineComment >::type &node) override
void visit_watch(typename visit_arg_trait< ast::Watch >::type &node) override
void visit_extern_var(typename visit_arg_trait< ast::ExternVar >::type &node) override
void visit_float(typename visit_arg_trait< ast::Float >::type &node) override
void visit_statement_block(typename visit_arg_trait< ast::StatementBlock >::type &node) override
void visit_reaction_statement(typename visit_arg_trait< ast::ReactionStatement >::type &node) override
void visit_useion(typename visit_arg_trait< ast::Useion >::type &node) override
void visit_assigned_definition(typename visit_arg_trait< ast::AssignedDefinition >::type &node) override
void visit_verbatim(typename visit_arg_trait< ast::Verbatim >::type &node) override
void visit_electrode_current(typename visit_arg_trait< ast::ElectrodeCurrent >::type &node) override
void visit_function_call(typename visit_arg_trait< ast::FunctionCall >::type &node) override
void visit_destructor_block(typename visit_arg_trait< ast::DestructorBlock >::type &node) override
void visit_protect_statement(typename visit_arg_trait< ast::ProtectStatement >::type &node) override
void visit_paren_expression(typename visit_arg_trait< ast::ParenExpression >::type &node) override
void visit_neuron_block(typename visit_arg_trait< ast::NeuronBlock >::type &node) override
void visit_initial_block(typename visit_arg_trait< ast::InitialBlock >::type &node) override
void visit_linear_block(typename visit_arg_trait< ast::LinearBlock >::type &node) override
void visit_non_linear_block(typename visit_arg_trait< ast::NonLinearBlock >::type &node) override
typename std::conditional< is_const_visitor, std::add_const< T >, identity< T > >::type visit_arg_trait
void visit_statement(typename visit_arg_trait< ast::Statement >::type &node) override
void visit_react_var_name(typename visit_arg_trait< ast::ReactVarName >::type &node) override
void visit_lag_statement(typename visit_arg_trait< ast::LagStatement >::type &node) override
void visit_local_var(typename visit_arg_trait< ast::LocalVar >::type &node) override
std::vector< std::shared_ptr< ast_t > > nodes
matching nodes found in the ast
const nodes_t & get_nodes() const noexcept
void visit_eigen_linear_solver_block(typename visit_arg_trait< ast::EigenLinearSolverBlock >::type &node) override
void visit_lon_diffuse(typename visit_arg_trait< ast::LonDiffuse >::type &node) override
void visit_watch_statement(typename visit_arg_trait< ast::WatchStatement >::type &node) override
void visit_model(typename visit_arg_trait< ast::Model >::type &node) override
void visit_define(typename visit_arg_trait< ast::Define >::type &node) override
void visit_from_statement(typename visit_arg_trait< ast::FromStatement >::type &node) override
void visit_indexed_name(typename visit_arg_trait< ast::IndexedName >::type &node) override
void visit_constant_block(typename visit_arg_trait< ast::ConstantBlock >::type &node) override
void visit_binary_expression(typename visit_arg_trait< ast::BinaryExpression >::type &node) override
void visit_external(typename visit_arg_trait< ast::External >::type &node) override
void visit_expression_statement(typename visit_arg_trait< ast::ExpressionStatement >::type &node) override
void visit_identifier(typename visit_arg_trait< ast::Identifier >::type &node) override
const nodes_t & lookup(ast_t &node, ast::AstNodeType type)
void visit_double(typename visit_arg_trait< ast::Double >::type &node) override
void visit_program(typename visit_arg_trait< ast::Program >::type &node) override
void visit_assigned_block(typename visit_arg_trait< ast::AssignedBlock >::type &node) override
void visit_cvode_block(typename visit_arg_trait< ast::CvodeBlock >::type &node) override
void visit_param_block(typename visit_arg_trait< ast::ParamBlock >::type &node) override
void visit_read_ion_var(typename visit_arg_trait< ast::ReadIonVar >::type &node) override
void visit_else_statement(typename visit_arg_trait< ast::ElseStatement >::type &node) override
void visit_reaction_operator(typename visit_arg_trait< ast::ReactionOperator >::type &node) override
void visit_unit(typename visit_arg_trait< ast::Unit >::type &node) override
void visit_unit_def(typename visit_arg_trait< ast::UnitDef >::type &node) override
void visit_ba_block(typename visit_arg_trait< ast::BABlock >::type &node) override
void visit_binary_operator(typename visit_arg_trait< ast::BinaryOperator >::type &node) override
void visit_include(typename visit_arg_trait< ast::Include >::type &node) override
void visit_block_comment(typename visit_arg_trait< ast::BlockComment >::type &node) override
void visit_non_lin_equation(typename visit_arg_trait< ast::NonLinEquation >::type &node) override
void visit_thread_safe(typename visit_arg_trait< ast::ThreadSafe >::type &node) override
void visit_boolean(typename visit_arg_trait< ast::Boolean >::type &node) override
void visit_update_dt(typename visit_arg_trait< ast::UpdateDt >::type &node) override
void visit_solution_expression(typename visit_arg_trait< ast::SolutionExpression >::type &node) override
MetaAstLookupVisitor(ast::AstNodeType type)
void visit_kinetic_block(typename visit_arg_trait< ast::KineticBlock >::type &node) override
void visit_procedure_block(typename visit_arg_trait< ast::ProcedureBlock >::type &node) override
void visit_bbcore_pointer(typename visit_arg_trait< ast::BbcorePointer >::type &node) override
void visit_global_var(typename visit_arg_trait< ast::GlobalVar >::type &node) override
void visit_compartment(typename visit_arg_trait< ast::Compartment >::type &node) override
void visit_breakpoint_block(typename visit_arg_trait< ast::BreakpointBlock >::type &node) override
void visit_limits(typename visit_arg_trait< ast::Limits >::type &node) override
void visit_bbcore_pointer_var(typename visit_arg_trait< ast::BbcorePointerVar >::type &node) override
void visit_nrn_state_block(typename visit_arg_trait< ast::NrnStateBlock >::type &node) override
void visit_solve_block(typename visit_arg_trait< ast::SolveBlock >::type &node) override
const nodes_t & lookup(ast_t &node)
void visit_conserve(typename visit_arg_trait< ast::Conserve >::type &node) override
void visit_range_var(typename visit_arg_trait< ast::RangeVar >::type &node) override
void visit_function_table_block(typename visit_arg_trait< ast::FunctionTableBlock >::type &node) override
void visit_mutex_unlock(typename visit_arg_trait< ast::MutexUnlock >::type &node) override
void visit_net_receive_block(typename visit_arg_trait< ast::NetReceiveBlock >::type &node) override
void visit_ontology_statement(typename visit_arg_trait< ast::OntologyStatement >::type &node) override
void visit_nonspecific_cur_var(typename visit_arg_trait< ast::NonspecificCurVar >::type &node) override
void visit_expression(typename visit_arg_trait< ast::Expression >::type &node) override
void visit_else_if_statement(typename visit_arg_trait< ast::ElseIfStatement >::type &node) override
void visit_table_statement(typename visit_arg_trait< ast::TableStatement >::type &node) override
void visit_state_block(typename visit_arg_trait< ast::StateBlock >::type &node) override
void visit_string(typename visit_arg_trait< ast::String >::type &node) override
void visit_argument(typename visit_arg_trait< ast::Argument >::type &node) override
void visit_derivative_block(typename visit_arg_trait< ast::DerivativeBlock >::type &node) override
void visit_electrode_cur_var(typename visit_arg_trait< ast::ElectrodeCurVar >::type &node) override
void visit_unary_operator(typename visit_arg_trait< ast::UnaryOperator >::type &node) override
void visit_block(typename visit_arg_trait< ast::Block >::type &node) override
void visit_while_statement(typename visit_arg_trait< ast::WhileStatement >::type &node) override
void visit_lin_equation(typename visit_arg_trait< ast::LinEquation >::type &node) override
void visit_constant_var(typename visit_arg_trait< ast::ConstantVar >::type &node) override
void visit_independent_block(typename visit_arg_trait< ast::IndependentBlock >::type &node) override
void visit_if_statement(typename visit_arg_trait< ast::IfStatement >::type &node) override
void visit_mutex_lock(typename visit_arg_trait< ast::MutexLock >::type &node) override
MetaAstLookupVisitor(const std::vector< ast::AstNodeType > &types)
void visit_diff_eq_expression(typename visit_arg_trait< ast::DiffEqExpression >::type &node) override
void visit_name(typename visit_arg_trait< ast::Name >::type &node) override
void visit_pointer(typename visit_arg_trait< ast::Pointer >::type &node) override
void visit_factor_def(typename visit_arg_trait< ast::FactorDef >::type &node) override
typename visit_arg_trait< ast::Ast >::type ast_t
void visit_longitudinal_diffusion_block(typename visit_arg_trait< ast::LongitudinalDiffusionBlock >::type &node) override
void visit_for_netcon(typename visit_arg_trait< ast::ForNetcon >::type &node) override
void visit_write_ion_var(typename visit_arg_trait< ast::WriteIonVar >::type &node) override
void visit_nonspecific(typename visit_arg_trait< ast::Nonspecific >::type &node) override
void visit_suffix(typename visit_arg_trait< ast::Suffix >::type &node) override
void visit_discrete_block(typename visit_arg_trait< ast::DiscreteBlock >::type &node) override
void visit_number_range(typename visit_arg_trait< ast::NumberRange >::type &node) override
void visit_unit_block(typename visit_arg_trait< ast::UnitBlock >::type &node) override
void visit_constructor_block(typename visit_arg_trait< ast::ConstructorBlock >::type &node) override
void visit_pointer_var(typename visit_arg_trait< ast::PointerVar >::type &node) override
void visit_global(typename visit_arg_trait< ast::Global >::type &node) override
void visit_before_block(typename visit_arg_trait< ast::BeforeBlock >::type &node) override
std::vector< ast::AstNodeType > types
node types to search in the ast
void visit_prime_name(typename visit_arg_trait< ast::PrimeName >::type &node) override
void visit_double_unit(typename visit_arg_trait< ast::DoubleUnit >::type &node) override
void visit_var_name(typename visit_arg_trait< ast::VarName >::type &node) override
void visit_derivimplicit_callback(typename visit_arg_trait< ast::DerivimplicitCallback >::type &node) override
void visit_wrapped_expression(typename visit_arg_trait< ast::WrappedExpression >::type &node) override
void visit_integer(typename visit_arg_trait< ast::Integer >::type &node) override
void visit_range(typename visit_arg_trait< ast::Range >::type &node) override
void visit_local_list_statement(typename visit_arg_trait< ast::LocalListStatement >::type &node) override
void visit_after_block(typename visit_arg_trait< ast::AfterBlock >::type &node) override
void visit_conductance_hint(typename visit_arg_trait< ast::ConductanceHint >::type &node) override
void visit_unary_expression(typename visit_arg_trait< ast::UnaryExpression >::type &node) override
void visit_random_var(typename visit_arg_trait< ast::RandomVar >::type &node) override
void visit_random_var_list(typename visit_arg_trait< ast::RandomVarList >::type &node) override
void visit_constant_statement(typename visit_arg_trait< ast::ConstantStatement >::type &node) override
void visit_eigen_newton_solver_block(typename visit_arg_trait< ast::EigenNewtonSolverBlock >::type &node) override
void visit_ba_block_type(typename visit_arg_trait< ast::BABlockType >::type &node) override
const nodes_t & lookup(ast_t &node, const std::vector< ast::AstNodeType > &t_types)
void visit_param_assign(typename visit_arg_trait< ast::ParamAssign >::type &node) override
void visit_number(typename visit_arg_trait< ast::Number >::type &node) override
void visit_node(typename visit_arg_trait< ast::Node >::type &node) override
AstNodeType
Enum type for every AST node type.
Definition: ast_decl.hpp:166
encapsulates code generation backend implementations
Definition: ast_common.hpp:26
static Node * node(Object *)
Definition: netcvode.cpp:291
short type
Definition: cabvars.h:10
static uint32_t value
Definition: scoprand.cpp:25