24 #ifndef __MLPACK_CORE_UTIL_CLI_HPP
25 #define __MLPACK_CORE_UTIL_CLI_HPP
32 #include <boost/any.hpp>
33 #include <boost/program_options.hpp>
53 #define PROGRAM_INFO(NAME, DESC) static mlpack::util::ProgramDoc \
54 io_programdoc_dummy_object = mlpack::util::ProgramDoc(NAME, DESC);
73 #define PARAM_FLAG(ID, DESC, ALIAS) \
74 PARAM_FLAG_INTERNAL(ID, DESC, ALIAS);
97 #define PARAM_INT(ID, DESC, ALIAS, DEF) \
98 PARAM(int, ID, DESC, ALIAS, DEF, false)
121 #define PARAM_FLOAT(ID, DESC, ALIAS, DEF) \
122 PARAM(float, ID, DESC, ALIAS, DEF, false)
145 #define PARAM_DOUBLE(ID, DESC, ALIAS, DEF) \
146 PARAM(double, ID, DESC, ALIAS, DEF, false)
170 #define PARAM_STRING(ID, DESC, ALIAS, DEF) \
171 PARAM(std::string, ID, DESC, ALIAS, DEF, false)
194 #define PARAM_VECTOR(T, ID, DESC, ALIAS) \
195 PARAM(std::vector<T>, ID, DESC, ALIAS, std::vector<T>(), false)
219 #define PARAM_INT_REQ(ID, DESC, ALIAS) PARAM(int, ID, DESC, ALIAS, 0, true)
243 #define PARAM_FLOAT_REQ(ID, DESC, ALIAS) PARAM(float, ID, DESC, ALIAS, 0.0f, \
266 #define PARAM_DOUBLE_REQ(ID, DESC, ALIAS) PARAM(double, ID, DESC, ALIAS, \
289 #define PARAM_STRING_REQ(ID, DESC, ALIAS) PARAM(std::string, ID, DESC, \
312 #define PARAM_VECTOR_REQ(T, ID, DESC, ALIAS) PARAM(std::vector<T>, ID, DESC, \
313 ALIAS, std::vector<T>(), true);
322 #define JOIN(x, y) JOIN_AGAIN(x, y)
323 #define JOIN_AGAIN(x, y) x ## y
341 #define PARAM(T, ID, DESC, ALIAS, DEF, REQ) static mlpack::util::Option<T> \
342 JOIN(io_option_dummy_object_, __COUNTER__) \
343 (false, DEF, ID, DESC, ALIAS, REQ);
346 #define PARAM_FLAG_INTERNAL(ID, DESC, ALIAS) static \
347 mlpack::util::Option<bool> JOIN(__io_option_flag_object_, __COUNTER__) \
356 #define PARAM(T, ID, DESC, ALIAS, DEF, REQ) static mlpack::util::Option<T> \
357 JOIN(JOIN(io_option_dummy_object_, __LINE__), opt) (false, DEF, ID, \
361 #define PARAM_FLAG_INTERNAL(ID, DESC, ALIAS) static \
362 mlpack::util::Option<bool> JOIN(__io_option_flag_object_, __LINE__) \
371 #define TYPENAME(x) (std::string(typeid(x).name()))
373 namespace po = boost::program_options;
544 static void Add(
const std::string& path,
545 const std::string& description,
546 const std::string& alias =
"",
547 bool required =
false);
561 static void Add(
const std::string& identifier,
562 const std::string& description,
563 const std::string& alias =
"",
564 bool required =
false);
573 static void AddFlag(
const std::string& identifier,
574 const std::string& description,
575 const std::string& alias =
"");
597 static T&
GetParam(
const std::string& identifier);
626 static bool HasParam(
const std::string& identifier);
635 static std::string
HyphenateString(
const std::string& str,
int padding);
667 static void PrintHelp(
const std::string& param =
"");
694 typedef std::map<std::string, ParamData>
gmap_t;
698 typedef std::map<std::string, std::string>
amap_t;
724 static void AddAlias(
const std::string& alias,
const std::string& original);
741 void FileTimeToTimeVal(timeval* tv);
775 CLI(
const std::string& optionsName);
784 #include "cli_impl.hpp"