NSVD Reader  0.0.1
svdvisitor.hpp File Reference

SVD visitor. More...

#include <type_traits>
#include <cassert>
#include "nodamushi/visitor/visitor.hpp"

Go to the source code of this file.

Classes

struct  nodamushi::svd::handleVisit< CONTROLLER, VISITOR, T >
 
struct  nodamushi::svd::svdvisitor< VISITOR >
 
struct  nodamushi::svd::svdvisitor< VISITOR >::__svd_dummy_visitor_
 
struct  nodamushi::svd::is_same< T1, T2 >
 

Namespaces

 nodamushi
 
 nodamushi::svd
 

Macros

#define SVD_VISITOR_INIT
 initialize svd visitor class.define accept method More...
 
#define SVD_Visit_Device(v, ...)
 svd visit device function More...
 
#define SVD_PostVisit_Device(v, ...)
 svd visit device after function More...
 
#define SVD_Visit_Peripheral(v, ...)
 svd visit peripheral function More...
 
#define SVD_PostVisit_Peripheral(v, ...)
 svd visit peripheral after function More...
 
#define SVD_Visit_Interrupt(v, ...)
 
#define SVD_Visit_AddressBlock(v, ...)   VISITOR_MEMBER result visit(::nodamushi::svd::AddressBlock __VA_ARGS__& v)
 
#define SVD_Visit_Cluster(v, ...)
 
#define SVD_PostVisit_Cluster(v, ...)
 
#define SVD_Visit_Register(v, ...)
 
#define SVD_PostVisit_Register(v, ...)
 
#define SVD_Visit_Field(v, ...)
 
#define SVD_PostVisit_Field(v, ...)
 
#define SVD_Visit_EnumeratedValues(v, ...)
 
#define SVD_PostVisit_EnumeratedValues(v, ...)
 
#define SVD_Visit_EnumeratedValue(v, ...)
 
#define __NX_SVD_HANDLE_VISIT(type)
 
#define __NX_SVD_HANDLE_VISIT2(type)
 

Detailed Description

SVD visitor.

// DON'T use local class/struct
struct my_visitor
{
using this_t = my_visitor; // set this class name
#undef VISITOR_MEMBER // reset VISITOR_MEMBER(this macro is used in SVDVISITOR_INIT)
#define VISITOR_MEMBER static // set member type static
// #define VISITOR_MEMBER // * non-static version
SVD_VISITOR_INIT; // initialize macro
//-------------------------------
// visit functions
// implement the necessary elements
// if you nead const prefix, define functions the following:
// SVD_Visit_Device(v,const){
SVD_Visit_Device(v){ // v = nodamushi::svd::Device
return CONTINUE;
}
SVD_PostVisit_Device(v){ // v = nodamushi::svd::Device
return CONTINUE;
}
SVD_Visit_Peripheral(v){// v = nodamushi::svd::Peripheral
return CONTINUE;
}
SVD_PostVisit_Peripheral(v){// v = nodamushi::svd::Peripheral
return CONTINUE;
}
SVD_Visit_Interrupt(v){// v = nodamushi::svd::Interrupt
return CONTINUE;
}
SVD_Visit_AddressBlock(v){// v = nodamushi::svd::AddressBlock
return CONTINUE;
}
SVD_Visit_Register(v){// v = nodamushi::svd::Register
return CONTINUE;
}
SVD_PostVisit_Register(v){// v = nodamushi::svd::Register
return CONTINUE;
}
SVD_Visit_Field(v){// v = nodamushi::svd::Field
return CONTINUE;
}
SVD_PostVisit_Field(v){// v = nodamushi::svd::Field
return CONTINUE;
}
SVD_Visit_EnumeratedValues(v){ // field.enumeratedValues
return CONTINUE;
}
return CONTINUE;
}
SVD_Visit_EnumeratedValue(v){ // field.enumeratedValues.enumeratedValue
return CONTINUE;
}
};
//
// call visitor
//
// my_visitor::accept(device); //static
// my_visitor::accept(device, my_visitor() );// non-static
//

see sample/visitor_sample.cpp sample code.

Definition in file svdvisitor.hpp.

Macro Definition Documentation

◆ __NX_SVD_HANDLE_VISIT

#define __NX_SVD_HANDLE_VISIT (   type)
Value:
template<typename CONTROLLER, \
typename VISITOR, \
class A> \
struct handleVisit<CONTROLLER,VISITOR,type<A>>{ \
template<typename T,typename V> \
::nodamushi::visitor::result visit(RC &rcvec, VISITOR &v)
Definition: Cluster.hpp:310

Definition at line 229 of file svdvisitor.hpp.

◆ __NX_SVD_HANDLE_VISIT2

#define __NX_SVD_HANDLE_VISIT2 (   type)
Value:
template<typename CONTROLLER, \
typename VISITOR, \
class A,class B> \
struct handleVisit<CONTROLLER,VISITOR,type<A,B>>{ \
template<typename T,typename V> \
::nodamushi::visitor::result visit(RC &rcvec, VISITOR &v)
Definition: Cluster.hpp:310

Definition at line 237 of file svdvisitor.hpp.

◆ SVD_PostVisit_Cluster

#define SVD_PostVisit_Cluster (   v,
  ... 
)
Value:
template<typename S> \
VISITOR_MEMBER result postVisit(::nodamushi::svd::Cluster<S> __VA_ARGS__& v)
<cluster> element
Definition: Cluster.hpp:36

Definition at line 145 of file svdvisitor.hpp.

◆ SVD_PostVisit_Device

#define SVD_PostVisit_Device (   v,
  ... 
)
Value:
template<typename S,typename V> \
VISITOR_MEMBER result postVisit(::nodamushi::svd::Device<S,V>__VA_ARGS__& v)

svd visit device after function

Definition at line 126 of file svdvisitor.hpp.

◆ SVD_PostVisit_EnumeratedValues

#define SVD_PostVisit_EnumeratedValues (   v,
  ... 
)
Value:
template<typename S> \
VISITOR_MEMBER result postVisit(__VA_ARGS__ ::nodamushi::svd::Enumeration<S>& v)

Definition at line 160 of file svdvisitor.hpp.

◆ SVD_PostVisit_Field

#define SVD_PostVisit_Field (   v,
  ... 
)
Value:
template<typename S> \
VISITOR_MEMBER result postVisit(::nodamushi::svd::Field<S> __VA_ARGS__ & v)
<field> element
Definition: Field.hpp:41

Definition at line 155 of file svdvisitor.hpp.

◆ SVD_PostVisit_Peripheral

#define SVD_PostVisit_Peripheral (   v,
  ... 
)
Value:
template<typename S> \
VISITOR_MEMBER result postVisit(::nodamushi::svd::Peripheral<S>__VA_ARGS__& v)
<peripheral> element
Definition: Peripheral.hpp:45

svd visit peripheral after function

Definition at line 133 of file svdvisitor.hpp.

◆ SVD_PostVisit_Register

#define SVD_PostVisit_Register (   v,
  ... 
)
Value:
template<typename S> \
VISITOR_MEMBER result postVisit(__VA_ARGS__ ::nodamushi::svd::Register<S>& v)

Definition at line 150 of file svdvisitor.hpp.

◆ SVD_Visit_AddressBlock

#define SVD_Visit_AddressBlock (   v,
  ... 
)    VISITOR_MEMBER result visit(::nodamushi::svd::AddressBlock __VA_ARGS__& v)

Definition at line 139 of file svdvisitor.hpp.

◆ SVD_Visit_Cluster

#define SVD_Visit_Cluster (   v,
  ... 
)
Value:
template<typename S> \
VISITOR_MEMBER result visit(::nodamushi::svd::Cluster<S>__VA_ARGS__& v)
<cluster> element
Definition: Cluster.hpp:36
::nodamushi::visitor::result visit(RC &rcvec, VISITOR &v)
Definition: Cluster.hpp:310

Definition at line 143 of file svdvisitor.hpp.

◆ SVD_Visit_Device

#define SVD_Visit_Device (   v,
  ... 
)
Value:
template<typename S,typename V> \
VISITOR_MEMBER result visit(::nodamushi::svd::Device<S,V>__VA_ARGS__& v)
::nodamushi::visitor::result visit(RC &rcvec, VISITOR &v)
Definition: Cluster.hpp:310

svd visit device function

Definition at line 123 of file svdvisitor.hpp.

◆ SVD_Visit_EnumeratedValue

#define SVD_Visit_EnumeratedValue (   v,
  ... 
)
Value:
template<typename S> \
VISITOR_MEMBER result visit(__VA_ARGS__ ::nodamushi::svd::EnumeratedValue<S>& v)
::nodamushi::visitor::result visit(RC &rcvec, VISITOR &v)
Definition: Cluster.hpp:310

Definition at line 162 of file svdvisitor.hpp.

◆ SVD_Visit_EnumeratedValues

#define SVD_Visit_EnumeratedValues (   v,
  ... 
)
Value:
template<typename S> \
VISITOR_MEMBER result visit(__VA_ARGS__::nodamushi::svd::Enumeration<S>& v)
::nodamushi::visitor::result visit(RC &rcvec, VISITOR &v)
Definition: Cluster.hpp:310

Definition at line 158 of file svdvisitor.hpp.

◆ SVD_Visit_Field

#define SVD_Visit_Field (   v,
  ... 
)
Value:
template<typename S> \
VISITOR_MEMBER result visit(__VA_ARGS__ ::nodamushi::svd::Field<S>& v)
::nodamushi::visitor::result visit(RC &rcvec, VISITOR &v)
Definition: Cluster.hpp:310

Definition at line 153 of file svdvisitor.hpp.

◆ SVD_Visit_Interrupt

#define SVD_Visit_Interrupt (   v,
  ... 
)
Value:
template<typename S> \
VISITOR_MEMBER result visit(::nodamushi::svd::Interrupt<S>__VA_ARGS__& v)
<interrupt> element
Definition: Interrupt.hpp:27
::nodamushi::visitor::result visit(RC &rcvec, VISITOR &v)
Definition: Cluster.hpp:310

Definition at line 136 of file svdvisitor.hpp.

◆ SVD_Visit_Peripheral

#define SVD_Visit_Peripheral (   v,
  ... 
)
Value:
template<typename S> \
VISITOR_MEMBER result visit(::nodamushi::svd::Peripheral<S>__VA_ARGS__& v)
<peripheral> element
Definition: Peripheral.hpp:45
::nodamushi::visitor::result visit(RC &rcvec, VISITOR &v)
Definition: Cluster.hpp:310

svd visit peripheral function

Definition at line 130 of file svdvisitor.hpp.

◆ SVD_Visit_Register

#define SVD_Visit_Register (   v,
  ... 
)
Value:
template<typename S> \
VISITOR_MEMBER result visit(::nodamushi::svd::Register<S> __VA_ARGS__ & v)
<register> element
Definition: Register.hpp:42
::nodamushi::visitor::result visit(RC &rcvec, VISITOR &v)
Definition: Cluster.hpp:310

Definition at line 148 of file svdvisitor.hpp.

◆ SVD_VISITOR_INIT

#define SVD_VISITOR_INIT
Value:
VISITOR_INIT \
template<typename T> \
static void accept(T& t){ \
using namespace ::nodamushi::visitor; \
__NODAMUSHI_VISIT_ENUM__(VISITOR_MEMBER,mt); \
static_assert(is_static<T,__member_type__>::value,"static visitor"); \
} \
template<typename T> \
static void accept(T& t,this_t& o){ \
using namespace ::nodamushi::visitor; \
__NODAMUSHI_VISIT_ENUM__(VISITOR_MEMBER,mt); \
static_assert(!is_static<T,__member_type__>::value,"instance visitor"); \
template<typename T> \
static void accept(this_t& o,T& t){\
using namespace ::nodamushi::visitor; \
__NODAMUSHI_VISIT_ENUM__(VISITOR_MEMBER,mt); \
static_assert(!is_static<T,__member_type__>::value,"instance visitor"); \
#define VISITOR_MEMBER
Definition: visitor.hpp:70
static result visit(T &t)
Definition: svdvisitor.hpp:185

initialize svd visitor class.define accept method

Definition at line 96 of file svdvisitor.hpp.