16 #ifndef INCLUDE_NN_NLIB_NFLAGS_H_ 17 #define INCLUDE_NN_NLIB_NFLAGS_H_ 37 static const int kMaxPath = 512;
38 static const int kMaxFileName = 256;
39 static const int kMaxDirName = 512;
40 static const int kMaxExtension = 256;
41 static errno_t GetFileName(
const char* path,
42 char (&filename)[kMaxFileName]) NLIB_NOEXCEPT
NLIB_NONNULL;
43 static errno_t GetDirName(
const char* path,
44 char (&dirname)[kMaxDirName]) NLIB_NOEXCEPT
NLIB_NONNULL;
46 static errno_t GetStringCommaList(
char* arg,
char** vec,
size_t vec_count,
51 return GetStringCommaList(arg, &vec[0], N, written_count);
54 static errno_t GetInt32CommaList(
char* arg, int32_t* vec,
size_t vec_count,
59 return GetInt32CommaList(arg, &vec[0], N, written_count);
62 static errno_t GetDoubleCommaList(
char* arg,
double* vec,
size_t vec_count,
67 return GetDoubleCommaList(arg, &vec[0], N, written_count);
71 static bool GetBoolFromEnv(
const char* varname,
bool defval)
NLIB_NOEXCEPT;
72 static int32_t GetInt32FromEnv(
const char* varname, int32_t defval)
NLIB_NOEXCEPT;
73 static int64_t GetInt64FromEnv(
const char* varname, int64_t defval)
NLIB_NOEXCEPT;
74 static double GetDoubleFromEnv(
const char* varname,
double defval)
NLIB_NOEXCEPT;
76 #ifdef NLIB_CXX11_DEFAULT_TEMPLATE_ARGUMENT_FOR_FUNCTION_TEMPLATES 77 template<
class DUMMY =
void>
79 static const char* GetStringFromEnv(
UniquePtr<
char[]>& buf,
88 #ifdef NLIB_CXX11_DEFAULT_TEMPLATE_ARGUMENT_FOR_FUNCTION_TEMPLATES 91 inline const char* Nflags::GetStringFromEnv(
UniquePtr<
char[]>& buf,
93 const char* defval) NLIB_NOEXCEPT {
94 if (!varname)
return defval;
98 if (e != 0 || n == 0)
return defval;
100 char* bufmem =
new (std::nothrow)
char[n];
101 if (!bufmem)
return defval;
114 NLIB_VIS_PUBLIC void AddDefOptBool(
const char* opt_name,
bool def_value,
const char* desc,
116 NLIB_VIS_PUBLIC void AddDefOptInt32(
const char* opt_name, int32_t def_value,
const char* desc,
118 NLIB_VIS_PUBLIC void AddDefOptDouble(
const char* opt_name,
double def_value,
const char* desc,
120 NLIB_VIS_PUBLIC void AddDefOptString(
const char* opt_name,
const char* def_value,
const char* desc,
125 #define NLIB_FLAGS_DEFINE_bool(opt_name, def_value, desc) \ 126 bool NLIB_FLAGS_##opt_name; \ 127 class NLIB_FLAGS_CL_##opt_name { \ 129 NLIB_FLAGS_CL_##opt_name() { \ 130 ::nlib_ns::nflags::AddDefOptBool(#opt_name, def_value, desc, &NLIB_FLAGS_##opt_name); \ 132 } NLIB_FLAGS_CL_##opt_name##_ 134 #define NLIB_FLAGS_DEFINE_int32(opt_name, def_value, desc) \ 135 int32_t NLIB_FLAGS_##opt_name; \ 136 class NLIB_FLAGS_CL_##opt_name { \ 138 NLIB_FLAGS_CL_##opt_name() { \ 139 ::nlib_ns::nflags::AddDefOptInt32(#opt_name, def_value, desc, \ 140 &NLIB_FLAGS_##opt_name); \ 142 } NLIB_FLAGS_CL_##opt_name##_ 144 #define NLIB_FLAGS_DEFINE_double(opt_name, def_value, desc) \ 145 double NLIB_FLAGS_##opt_name; \ 146 class NLIB_FLAGS_CL_##opt_name { \ 148 NLIB_FLAGS_CL_##opt_name() { \ 149 ::nlib_ns::nflags::AddDefOptDouble(#opt_name, def_value, desc, \ 150 &NLIB_FLAGS_##opt_name); \ 152 } NLIB_FLAGS_CL_##opt_name##_ 154 #define NLIB_FLAGS_DEFINE_string(opt_name, def_value, desc) \ 155 const char* NLIB_FLAGS_##opt_name; \ 156 class NLIB_FLAGS_CL_##opt_name { \ 158 NLIB_FLAGS_CL_##opt_name() { \ 159 ::nlib_ns::nflags::AddDefOptString(#opt_name, def_value, desc, \ 160 &NLIB_FLAGS_##opt_name); \ 162 } NLIB_FLAGS_CL_##opt_name##_ 164 #define NLIB_FLAGS_DECLARE_bool(opt_name) extern bool NLIB_FLAGS_##opt_name 165 #define NLIB_FLAGS_DECLARE_int32(opt_name) extern int32_t NLIB_FLAGS_##opt_name 166 #define NLIB_FLAGS_DECLARE_double(opt_name) extern double NLIB_FLAGS_##opt_name 167 #define NLIB_FLAGS_DECLARE_string(opt_name) extern const char* NLIB_FLAGS_##opt_name 175 #endif // INCLUDE_NN_NLIB_NFLAGS_H_ static errno_t GetDoubleCommaList(char *arg, double(&vec)[N], size_t *written_count) noexcept
The function template version of GetDoubleCommaList.
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
Prohibits use of the copy constructor and assignment operator for the class specified by TypeName...
static errno_t GetStringCommaList(char *arg, char *(&vec)[N], size_t *written_count) noexcept
The function template version of GetStringCommaList.
UniquePtr owns the pointer, and when it goes out of scope, the pointer is released by the destructor ...
Defines that class that is corresponding to std::unique_ptr.
#define NLIB_FLAGS_DECLARE_bool(opt_name)
Enables the use of an NLIB_FLAGS_option name that was defined in a different place.
The class for parsing command line flags.
#define NLIB_NOEXCEPT
Defines noexcept geared to the environment, or the equivalent.
A file that contains the configuration information for each development environment.
static errno_t GetInt32CommaList(char *arg, int32_t(&vec)[N], size_t *written_count) noexcept
The function template version of GetInt32CommaList.