1.0.2 • Published 3 months ago

nv-cli-creat-switch-enum v1.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
3 months ago

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