Scarab  v3.2.3
Project 8 C++ Utility Library
Classes | Enumerations | Functions | Variables
CLI::detail Namespace Reference

Classes

struct  AppFriend
 This class is simply to allow tests access to App's protected functions. More...
 
struct  element_type
 
struct  element_value_type
 
class  ExistingDirectoryValidator
 Check for an existing directory (returns error message if check fails) More...
 
class  ExistingFileValidator
 Check for an existing file (returns error message if check fails) More...
 
class  ExistingPathValidator
 Check for an existing path. More...
 
struct  has_find
 
class  IPV4Validator
 Validate the given string is a legal ipv4 address. More...
 
class  is_streamable
 
class  NonexistentPathValidator
 Check for an non-existing path. More...
 
class  Number
 Validate the argument is a number and greater than or equal to 0. More...
 
struct  pair_adaptor
 Adaptor for set-like structure: This just wraps a normal container in a few utilities that do almost nothing. More...
 
struct  pair_adaptor< T, conditional_t< false, void_t< typename T::value_type::first_type, typename T::value_type::second_type >, void > >
 
class  PositiveNumber
 Validate the argument is a number and greater than or equal to 0. More...
 
struct  sfinae_true
 

Enumerations

enum  enabler
 Simple empty scoped class. More...
 
enum  Classifier {
  NONE, POSITIONAL_MARK, SHORT, LONG,
  WINDOWS, SUBCOMMAND, SUBCOMMAND_TERMINATOR
}
 

Functions

std::vector< std::string > split (const std::string &s, char delim)
 Split a string by a delim. More...
 
template<typename T >
std::string as_string (const T &v)
 simple utility to convert various types to a string More...
 
template<typename T , typename = typename std::enable_if<std::is_constructible<std::string, T>::value>::type>
auto as_string (T &&v) -> decltype(std::forward< T >(v))
 
template<typename T >
std::string join (const T &v, std::string delim=",")
 Simple function to join a string. More...
 
template<typename T , typename Callable , typename = typename std::enable_if<!std::is_constructible<std::string, Callable>::value>::type>
std::string join (const T &v, Callable func, std::string delim=",")
 Simple function to join a string from processed elements. More...
 
template<typename T >
std::string rjoin (const T &v, std::string delim=",")
 Join a string in reverse order. More...
 
std::string & ltrim (std::string &str)
 Trim whitespace from left of string. More...
 
std::string & ltrim (std::string &str, const std::string &filter)
 Trim anything from left of string. More...
 
std::string & rtrim (std::string &str)
 Trim whitespace from right of string. More...
 
std::string & rtrim (std::string &str, const std::string &filter)
 Trim anything from right of string. More...
 
std::string & trim (std::string &str)
 Trim whitespace from string. More...
 
std::string & trim (std::string &str, const std::string filter)
 Trim anything from string. More...
 
std::string trim_copy (const std::string &str)
 Make a copy of the string and then trim it. More...
 
std::string trim_copy (const std::string &str, const std::string &filter)
 Make a copy of the string and then trim it, any filter string can be used (any char in string is filtered) More...
 
std::ostream & format_help (std::ostream &out, std::string name, std::string description, size_t wid)
 Print a two part "help" string. More...
 
template<typename T >
bool valid_first_char (T c)
 Verify the first character of an option. More...
 
template<typename T >
bool valid_later_char (T c)
 Verify following characters of an option. More...
 
bool valid_name_string (const std::string &str)
 Verify an option name. More...
 
bool isalpha (const std::string &str)
 Verify that str consists of letters only. More...
 
std::string to_lower (std::string str)
 Return a lower case version of a string. More...
 
std::string remove_underscore (std::string str)
 remove underscores from a string More...
 
std::string find_and_replace (std::string str, std::string from, std::string to)
 Find and replace a substring with another substring. More...
 
bool has_default_flag_values (const std::string &flags)
 check if the flag definitions has possible false flags More...
 
void remove_default_flag_values (std::string &flags)
 
std::ptrdiff_t find_member (std::string name, const std::vector< std::string > names, bool ignore_case=false, bool ignore_underscore=false)
 Check if a string is a member of a list of strings and optionally ignore case or ignore underscores. More...
 
template<typename Callable >
std::string find_and_modify (std::string str, std::string trigger, Callable modify)
 
std::vector< std::string > split_up (std::string str)
 
std::string fix_newlines (std::string leader, std::string input)
 
size_t escape_detect (std::string &str, size_t offset)
 
std::string & add_quotes_if_needed (std::string &str)
 Add quotes if the string contains spaces. More...
 
template<typename T , enable_if_t< std::is_constructible< std::string, T >::value, detail::enabler > = detail::dummy>
auto to_string (T &&value) -> decltype(std::forward< T >(value))
 Convert an object to a string (directly forward if this can become a string) More...
 
template<typename T , enable_if_t<!std::is_constructible< std::string, T >::value &&is_streamable< std::stringstream, T >::value, detail::enabler > = detail::dummy>
std::string to_string (T &&value)
 Convert an object to a string (streaming must be supported for that type) More...
 
template<typename T , enable_if_t< std::is_integral< T >::value &&std::is_signed< T >::value, detail::enabler > = detail::dummy>
constexpr const char * type_name ()
 This one should not be used, since vector types print the internal type. More...
 
int64_t to_flag_value (std::string val)
 Convert a flag into an integer value typically binary flags. More...
 
template<typename T , enable_if_t< std::is_integral< T >::value &&std::is_signed< T >::value &&!is_bool< T >::value &&!std::is_enum< T >::value, detail::enabler > = detail::dummy>
bool lexical_cast (std::string input, T &output)
 Signed integers. More...
 
template<typename T , enable_if_t< std::is_integral< T >::value &&std::is_unsigned< T >::value, detail::enabler > = detail::dummy>
void sum_flag_vector (const std::vector< std::string > &flags, T &output)
 
bool split_short (const std::string &current, std::string &name, std::string &rest)
 
bool split_long (const std::string &current, std::string &name, std::string &value)
 
bool split_windows_style (const std::string &current, std::string &name, std::string &value)
 
std::vector< std::string > split_names (std::string current)
 
std::vector< std::pair< std::string, std::string > > get_default_flag_values (const std::string &str)
 extract default flag values either {def} or starting with a ! More...
 
std::tuple< std::vector< std::string >, std::vector< std::string >, std::string > get_names (const std::vector< std::string > &input)
 Get a vector of short names, one of long names, and a single name. More...
 
std::string ini_join (std::vector< std::string > args)
 Comma separated join, adds quotes if needed. More...
 
template<typename T , enable_if_t< is_copyable_ptr< typename std::remove_reference< T >::type >::value, detail::enabler > = detail::dummy>
auto smart_deref (T value) -> decltype(*value)
 
template<typename T , enable_if_t<!is_copyable_ptr< typename std::remove_reference< T >::type >::value, detail::enabler > = detail::dummy>
std::remove_reference< T >::type & smart_deref (T &value)
 
template<typename T >
std::string generate_set (const T &set)
 Generate a string representation of a set. More...
 
template<typename T >
std::string generate_map (const T &map, bool key_only=false)
 Generate a string representation of a map. More...
 
template<typename T , typename V >
static auto test_find (int) -> sfinae_true< decltype(std::declval< T >().find(std::declval< V >()))>
 
template<typename , typename V >
static auto test_find (long) -> std::false_type
 
template<typename T , typename V , enable_if_t<!has_find< T, V >::value, detail::enabler > = detail::dummy>
auto search (const T &set, const V &val) -> std::pair< bool, decltype(std::begin(detail::smart_deref(set)))>
 A search function. More...
 
template<typename T , typename V >
auto search (const T &set, const V &val, const std::function< V(V)> &filter_function) -> std::pair< bool, decltype(std::begin(detail::smart_deref(set)))>
 A search function with a filter function. More...
 
template<typename T >
std::enable_if< std::is_integral< T >::value, bool >::type checked_multiply (T &a, T b)
 Performs a *= b; if it doesn't cause integer overflow. Returns false otherwise. More...
 
template<typename T >
std::enable_if< std::is_floating_point< T >::value, bool >::type checked_multiply (T &a, T b)
 Performs a *= b; if it doesn't equal infinity. Returns false otherwise. More...
 
std::pair< std::string, std::string > split_program_name (std::string commandline)
 

Variables

constexpr enabler dummy = {}
 An instance to use in EnableIf. More...
 

Enumeration Type Documentation

◆ Classifier

enum Classifier
strong
Enumerator
NONE 
POSITIONAL_MARK 
SHORT 
LONG 
WINDOWS 
SUBCOMMAND 
SUBCOMMAND_TERMINATOR 

Definition at line 3678 of file CLI11.hpp.

◆ enabler

enum enabler
strong

Simple empty scoped class.

Definition at line 907 of file CLI11.hpp.

Function Documentation

◆ add_quotes_if_needed()

std::string& CLI::detail::add_quotes_if_needed ( std::string &  str)
inline

Add quotes if the string contains spaces.

Definition at line 570 of file CLI11.hpp.

◆ as_string() [1/2]

std::string CLI::detail::as_string ( const T &  v)
inline

simple utility to convert various types to a string

Definition at line 265 of file CLI11.hpp.

◆ as_string() [2/2]

auto CLI::detail::as_string ( T &&  v) -> decltype(std::forward<T>(v))
inline

Definition at line 272 of file CLI11.hpp.

◆ checked_multiply() [1/2]

std::enable_if<std::is_integral<T>::value, bool>::type CLI::detail::checked_multiply ( T &  a,
b 
)

Performs a *= b; if it doesn't cause integer overflow. Returns false otherwise.

Definition at line 2029 of file CLI11.hpp.

◆ checked_multiply() [2/2]

std::enable_if<std::is_floating_point<T>::value, bool>::type CLI::detail::checked_multiply ( T &  a,
b 
)

Performs a *= b; if it doesn't equal infinity. Returns false otherwise.

Definition at line 2044 of file CLI11.hpp.

◆ escape_detect()

size_t CLI::detail::escape_detect ( std::string &  str,
size_t  offset 
)
inline

This function detects an equal or colon followed by an escaped quote after an argument then modifies the string to replace the equality with a space. This is needed to allow the split up function to work properly and is intended to be used with the find_and_modify function the return value is the offset+1 which is required by the find_and_modify function.

Definition at line 557 of file CLI11.hpp.

◆ find_and_modify()

std::string CLI::detail::find_and_modify ( std::string  str,
std::string  trigger,
Callable  modify 
)
inline

Find a trigger string and call a modify callable function that takes the current string and starting position of the trigger and returns the position in the string to search for the next trigger string

Definition at line 482 of file CLI11.hpp.

◆ find_and_replace()

std::string CLI::detail::find_and_replace ( std::string  str,
std::string  from,
std::string  to 
)
inline

Find and replace a substring with another substring.

Definition at line 420 of file CLI11.hpp.

◆ find_member()

std::ptrdiff_t CLI::detail::find_member ( std::string  name,
const std::vector< std::string >  names,
bool  ignore_case = false,
bool  ignore_underscore = false 
)
inline

Check if a string is a member of a list of strings and optionally ignore case or ignore underscores.

Definition at line 451 of file CLI11.hpp.

◆ fix_newlines()

std::string CLI::detail::fix_newlines ( std::string  leader,
std::string  input 
)
inline

Add a leader to the beginning of all new lines (nothing is added at the start of the first line). "; " would be for ini files

Can't use Regex, or this would be a subs.

Definition at line 541 of file CLI11.hpp.

◆ format_help()

std::ostream& CLI::detail::format_help ( std::ostream &  out,
std::string  name,
std::string  description,
size_t  wid 
)
inline

Print a two part "help" string.

Definition at line 365 of file CLI11.hpp.

◆ generate_map()

std::string CLI::detail::generate_map ( const T &  map,
bool  key_only = false 
)

Generate a string representation of a map.

Definition at line 1963 of file CLI11.hpp.

◆ generate_set()

std::string CLI::detail::generate_set ( const T &  set)

Generate a string representation of a set.

Definition at line 1951 of file CLI11.hpp.

◆ get_default_flag_values()

std::vector<std::pair<std::string, std::string> > CLI::detail::get_default_flag_values ( const std::string &  str)
inline

extract default flag values either {def} or starting with a !

Definition at line 1336 of file CLI11.hpp.

◆ get_names()

std::tuple<std::vector<std::string>, std::vector<std::string>, std::string> CLI::detail::get_names ( const std::vector< std::string > &  input)
inline

Get a vector of short names, one of long names, and a single name.

Definition at line 1364 of file CLI11.hpp.

◆ has_default_flag_values()

bool CLI::detail::has_default_flag_values ( const std::string &  flags)
inline

check if the flag definitions has possible false flags

Definition at line 433 of file CLI11.hpp.

◆ ini_join()

std::string CLI::detail::ini_join ( std::vector< std::string >  args)
inline

Comma separated join, adds quotes if needed.

Definition at line 1409 of file CLI11.hpp.

◆ isalpha()

bool CLI::detail::isalpha ( const std::string &  str)
inline

Verify that str consists of letters only.

Definition at line 401 of file CLI11.hpp.

◆ join() [1/2]

std::string CLI::detail::join ( const T &  v,
std::string  delim = "," 
)

Simple function to join a string.

Definition at line 277 of file CLI11.hpp.

◆ join() [2/2]

std::string CLI::detail::join ( const T &  v,
Callable  func,
std::string  delim = "," 
)

Simple function to join a string from processed elements.

Definition at line 293 of file CLI11.hpp.

◆ lexical_cast()

bool lexical_cast ( std::string  input,
T &  output 
)

Signed integers.

Non-string parsable.

Enumerations.

String and similar.

Floats.

Boolean values.

Unsigned integers.

Definition at line 1151 of file CLI11.hpp.

◆ ltrim() [1/2]

std::string& CLI::detail::ltrim ( std::string &  str)
inline

Trim whitespace from left of string.

Definition at line 319 of file CLI11.hpp.

◆ ltrim() [2/2]

std::string& CLI::detail::ltrim ( std::string &  str,
const std::string &  filter 
)
inline

Trim anything from left of string.

Definition at line 326 of file CLI11.hpp.

◆ remove_default_flag_values()

void CLI::detail::remove_default_flag_values ( std::string &  flags)
inline

Definition at line 437 of file CLI11.hpp.

◆ remove_underscore()

std::string CLI::detail::remove_underscore ( std::string  str)
inline

remove underscores from a string

Definition at line 414 of file CLI11.hpp.

◆ rjoin()

std::string CLI::detail::rjoin ( const T &  v,
std::string  delim = "," 
)

Join a string in reverse order.

Definition at line 306 of file CLI11.hpp.

◆ rtrim() [1/2]

std::string& CLI::detail::rtrim ( std::string &  str)
inline

Trim whitespace from right of string.

Definition at line 333 of file CLI11.hpp.

◆ rtrim() [2/2]

std::string& CLI::detail::rtrim ( std::string &  str,
const std::string &  filter 
)
inline

Trim anything from right of string.

Definition at line 340 of file CLI11.hpp.

◆ search() [1/2]

auto search ( const T &  set,
const V &  val 
) -> std::pair<bool, decltype(std::begin(detail::smart_deref(set)))>

A search function.

A search function that uses the built in find function.

Definition at line 1991 of file CLI11.hpp.

◆ search() [2/2]

auto CLI::detail::search ( const T &  set,
const V &  val,
const std::function< V(V)> &  filter_function 
) -> std::pair<bool, decltype(std::begin(detail::smart_deref(set)))>

A search function with a filter function.

Definition at line 2010 of file CLI11.hpp.

◆ smart_deref() [1/2]

auto CLI::detail::smart_deref ( value) -> decltype(*value)

Definition at line 1940 of file CLI11.hpp.

◆ smart_deref() [2/2]

std::remove_reference<T>::type& CLI::detail::smart_deref ( T &  value)

Definition at line 1947 of file CLI11.hpp.

◆ split()

std::vector<std::string> CLI::detail::split ( const std::string &  s,
char  delim 
)
inline

Split a string by a delim.

Definition at line 249 of file CLI11.hpp.

◆ split_long()

bool CLI::detail::split_long ( const std::string &  current,
std::string &  name,
std::string &  value 
)
inline

Definition at line 1292 of file CLI11.hpp.

◆ split_names()

std::vector<std::string> CLI::detail::split_names ( std::string  current)
inline

Definition at line 1324 of file CLI11.hpp.

◆ split_program_name()

std::pair<std::string, std::string> CLI::detail::split_program_name ( std::string  commandline)
inline

Split a string into a program name and command line arguments the string is assumed to contain a file name followed by other arguments the return value contains is a pair with the first argument containing the program name and the second everything else.

Definition at line 2466 of file CLI11.hpp.

◆ split_short()

bool CLI::detail::split_short ( const std::string &  current,
std::string &  name,
std::string &  rest 
)
inline

Definition at line 1282 of file CLI11.hpp.

◆ split_up()

std::vector<std::string> CLI::detail::split_up ( std::string  str)
inline

Split a string '"one two" "three"' into 'one two', 'three' Quote characters can be ` ' or "

Definition at line 492 of file CLI11.hpp.

◆ split_windows_style()

bool CLI::detail::split_windows_style ( const std::string &  current,
std::string &  name,
std::string &  value 
)
inline

Definition at line 1308 of file CLI11.hpp.

◆ sum_flag_vector()

void sum_flag_vector ( const std::vector< std::string > &  flags,
T &  output 
)

Sum a vector of flag representations The flag vector produces a series of strings in a vector, simple true is represented by a "1", simple false is by "-1" an if numbers are passed by some fashion they are captured as well so the function just checks for the most common true and false strings then uses stoll to convert the rest for summing

Definition at line 1251 of file CLI11.hpp.

◆ test_find() [1/2]

static auto CLI::detail::test_find ( int  ) -> sfinae_true< decltype(std::declval< T >().find(std::declval< V >()))>
static

Function to check for the existence of a member find function which presumably is more efficient than looping over everything

◆ test_find() [2/2]

static auto CLI::detail::test_find ( long  ) -> std::false_type
static

◆ to_flag_value()

int64_t CLI::detail::to_flag_value ( std::string  val)
inline

Convert a flag into an integer value typically binary flags.

Definition at line 1096 of file CLI11.hpp.

◆ to_lower()

std::string CLI::detail::to_lower ( std::string  str)
inline

Return a lower case version of a string.

Definition at line 406 of file CLI11.hpp.

◆ to_string() [1/2]

auto CLI::detail::to_string ( T &&  value) -> decltype(std::forward<T>(value))

Convert an object to a string (directly forward if this can become a string)

Definition at line 1028 of file CLI11.hpp.

◆ to_string() [2/2]

std::string to_string ( T &&  value)

Convert an object to a string (streaming must be supported for that type)

If conversion is not supported, return an empty string (streaming is not supported for that type)

Definition at line 1036 of file CLI11.hpp.

◆ trim() [1/2]

std::string& CLI::detail::trim ( std::string &  str)
inline

Trim whitespace from string.

Definition at line 348 of file CLI11.hpp.

◆ trim() [2/2]

std::string& CLI::detail::trim ( std::string &  str,
const std::string  filter 
)
inline

Trim anything from string.

Definition at line 351 of file CLI11.hpp.

◆ trim_copy() [1/2]

std::string CLI::detail::trim_copy ( const std::string &  str)
inline

Make a copy of the string and then trim it.

Definition at line 354 of file CLI11.hpp.

◆ trim_copy() [2/2]

std::string CLI::detail::trim_copy ( const std::string &  str,
const std::string &  filter 
)
inline

Make a copy of the string and then trim it, any filter string can be used (any char in string is filtered)

Definition at line 360 of file CLI11.hpp.

◆ type_name()

constexpr const char * type_name ( )

This one should not be used, since vector types print the internal type.

Print for all other types.

Print name for enumeration types.

Was going to be based on http://stackoverflow.com/questions/1055452/c-get-name-of-type-in-template But this is cleaner and works better in this case

Definition at line 1058 of file CLI11.hpp.

◆ valid_first_char()

bool CLI::detail::valid_first_char ( c)

Verify the first character of an option.

Definition at line 383 of file CLI11.hpp.

◆ valid_later_char()

bool CLI::detail::valid_later_char ( c)

Verify following characters of an option.

Definition at line 388 of file CLI11.hpp.

◆ valid_name_string()

bool CLI::detail::valid_name_string ( const std::string &  str)
inline

Verify an option name.

Definition at line 391 of file CLI11.hpp.

Variable Documentation

◆ dummy

constexpr enabler dummy = {}

An instance to use in EnableIf.

Definition at line 910 of file CLI11.hpp.