Menu

CommandLineParameterGenerator.h File Reference

#include <stdlib.h>
#include <iostream>
#include <vector>
#include <boost/tokenizer.hpp>
#include "util/CommandLineParameterProvider.h"

Go to the source code of this file.

Defines

#define GENERATE_STRUCT_PARAMETER_HEAD   struct Parameter {
#define GENERATE_STRUCT_PARAMETER_PARAM(TYPE, VARIABLE)   TYPE VARIABLE;
#define GENERATE_STRUCT_PARAMETER_TAIL   };
#define CLP_CLASS_START(class_name, desc, option_name, option_desc, pd1, pd2, pd3, pd4, pd5)
#define CLP_CLASS_TRANSFORM_START   void getParameter(Parameter& param) {
#define CLP_CLASS_TRANSFORM_MIDDLE
#define CLP_CLASS_TRANSFORM_OPTION(desc, option_type, option_variable)
#define CLP_CLASS_TRANSFORM_END(desc)
#define NAMESPACE(class_name)
#define CLP1(class_name, desc, option_name, option_desc, pt1, pv1, pd1)
#define CLP2(class_name, desc, option_name, option_desc, pt1, pv1, pd1, pt2, pv2, pd2)
#define CLP3(class_name, desc, option_name, option_desc, pt1, pv1, pd1, pt2, pv2, pd2, pt3, pv3, pd3)
#define CLP4(class_name, desc, option_name, option_desc, pt1, pv1, pd1, pt2, pv2, pd2, pt3, pv3, pd3, pt4, pv4, pd4)
#define CLP5(class_name, desc, option_name, option_desc, pt1, pv1, pd1, pt2, pv2, pd2, pt3, pv3, pd3, pt4, pv4, pd4, pt5, pv5, pd5)

Define Documentation

#define CLP1 ( class_name,
desc,
option_name,
option_desc,
pt1,
pv1,
pd1   ) 
Value:
NAMESPACE(class_name) \
    CLP_CLASS_START(class_name,desc,option_name,option_desc, pd1, "", "", "", "") \
    GENERATE_STRUCT_PARAMETER_HEAD \
    GENERATE_STRUCT_PARAMETER_PARAM(pt1, pv1) \
    GENERATE_STRUCT_PARAMETER_TAIL \
    CLP_CLASS_TRANSFORM_START \
        param.pv1=pd1;\
    CLP_CLASS_TRANSFORM_MIDDLE \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt1, pv1) \
    CLP_CLASS_TRANSFORM_END(desc) \
#define CLP2 ( class_name,
desc,
option_name,
option_desc,
pt1,
pv1,
pd1,
pt2,
pv2,
pd2   ) 
Value:
NAMESPACE(class_name) \
    CLP_CLASS_START(class_name,desc,option_name,option_desc, pd1, pd2, "", "", "") \
    GENERATE_STRUCT_PARAMETER_HEAD \
    GENERATE_STRUCT_PARAMETER_PARAM(pt1, pv1) \
    GENERATE_STRUCT_PARAMETER_PARAM(pt2, pv2) \
    GENERATE_STRUCT_PARAMETER_TAIL \
    CLP_CLASS_TRANSFORM_START \
            param.pv1=pd1;\
            param.pv2=pd2;\
    CLP_CLASS_TRANSFORM_MIDDLE \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt1, pv1) \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt2, pv2) \
    CLP_CLASS_TRANSFORM_END(desc)
#define CLP3 ( class_name,
desc,
option_name,
option_desc,
pt1,
pv1,
pd1,
pt2,
pv2,
pd2,
pt3,
pv3,
pd3   ) 
Value:
NAMESPACE(class_name) \
    CLP_CLASS_START(class_name,desc,option_name,option_desc, pd1, pd2, pd3, "", "") \
    GENERATE_STRUCT_PARAMETER_HEAD \
    GENERATE_STRUCT_PARAMETER_PARAM(pt1, pv1) \
    GENERATE_STRUCT_PARAMETER_PARAM(pt2, pv2) \
    GENERATE_STRUCT_PARAMETER_PARAM(pt3, pv3) \
    GENERATE_STRUCT_PARAMETER_TAIL \
    CLP_CLASS_TRANSFORM_START \
            param.pv1=pd1;\
            param.pv2=pd2;\
            param.pv3=pd3;\
    CLP_CLASS_TRANSFORM_MIDDLE \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt1, pv1) \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt2, pv2) \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt3, pv3) \
    CLP_CLASS_TRANSFORM_END(desc)
#define CLP4 ( class_name,
desc,
option_name,
option_desc,
pt1,
pv1,
pd1,
pt2,
pv2,
pd2,
pt3,
pv3,
pd3,
pt4,
pv4,
pd4   ) 
Value:
NAMESPACE(class_name) \
    CLP_CLASS_START(class_name,desc,option_name,option_desc, pd1, pd2, pd3, pd4, "") \
    GENERATE_STRUCT_PARAMETER_HEAD \
    GENERATE_STRUCT_PARAMETER_PARAM(pt1, pv1) \
    GENERATE_STRUCT_PARAMETER_PARAM(pt2, pv2) \
    GENERATE_STRUCT_PARAMETER_PARAM(pt3, pv3) \
    GENERATE_STRUCT_PARAMETER_PARAM(pt4, pv4) \
    GENERATE_STRUCT_PARAMETER_TAIL \
    CLP_CLASS_TRANSFORM_START \
            param.pv1=pd1;\
            param.pv2=pd2;\
            param.pv3=pd3;\
            param.pv4=pd4;\
    CLP_CLASS_TRANSFORM_MIDDLE \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt1, pv1) \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt2, pv2) \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt3, pv3) \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt4, pv4) \
    CLP_CLASS_TRANSFORM_END(desc)
#define CLP5 ( class_name,
desc,
option_name,
option_desc,
pt1,
pv1,
pd1,
pt2,
pv2,
pd2,
pt3,
pv3,
pd3,
pt4,
pv4,
pd4,
pt5,
pv5,
pd5   ) 
Value:
NAMESPACE(class_name) \
    CLP_CLASS_START(class_name,desc,option_name,option_desc, pd1, pd2, pd3, pd4, pd5) \
    GENERATE_STRUCT_PARAMETER_HEAD \
    GENERATE_STRUCT_PARAMETER_PARAM(pt1, pv1) \
    GENERATE_STRUCT_PARAMETER_PARAM(pt2, pv2) \
    GENERATE_STRUCT_PARAMETER_PARAM(pt3, pv3) \
    GENERATE_STRUCT_PARAMETER_PARAM(pt4, pv4) \
    GENERATE_STRUCT_PARAMETER_PARAM(pt5, pv5) \
    GENERATE_STRUCT_PARAMETER_TAIL \
    CLP_CLASS_TRANSFORM_START \
            param.pv1=pd1;\
            param.pv2=pd2;\
            param.pv3=pd3;\
            param.pv4=pd4;\
            param.pv5=pd5;\
    CLP_CLASS_TRANSFORM_MIDDLE \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt1, pv1) \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt2, pv2) \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt3, pv3) \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt4, pv4) \
            CLP_CLASS_TRANSFORM_OPTION(desc, pt5, pv5) \
    CLP_CLASS_TRANSFORM_END(desc)
#define CLP_CLASS_START ( class_name,
desc,
option_name,
option_desc,
pd1,
pd2,
pd3,
pd4,
pd5   ) 
Value:
class CLP::config::class_name {\
                typedef boost::details::pool::singleton_default<class_name> class_name##__;\
                bool _used;\
                std::vector<std::string> ips;\
                boost::program_options::options_description options;\
              public: \
                class_name() : _used(false), options(desc" Options") {\
                    options.add_options() (option_name,\
                        boost::program_options::value<std::vector<std::string> >(&ips)->composing(),\
                        option_desc); \
                    famouso::util::cmdline_options::instance().add(options);\
                }\
                struct Parameter; \
                static inline class_name& instance() { \
                    return class_name##__::instance();\
                }\
                bool used() {\
                    bool u=_used;\
                    _used=true;\
                    return u;\
                }
#define CLP_CLASS_TRANSFORM_END ( desc   ) 
Value:
} catch(boost::bad_lexical_cast &) { \
                                 throw desc": invalid or incomplete arguments";\
                             } \
                         } else {\
                            if (used()) \
                                throw desc": to few command line arguments";\
                        }\
                    } catch (const char *c) {\
                        std::cout << c << std::endl << std::endl << options << std::endl; \
                        exit(0);\
                    }\
                }\
           }
#define CLP_CLASS_TRANSFORM_MIDDLE
Value:
try {\
                        if ( !ips.empty() ) {\
                            used();\
                            typedef boost::tokenizer<boost::char_separator<char> > tokenizer;\
                            boost::char_separator<char> sep(":");\
                            std::string str(ips.back());\
                            ips.pop_back();\
                            tokenizer tokens(str, sep);\
                            tokenizer::iterator tok_iter = tokens.begin(); \
                            try { \
#define CLP_CLASS_TRANSFORM_OPTION ( desc,
option_type,
option_variable   ) 
Value:
if (tok_iter!=tokens.end()) {\
                                    param.option_variable=boost::lexical_cast<option_type>(*tok_iter); \
                                    ++tok_iter; \
                                } else { \
                                    throw desc": invalid or incomplete arguments"; \
                                }
#define CLP_CLASS_TRANSFORM_START   void getParameter(Parameter& param) {
#define GENERATE_STRUCT_PARAMETER_HEAD   struct Parameter {
#define GENERATE_STRUCT_PARAMETER_PARAM ( TYPE,
VARIABLE   )     TYPE VARIABLE;
#define GENERATE_STRUCT_PARAMETER_TAIL   };
#define NAMESPACE ( class_name   ) 
Value:
namespace CLP { \
        namespace config { \
            class class_name; \
        } \
    }