1.0.2 • Published 3 months ago
nv-cli-creat-switch-enum v1.0.2
nv-cli-creat-switch-enum
- cli-tool , it will creat a constexpr cpp-lambda from a input-json(dict only, no array), this lambda can creat a nest-enum-like object
install
- npm install nv-cli-creat-switch-enum -g
usage
Usage: nv_cli_creat_switch_enum [options]
Options:
-n, --name global name : default nest_enum_g
-r, --root_customer_defined_enum_value default 0
-j, --also_output_corresponding_js_code default false
-i, --input input string ,default stdin
-o, --output output string,default stdout
-h, --help usage
example
//paste json/dict config here: then press ctrl+D
{
k0 :{
k00: null,
k01: null,
},
k1 :{
k10 :{
k100:null,
k101:null,
k102:null
},
k11 :null
}
}
//press ctrl+D
//cpp :
template<typename UnderLyingT=uint32_t> constexpr auto nest_enum_g() {
struct S {
constexpr size_t operator &() const noexcept {return(static_cast<size_t >(1 ));}
constexpr size_t operator *() const noexcept {return(static_cast<size_t >(0 ));}
constexpr size_t operator ~() const noexcept {return(static_cast<size_t >(0 ));}
constexpr const char* operator --() const noexcept {return( ("nest_enum_g"));}
constexpr UnderLyingT operator ()() const noexcept {return(static_cast<UnderLyingT>(0 ));}
////<----------just for print: ancestor-name-path-list--------------->
constexpr auto operator []() const noexcept {return(std::array<const char*const,0>{});}
////</---------just for print: ancestor-name-path-list--------------->
struct {
constexpr size_t operator &() const noexcept {return(static_cast<size_t >(2 ));}
constexpr size_t operator *() const noexcept {return(static_cast<size_t >(0 ));}
constexpr size_t operator ~() const noexcept {return(static_cast<size_t >(1 ));}
constexpr const char* operator --() const noexcept {return( ("k0"));}
constexpr UnderLyingT operator ()() const noexcept {return(static_cast<UnderLyingT>(0 ));}
////<----------just for print: ancestor-name-path-list--------------->
constexpr auto operator []() const noexcept {return(std::array{"k0"});}
////</---------just for print: ancestor-name-path-list--------------->
struct {
constexpr size_t operator &() const noexcept {return(static_cast<size_t >(3 ));}
constexpr size_t operator *() const noexcept {return(static_cast<size_t >(0 ));}
constexpr size_t operator ~() const noexcept {return(static_cast<size_t >(2 ));}
constexpr const char* operator --() const noexcept {return( ("k00"));}
constexpr UnderLyingT operator ()() const noexcept {return(static_cast<UnderLyingT>(0 ));}
////<-----------just for print: ancestor-name-path-list--------------->
constexpr auto operator []() const noexcept {return(std::array{"k0","k00"});}
////</----------just for print: ancestor-name-path-list--------------->
} k00 ;
struct {
constexpr size_t operator &() const noexcept {return(static_cast<size_t >(4 ));}
constexpr size_t operator *() const noexcept {return(static_cast<size_t >(1 ));}
constexpr size_t operator ~() const noexcept {return(static_cast<size_t >(2 ));}
constexpr const char* operator --() const noexcept {return( ("k01"));}
constexpr UnderLyingT operator ()() const noexcept {return(static_cast<UnderLyingT>(1 ));}
////<-----------just for print: ancestor-name-path-list--------------->
constexpr auto operator []() const noexcept {return(std::array{"k0","k01"});}
////</----------just for print: ancestor-name-path-list--------------->
} k01 ;
} k0 ;
struct {
constexpr size_t operator &() const noexcept {return(static_cast<size_t >(5 ));}
constexpr size_t operator *() const noexcept {return(static_cast<size_t >(1 ));}
constexpr size_t operator ~() const noexcept {return(static_cast<size_t >(1 ));}
constexpr const char* operator --() const noexcept {return( ("k1"));}
constexpr UnderLyingT operator ()() const noexcept {return(static_cast<UnderLyingT>(1 ));}
////<----------just for print: ancestor-name-path-list--------------->
constexpr auto operator []() const noexcept {return(std::array{"k1"});}
////</---------just for print: ancestor-name-path-list--------------->
struct {
constexpr size_t operator &() const noexcept {return(static_cast<size_t >(6 ));}
constexpr size_t operator *() const noexcept {return(static_cast<size_t >(0 ));}
constexpr size_t operator ~() const noexcept {return(static_cast<size_t >(2 ));}
constexpr const char* operator --() const noexcept {return( ("k10"));}
constexpr UnderLyingT operator ()() const noexcept {return(static_cast<UnderLyingT>(0 ));}
////<----------just for print: ancestor-name-path-list--------------->
constexpr auto operator []() const noexcept {return(std::array{"k1","k10"});}
////</---------just for print: ancestor-name-path-list--------------->
struct {
constexpr size_t operator &() const noexcept {return(static_cast<size_t >(7 ));}
constexpr size_t operator *() const noexcept {return(static_cast<size_t >(0 ));}
constexpr size_t operator ~() const noexcept {return(static_cast<size_t >(3 ));}
constexpr const char* operator --() const noexcept {return( ("k100"));}
constexpr UnderLyingT operator ()() const noexcept {return(static_cast<UnderLyingT>(0 ));}
////<-----------just for print: ancestor-name-path-list--------------->
constexpr auto operator []() const noexcept {return(std::array{"k1","k10","k100"});}
////</----------just for print: ancestor-name-path-list--------------->
} k100 ;
struct {
constexpr size_t operator &() const noexcept {return(static_cast<size_t >(8 ));}
constexpr size_t operator *() const noexcept {return(static_cast<size_t >(1 ));}
constexpr size_t operator ~() const noexcept {return(static_cast<size_t >(3 ));}
constexpr const char* operator --() const noexcept {return( ("k101"));}
constexpr UnderLyingT operator ()() const noexcept {return(static_cast<UnderLyingT>(1 ));}
////<-----------just for print: ancestor-name-path-list--------------->
constexpr auto operator []() const noexcept {return(std::array{"k1","k10","k101"});}
////</----------just for print: ancestor-name-path-list--------------->
} k101 ;
struct {
constexpr size_t operator &() const noexcept {return(static_cast<size_t >(9 ));}
constexpr size_t operator *() const noexcept {return(static_cast<size_t >(2 ));}
constexpr size_t operator ~() const noexcept {return(static_cast<size_t >(3 ));}
constexpr const char* operator --() const noexcept {return( ("k102"));}
constexpr UnderLyingT operator ()() const noexcept {return(static_cast<UnderLyingT>(2 ));}
////<-----------just for print: ancestor-name-path-list--------------->
constexpr auto operator []() const noexcept {return(std::array{"k1","k10","k102"});}
////</----------just for print: ancestor-name-path-list--------------->
} k102 ;
} k10 ;
struct {
constexpr size_t operator &() const noexcept {return(static_cast<size_t >(10 ));}
constexpr size_t operator *() const noexcept {return(static_cast<size_t >(1 ));}
constexpr size_t operator ~() const noexcept {return(static_cast<size_t >(2 ));}
constexpr const char* operator --() const noexcept {return( ("k11"));}
constexpr UnderLyingT operator ()() const noexcept {return(static_cast<UnderLyingT>(1 ));}
////<-----------just for print: ancestor-name-path-list--------------->
constexpr auto operator []() const noexcept {return(std::array{"k1","k11"});}
////</----------just for print: ancestor-name-path-list--------------->
} k11 ;
} k1 ;
static void $show_all_paths() noexcept {
constexpr auto enums = S{};
std::cout<< "" << std::endl;
for(auto& nm: enums.k0 []) {std::cout<<"."<<nm;} std::cout<<std::endl;
for(auto& nm: enums.k0.k00 []) {std::cout<<"."<<nm;} std::cout<<std::endl;
for(auto& nm: enums.k0.k01 []) {std::cout<<"."<<nm;} std::cout<<std::endl;
for(auto& nm: enums.k1 []) {std::cout<<"."<<nm;} std::cout<<std::endl;
for(auto& nm: enums.k1.k10 []) {std::cout<<"."<<nm;} std::cout<<std::endl;
for(auto& nm: enums.k1.k10.k100[]) {std::cout<<"."<<nm;} std::cout<<std::endl;
for(auto& nm: enums.k1.k10.k101[]) {std::cout<<"."<<nm;} std::cout<<std::endl;
for(auto& nm: enums.k1.k10.k102[]) {std::cout<<"."<<nm;} std::cout<<std::endl;
for(auto& nm: enums.k1.k11 []) {std::cout<<"."<<nm;} std::cout<<std::endl;
};
static void $show_all_names() noexcept {
constexpr auto enums = S{};
std::cout<< "--<enums>" << " : " << --enums << std::endl;
std::cout<< "--<enums>.k0 " << " : " << +(--enums.k0 ) << std::endl;
std::cout<< "--<enums>.k0.k00 " << " : " << +(--enums.k0.k00 ) << std::endl;
std::cout<< "--<enums>.k0.k01 " << " : " << +(--enums.k0.k01 ) << std::endl;
std::cout<< "--<enums>.k1 " << " : " << +(--enums.k1 ) << std::endl;
std::cout<< "--<enums>.k1.k10 " << " : " << +(--enums.k1.k10 ) << std::endl;
std::cout<< "--<enums>.k1.k10.k100" << " : " << +(--enums.k1.k10.k100) << std::endl;
std::cout<< "--<enums>.k1.k10.k101" << " : " << +(--enums.k1.k10.k101) << std::endl;
std::cout<< "--<enums>.k1.k10.k102" << " : " << +(--enums.k1.k10.k102) << std::endl;
std::cout<< "--<enums>.k1.k11 " << " : " << +(--enums.k1.k11 ) << std::endl;
};
static void $show_using_id_as_enum_value() noexcept {
constexpr auto enums = S{};
std::cout<< "id(dfs sequence from 1)_as_enum_value :" << "&<enums>" << " : " << +(&enums) << std::endl;
std::cout<< "&<enums>.k0 " << " : " << +(&enums.k0 ) << std::endl;
std::cout<< "&<enums>.k0.k00 " << " : " << +(&enums.k0.k00 ) << std::endl;
std::cout<< "&<enums>.k0.k01 " << " : " << +(&enums.k0.k01 ) << std::endl;
std::cout<< "&<enums>.k1 " << " : " << +(&enums.k1 ) << std::endl;
std::cout<< "&<enums>.k1.k10 " << " : " << +(&enums.k1.k10 ) << std::endl;
std::cout<< "&<enums>.k1.k10.k100" << " : " << +(&enums.k1.k10.k100) << std::endl;
std::cout<< "&<enums>.k1.k10.k101" << " : " << +(&enums.k1.k10.k101) << std::endl;
std::cout<< "&<enums>.k1.k10.k102" << " : " << +(&enums.k1.k10.k102) << std::endl;
std::cout<< "&<enums>.k1.k11 " << " : " << +(&enums.k1.k11 ) << std::endl;
};
static void $show_using_depth_as_enum_value() noexcept {
constexpr auto enums = S{};
std::cout<< "depth_as_enum_value :" << "~<enums>" << " : " << +(~enums) << std::endl;
std::cout<< "~<enums>.k0 " << " : " << +(~enums.k0 ) << std::endl;
std::cout<< "~<enums>.k0.k00 " << " : " << +(~enums.k0.k00 ) << std::endl;
std::cout<< "~<enums>.k0.k01 " << " : " << +(~enums.k0.k01 ) << std::endl;
std::cout<< "~<enums>.k1 " << " : " << +(~enums.k1 ) << std::endl;
std::cout<< "~<enums>.k1.k10 " << " : " << +(~enums.k1.k10 ) << std::endl;
std::cout<< "~<enums>.k1.k10.k100" << " : " << +(~enums.k1.k10.k100) << std::endl;
std::cout<< "~<enums>.k1.k10.k101" << " : " << +(~enums.k1.k10.k101) << std::endl;
std::cout<< "~<enums>.k1.k10.k102" << " : " << +(~enums.k1.k10.k102) << std::endl;
std::cout<< "~<enums>.k1.k11 " << " : " << +(~enums.k1.k11 ) << std::endl;
};
static void $show_using_index_as_enum_value() noexcept {
constexpr auto enums = S{};
std::cout<< "index_as_enum_value :" << "*<enums>" << " : " << +(*enums) << std::endl;
std::cout<< "*<enums>.k0 " << " : " << +(*enums.k0 ) << std::endl;
std::cout<< "*<enums>.k0.k00 " << " : " << +(*enums.k0.k00 ) << std::endl;
std::cout<< "*<enums>.k0.k01 " << " : " << +(*enums.k0.k01 ) << std::endl;
std::cout<< "*<enums>.k1 " << " : " << +(*enums.k1 ) << std::endl;
std::cout<< "*<enums>.k1.k10 " << " : " << +(*enums.k1.k10 ) << std::endl;
std::cout<< "*<enums>.k1.k10.k100" << " : " << +(*enums.k1.k10.k100) << std::endl;
std::cout<< "*<enums>.k1.k10.k101" << " : " << +(*enums.k1.k10.k101) << std::endl;
std::cout<< "*<enums>.k1.k10.k102" << " : " << +(*enums.k1.k10.k102) << std::endl;
std::cout<< "*<enums>.k1.k11 " << " : " << +(*enums.k1.k11 ) << std::endl;
};
static void $show_using_customer_defined_as_enum_value() noexcept {
constexpr auto enums = S{};
std::cout<< "customer_defined_as_enum_value :" << "<enums>()" << " : " << +(enums()) << std::endl;
std::cout<< "<enums>.k0 ()" << " : " << +(enums.k0 ()) << std::endl;
std::cout<< "<enums>.k0.k00 ()" << " : " << +(enums.k0.k00 ()) << std::endl;
std::cout<< "<enums>.k0.k01 ()" << " : " << +(enums.k0.k01 ()) << std::endl;
std::cout<< "<enums>.k1 ()" << " : " << +(enums.k1 ()) << std::endl;
std::cout<< "<enums>.k1.k10 ()" << " : " << +(enums.k1.k10 ()) << std::endl;
std::cout<< "<enums>.k1.k10.k100()" << " : " << +(enums.k1.k10.k100()) << std::endl;
std::cout<< "<enums>.k1.k10.k101()" << " : " << +(enums.k1.k10.k101()) << std::endl;
std::cout<< "<enums>.k1.k10.k102()" << " : " << +(enums.k1.k10.k102()) << std::endl;
std::cout<< "<enums>.k1.k11 ()" << " : " << +(enums.k1.k11 ()) << std::endl;
};
};;
return S{};
};
LICENSE
- ISC
1.0.2
3 months ago