9 #ifndef __NODAMUSHI_SVD_VALUE_DEFINE_HPP__ 10 #define __NODAMUSHI_SVD_VALUE_DEFINE_HPP__ 19 # ifdef _ENABLE_GNU_TEMPLATE_STRING_ 21 template<
char... name>
struct value_type_builder_name
23 template<
typename T,
bool attribute,
bool required>
27 template<
typename T,
bool attribute,
bool required,
typename name>
struct value_type_builder
29 using type =
typename name::template type<T,attribute,required>;
39 template<
typename s>
struct seq;
40 template<
size_t... s>
struct seq<
std::integer_sequence<size_t, s...>>{
50 # ifdef _ENABLE_GNU_TEMPLATE_STRING_ 52 template<
typename T,
bool attribute,
bool required,
typename name>
55 template<
typename C,C... name>
56 constexpr ::nodamushi::svd::details::value_type_builder_name<name...>
operator ""_value_type_builder(){
return {};}
60 template<
typename T,
bool attribute,
bool required,
char... name>
69 #define _SVD_VALUE_(type,name,attribute,reqired,MACRO,...) MACRO(type,name,attribute,required) 70 #define _SVD_VALUE0_(type,name,attribute,dummy) __SVD_VALUE__(type,attribute,false,name) 71 #define _SVD_VALUE1_(type,name,attribute,required) __SVD_VALUE__(type,attribute,required,name) 73 # define __SVD_VALUE__(type,attribute,required,name) \ 74 ::nodamushi::svd::value_t<type,attribute,required,__SVD_VALUE_EXPAND_NAME__(name)> name 77 # ifdef _ENABLE_GNU_TEMPLATE_STRING_ 78 # define __SVD_VALUE_EXPAND_NAME__(name)\ 79 decltype(#name##_value_type_builder) 83 # define __SVD_VALUE_EXPAND_NAME__(name) __SVD_VALUE_EXPAND_NAME2__(#name) 84 # define __SVD_VALUE_EXPAND_NAME2__(name) ::nodamushi::at0<32>(name),::nodamushi::at(name,1 ),::nodamushi::at(name,2 ),::nodamushi::at(name,3 ),::nodamushi::at(name,4 ),::nodamushi::at(name,5 ),::nodamushi::at(name,6 ),::nodamushi::at(name,7 ),::nodamushi::at(name,8 ),::nodamushi::at(name,9 ),::nodamushi::at(name,10),::nodamushi::at(name,11),::nodamushi::at(name,12),::nodamushi::at(name,13),::nodamushi::at(name,14),::nodamushi::at(name,15),::nodamushi::at(name,16),::nodamushi::at(name,17),::nodamushi::at(name,18),::nodamushi::at(name,19),::nodamushi::at(name,20),::nodamushi::at(name,21),::nodamushi::at(name,22),::nodamushi::at(name,23),::nodamushi::at(name,24),::nodamushi::at(name,25),::nodamushi::at(name,26),::nodamushi::at(name,27),::nodamushi::at(name,28),::nodamushi::at(name,29),::nodamushi::at(name,30),::nodamushi::at(name,31) 87 #endif // __NODAMUSHI_SVD_VALUE_DEFINE_HPP__ static constexpr size_t size
static constexpr char get_char(size_t index)
constexpr char at_const_string(size_t index)
typename details::value_type_builder< T, attribute, required, name... >::type value_t
constexpr size_t get_const_string_length()
This class reperesents SVD(xml) element / attribute.
typename seq< std::make_integer_sequence< size_t, size > >::type type
value class, empty_value_access_error class