1#ifndef ROSE_Source_Generation_Factory_H 
    2#define ROSE_Source_Generation_Factory_H 
    4#include <Rose/Source/Generation/API.h> 
    6namespace Rose { 
namespace Source { 
namespace Generation {
 
   17template <
typename CRT, 
typename API>
 
   28template <
typename CRT, 
typename apiT, Object otag>
 
   31using tplargs_t = std::vector<SgTemplateArgument *>;
 
   33template <
typename CRT, 
typename API>
 
   58    template <
Object otag, 
typename... Args>
 
   74    template <
Object otag, 
typename... Args>
 
   90    template <
Object otag, 
typename... Args>
 
  101    template <Object otag>
 
  102    using access_return_t = std::conditional_t<otag == Object::a_class || otag == Object::a_typedef, SgType, SgExpression>;
 
  104    template <Object otag, std::enable_if_t<otag == Object::a_
class || otag == Object::a_typedef> * = 
nullptr>
 
  107    template <Object otag, std::enable_if_t<otag != Object::a_
class && otag != Object::a_typedef> * = 
nullptr>
 
  122    template <
Object otag, 
typename... Args>
 
 
  128#include "Rose/Source/Generation/factory/factory.txx" 
  129#include "Rose/Source/Generation/factory/namespaces.txx" 
  130#include "Rose/Source/Generation/factory/classes.txx" 
  131#include "Rose/Source/Generation/factory/typedefs.txx" 
  132#include "Rose/Source/Generation/factory/variables.txx" 
  133#include "Rose/Source/Generation/factory/functions.txx" 
permits to gather types and symbols to extract an API from a set of headers.
 
facilitates the manipulation of source-files (esp.
 
constructs expressions and types for the given API
 
SgExpression * access(symbol_t< otag > *API::*obj, SgExpression *parent, Args... args) const
Build expression to access a member of the parent expression.
 
reference_t< otag > * reference(symbol_t< otag > *API::*obj, SgNamedType *parent, Args... args) const
Return an expression or type referencing the object.
 
declaration_t< otag > * instantiate(symbol_t< otag > *API::*obj, SgNamedType *parent, Args... args) const
Return an instantiation.
 
std::conditional_t< otag==Object::a_class||otag==Object::a_typedef, SgType, SgExpression > access_return_t
Select return type for access based on Object type.
 
access_return_t< otag > * access(symbol_t< otag > *API::*obj, SgNamedType *parent, Args... args) const
Build expression or type to access static member and subtype of the parent type.
 
This class represents the notion of an expression. Expressions are derived from SgLocatedNodes,...
 
typename object_helper< otag >::ref_t reference_t
The SgReference specialization for an Object kind /tparam otag an Object kind.
 
Object
The five kind of objects manipulated by Rose::CodeGen::API and associated Rose::CodeGen::Factory.
 
typename object_helper< otag >::decl_t declaration_t
The SgDeclarationStatement specialization for an Object kind /tparam otag an Object kind.
 
typename object_helper< otag >::symbol_t symbol_t
The SgSymbol specialization for an Object kind /tparam otag an Object kind.
 
enables partial specializations w.r.t the template parameter otag