diff --git a/src/cmdstan/arguments/singleton_argument.hpp b/src/cmdstan/arguments/singleton_argument.hpp index f06f175964..eebe503fdc 100644 --- a/src/cmdstan/arguments/singleton_argument.hpp +++ b/src/cmdstan/arguments/singleton_argument.hpp @@ -2,13 +2,39 @@ #define CMDSTAN_ARGUMENTS_SINGLETON_ARGUMENT_HPP #include -#include #include #include #include namespace cmdstan { +namespace internal { +void from_string(std::string &src, double &dest) { dest = std::stod(src); } +void from_string(std::string &src, int &dest) { dest = std::stoi(src); } +void from_string(std::string &src, long long int &dest) { + dest = std::stoll(src); +} +void from_string(std::string &src, unsigned int &dest) { + dest = std::stoul(src); +} +void from_string(std::string &src, bool &dest) { + if (src == "true" || src == "1") { + dest = true; + } else if (src == "false" || src == "0") { + dest = false; + } else { + throw std::invalid_argument(std::string("invalid boolean value ") + src); + } +} +void from_string(std::string &src, std::string &dest) { dest = src; } + +std::string to_string(std::string &src) { return src; } +template +std::string to_string(T &src) { + return std::to_string(src); +} +} // namespace internal + template struct type_name { static std::string name() { return typeid(T).name(); } @@ -73,7 +99,8 @@ class singleton_argument : public valued_argument { args.pop_back(); try { - T proposed_value = boost::lexical_cast(value); + T proposed_value; + internal::from_string(value, proposed_value); if (set_value(proposed_value)) { return true; } @@ -109,7 +136,7 @@ class singleton_argument : public valued_argument { return false; } - std::string print_value() { return boost::lexical_cast(_value); } + std::string print_value() { return internal::to_string(_value); } std::string print_valid() { return " " + _validity; } diff --git a/src/test/interface/arguments/singleton_argument_test.cpp b/src/test/interface/arguments/singleton_argument_test.cpp index 9e15661836..4220daeeaa 100644 --- a/src/test/interface/arguments/singleton_argument_test.cpp +++ b/src/test/interface/arguments/singleton_argument_test.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include template