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,
87 #ifdef NLIB_CXX11_DEFAULT_TEMPLATE_ARGUMENT_FOR_FUNCTION_TEMPLATES 90 inline const char* Nflags::GetStringFromEnv(
UniquePtr<
char[]>& buf,
92 const char* defval) NLIB_NOEXCEPT {
93 if (!varname)
return defval;
97 if (e != 0 || n == 0)
return defval;
99 char* bufmem =
new (std::nothrow)
char[n];
100 if (!bufmem)
return defval;
113 NLIB_VIS_PUBLIC void AddDefOptBool(
const char* opt_name,
bool def_value,
const char* desc,
115 NLIB_VIS_PUBLIC void AddDefOptInt32(
const char* opt_name, int32_t def_value,
const char* desc,
117 NLIB_VIS_PUBLIC void AddDefOptDouble(
const char* opt_name,
double def_value,
const char* desc,
119 NLIB_VIS_PUBLIC void AddDefOptString(
const char* opt_name,
const char* def_value,
const char* desc,
124 #define NLIB_FLAGS_DEFINE_bool(opt_name, def_value, desc) \ 125 bool NLIB_FLAGS_##opt_name; \ 126 class NLIB_FLAGS_CL_##opt_name { \ 128 NLIB_FLAGS_CL_##opt_name() { \ 129 ::nlib_ns::nflags::AddDefOptBool(#opt_name, def_value, desc, &NLIB_FLAGS_##opt_name); \ 131 } NLIB_FLAGS_CL_##opt_name##_ 133 #define NLIB_FLAGS_DEFINE_int32(opt_name, def_value, desc) \ 134 int32_t NLIB_FLAGS_##opt_name; \ 135 class NLIB_FLAGS_CL_##opt_name { \ 137 NLIB_FLAGS_CL_##opt_name() { \ 138 ::nlib_ns::nflags::AddDefOptInt32(#opt_name, def_value, desc, \ 139 &NLIB_FLAGS_##opt_name); \ 141 } NLIB_FLAGS_CL_##opt_name##_ 143 #define NLIB_FLAGS_DEFINE_double(opt_name, def_value, desc) \ 144 double NLIB_FLAGS_##opt_name; \ 145 class NLIB_FLAGS_CL_##opt_name { \ 147 NLIB_FLAGS_CL_##opt_name() { \ 148 ::nlib_ns::nflags::AddDefOptDouble(#opt_name, def_value, desc, \ 149 &NLIB_FLAGS_##opt_name); \ 151 } NLIB_FLAGS_CL_##opt_name##_ 153 #define NLIB_FLAGS_DEFINE_string(opt_name, def_value, desc) \ 154 const char* NLIB_FLAGS_##opt_name; \ 155 class NLIB_FLAGS_CL_##opt_name { \ 157 NLIB_FLAGS_CL_##opt_name() { \ 158 ::nlib_ns::nflags::AddDefOptString(#opt_name, def_value, desc, \ 159 &NLIB_FLAGS_##opt_name); \ 161 } NLIB_FLAGS_CL_##opt_name##_ 163 #define NLIB_FLAGS_DECLARE_bool(opt_name) extern bool NLIB_FLAGS_##opt_name 164 #define NLIB_FLAGS_DECLARE_int32(opt_name) extern int32_t NLIB_FLAGS_##opt_name 165 #define NLIB_FLAGS_DECLARE_double(opt_name) extern double NLIB_FLAGS_##opt_name 166 #define NLIB_FLAGS_DECLARE_string(opt_name) extern const char* NLIB_FLAGS_##opt_name 174 #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.