cmdopt: move bool parsing into inline headers
This avoids multiple definition issues with more aggressive inliners, eg mingw
This commit is contained in:
parent
0ec92951fc
commit
1356391259
43
cmdopt.cpp
43
cmdopt.cpp
@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
#include "debug.hpp"
|
#include "debug.hpp"
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
@ -154,48 +153,6 @@ present::finish (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
namespace util { namespace cmdopt { namespace option {
|
|
||||||
template <>
|
|
||||||
void
|
|
||||||
value<bool>::execute (const char *restrict str)
|
|
||||||
{
|
|
||||||
static const std::string TRUE_STRING[] = {
|
|
||||||
"true",
|
|
||||||
"yes",
|
|
||||||
"y",
|
|
||||||
"1"
|
|
||||||
};
|
|
||||||
|
|
||||||
if (std::any_of (std::begin (TRUE_STRING),
|
|
||||||
std::end (TRUE_STRING),
|
|
||||||
[str] (auto i) { return i == str; }))
|
|
||||||
{
|
|
||||||
m_data = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const std::string FALSE_STRING[] = {
|
|
||||||
"false",
|
|
||||||
"no",
|
|
||||||
"n",
|
|
||||||
"0"
|
|
||||||
};
|
|
||||||
|
|
||||||
if (std::any_of (std::begin (FALSE_STRING),
|
|
||||||
std::end (FALSE_STRING),
|
|
||||||
[str] (auto i) { return i == str; }))
|
|
||||||
{
|
|
||||||
m_data = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
base::execute (str);
|
|
||||||
seen (true);
|
|
||||||
}
|
|
||||||
} } }
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
namespace util { namespace cmdopt { namespace option {
|
namespace util { namespace cmdopt { namespace option {
|
||||||
template class value<uint16_t>;
|
template class value<uint16_t>;
|
||||||
|
45
cmdopt.ipp
45
cmdopt.ipp
@ -20,6 +20,7 @@
|
|||||||
#define __UTIL_CMDLINE_IPP
|
#define __UTIL_CMDLINE_IPP
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include "./introspection.hpp"
|
#include "./introspection.hpp"
|
||||||
#include "./iterator.hpp"
|
#include "./iterator.hpp"
|
||||||
@ -34,7 +35,7 @@ namespace util { namespace cmdopt {
|
|||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void
|
inline void
|
||||||
option::value<T>::execute (const char *restrict str)
|
option::value<T>::execute (const char *restrict str)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
@ -53,6 +54,48 @@ namespace util { namespace cmdopt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
namespace option {
|
||||||
|
template <>
|
||||||
|
inline void
|
||||||
|
value<bool>::execute (const char *restrict str)
|
||||||
|
{
|
||||||
|
static const std::string TRUE_STRING[] = {
|
||||||
|
"true",
|
||||||
|
"yes",
|
||||||
|
"y",
|
||||||
|
"1"
|
||||||
|
};
|
||||||
|
|
||||||
|
if (std::any_of (std::begin (TRUE_STRING),
|
||||||
|
std::end (TRUE_STRING),
|
||||||
|
[str] (auto i) { return i == str; }))
|
||||||
|
{
|
||||||
|
m_data = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const std::string FALSE_STRING[] = {
|
||||||
|
"false",
|
||||||
|
"no",
|
||||||
|
"n",
|
||||||
|
"0"
|
||||||
|
};
|
||||||
|
|
||||||
|
if (std::any_of (std::begin (FALSE_STRING),
|
||||||
|
std::end (FALSE_STRING),
|
||||||
|
[str] (auto i) { return i == str; }))
|
||||||
|
{
|
||||||
|
m_data = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
base::execute (str);
|
||||||
|
seen (true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
Loading…
Reference in New Issue
Block a user