3 #ifndef INCLUDE_NN_NLIB_NFLAGS_H_ 4 #define INCLUDE_NN_NLIB_NFLAGS_H_ 24 static const int kMaxPath = 512;
25 static const int kMaxFileName = 256;
26 static const int kMaxDirName = 512;
27 static const int kMaxExtension = 256;
28 static errno_t GetFileName(
const char* path,
29 char (&filename)[kMaxFileName]) NLIB_NOEXCEPT
NLIB_NONNULL;
30 static errno_t GetDirName(
const char* path,
31 char (&dirname)[kMaxDirName]) NLIB_NOEXCEPT
NLIB_NONNULL;
33 static errno_t GetStringCommaList(
char* arg,
char** vec,
size_t vec_count,
38 return GetStringCommaList(arg, &vec[0], N, written_count);
41 static errno_t GetInt32CommaList(
char* arg, int32_t* vec,
size_t vec_count,
46 return GetInt32CommaList(arg, &vec[0], N, written_count);
49 static errno_t GetDoubleCommaList(
char* arg,
double* vec,
size_t vec_count,
54 return GetDoubleCommaList(arg, &vec[0], N, written_count);
58 static bool GetBoolFromEnv(
const char* varname,
bool defval)
NLIB_NOEXCEPT;
59 static int32_t GetInt32FromEnv(
const char* varname, int32_t defval)
NLIB_NOEXCEPT;
60 static int64_t GetInt64FromEnv(
const char* varname, int64_t defval)
NLIB_NOEXCEPT;
61 static double GetDoubleFromEnv(
const char* varname,
double defval)
NLIB_NOEXCEPT;
63 #ifdef NLIB_CXX11_DEFAULT_TEMPLATE_ARGUMENT_FOR_FUNCTION_TEMPLATES 64 template<
class DUMMY =
void>
66 static const char* GetStringFromEnv(
UniquePtr<
char[]>& buf,
74 #ifdef NLIB_CXX11_DEFAULT_TEMPLATE_ARGUMENT_FOR_FUNCTION_TEMPLATES 77 inline const char* Nflags::GetStringFromEnv(
UniquePtr<
char[]>& buf,
79 const char* defval) NLIB_NOEXCEPT {
80 if (!varname)
return defval;
84 if (e != 0 || n == 0)
return defval;
86 char* bufmem =
new (std::nothrow)
char[n];
87 if (!bufmem)
return defval;
100 NLIB_VIS_PUBLIC void AddDefOptBool(
const char* opt_name,
bool def_value,
const char* desc,
102 NLIB_VIS_PUBLIC void AddDefOptInt32(
const char* opt_name, int32_t def_value,
const char* desc,
104 NLIB_VIS_PUBLIC void AddDefOptDouble(
const char* opt_name,
double def_value,
const char* desc,
106 NLIB_VIS_PUBLIC void AddDefOptString(
const char* opt_name,
const char* def_value,
const char* desc,
111 #define NLIB_FLAGS_DEFINE_bool(opt_name, def_value, desc) \ 112 bool NLIB_FLAGS_##opt_name; \ 113 class NLIB_FLAGS_CL_##opt_name { \ 115 NLIB_FLAGS_CL_##opt_name() { \ 116 ::nlib_ns::nflags::AddDefOptBool(#opt_name, def_value, desc, &NLIB_FLAGS_##opt_name); \ 118 } NLIB_FLAGS_CL_##opt_name##_ 120 #define NLIB_FLAGS_DEFINE_int32(opt_name, def_value, desc) \ 121 int32_t NLIB_FLAGS_##opt_name; \ 122 class NLIB_FLAGS_CL_##opt_name { \ 124 NLIB_FLAGS_CL_##opt_name() { \ 125 ::nlib_ns::nflags::AddDefOptInt32(#opt_name, def_value, desc, \ 126 &NLIB_FLAGS_##opt_name); \ 128 } NLIB_FLAGS_CL_##opt_name##_ 130 #define NLIB_FLAGS_DEFINE_double(opt_name, def_value, desc) \ 131 double NLIB_FLAGS_##opt_name; \ 132 class NLIB_FLAGS_CL_##opt_name { \ 134 NLIB_FLAGS_CL_##opt_name() { \ 135 ::nlib_ns::nflags::AddDefOptDouble(#opt_name, def_value, desc, \ 136 &NLIB_FLAGS_##opt_name); \ 138 } NLIB_FLAGS_CL_##opt_name##_ 140 #define NLIB_FLAGS_DEFINE_string(opt_name, def_value, desc) \ 141 const char* NLIB_FLAGS_##opt_name; \ 142 class NLIB_FLAGS_CL_##opt_name { \ 144 NLIB_FLAGS_CL_##opt_name() { \ 145 ::nlib_ns::nflags::AddDefOptString(#opt_name, def_value, desc, \ 146 &NLIB_FLAGS_##opt_name); \ 148 } NLIB_FLAGS_CL_##opt_name##_ 150 #define NLIB_FLAGS_DECLARE_bool(opt_name) extern bool NLIB_FLAGS_##opt_name 151 #define NLIB_FLAGS_DECLARE_int32(opt_name) extern int32_t NLIB_FLAGS_##opt_name 152 #define NLIB_FLAGS_DECLARE_double(opt_name) extern double NLIB_FLAGS_##opt_name 153 #define NLIB_FLAGS_DECLARE_string(opt_name) extern const char* NLIB_FLAGS_##opt_name 161 #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.
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.
#define NLIB_FINAL
Defines final if it is available for use. If not, holds an empty string.
static errno_t GetInt32CommaList(char *arg, int32_t(&vec)[N], size_t *written_count) noexcept
The function template version of GetInt32CommaList.