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
GetDoubleCommaList()の関数テンプレート版です。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
static errno_t GetStringCommaList(char *arg, char *(&vec)[N], size_t *written_count) noexcept
GetStringCommaList()の関数テンプレート版です。
UniquePtrはポインタの所有権を保持し、UniquePtrがスコープから出るときにデストラクタでポインタをDELで指...
std::unique_ptrに相当するクラスが定義されています。
#define NLIB_FLAGS_DECLARE_bool(opt_name)
別の場所で定義された、NLIB_FLAGS_オプション名、を利用できるようにします。
コマンドラインフラグをパースするためのクラスです。
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
static errno_t GetInt32CommaList(char *arg, int32_t(&vec)[N], size_t *written_count) noexcept
GetInt32CommaList()の関数テンプレート版です。