Update of /cvsroot/boost/boost/libs/program_options/src
In directory
sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv13215/libs/program_options/src
Modified Files:
config_file.cpp parsers.cpp
Log Message:
Implement support for unregistered options in config files. Closes #687.
Index: config_file.cpp
===================================================================
RCS file: /cvsroot/boost/boost/libs/program_options/src/config_file.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- config_file.cpp 16 Jun 2005 10:29:49 -0000 1.9
+++ config_file.cpp 11 Jul 2007 19:39:06 -0000 1.10
@@ -21,8 +21,10 @@
using namespace std;
common_config_file_iterator::common_config_file_iterator(
- const std::set<std::string>& allowed_options)
- : allowed_options(allowed_options)
+ const std::set<std::string>& allowed_options,
+ bool allow_unregistered)
+ : allowed_options(allowed_options),
+ m_allow_unregistered(allow_unregistered)
{
for(std::set<std::string>::const_iterator i = allowed_options.begin();
i != allowed_options.end();
@@ -100,7 +102,8 @@
string name = m_prefix + trim_ws(s.substr(0, n));
string value = trim_ws(s.substr(n+1));
- if (!allowed_option(name))
+ bool registered = allowed_option(name);
+ if (!registered && !m_allow_unregistered)
boost::throw_exception(unknown_option(name));
if (value.empty())
@@ -110,6 +113,7 @@
this->value().string_key = name;
this->value().value.clear();
this->value().value.push_back(value);
+ this->value().unregistered = !registered;
break;
} else {
Index: parsers.cpp
===================================================================
RCS file: /cvsroot/boost/boost/libs/program_options/src/parsers.cpp,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- parsers.cpp 16 Jun 2005 10:29:49 -0000 1.26
+++ parsers.cpp 11 Jul 2007 19:39:06 -0000 1.27
@@ -88,7 +88,8 @@
template<class charT>
basic_parsed_options<charT>
parse_config_file(std::basic_istream<charT>& is,
- const options_description& desc)
+ const options_description& desc,
+ bool allow_unregistered)
{
set<string> allowed_options;
@@ -106,7 +107,8 @@
// Parser return char strings
parsed_options result(&desc);
- copy(detail::basic_config_file_iterator<charT>(is, allowed_options),
+ copy(detail::basic_config_file_iterator<charT>(
+ is, allowed_options, allow_unregistered),
detail::basic_config_file_iterator<charT>(),
back_inserter(result.options));
// Convert char strings into desired type.
@@ -116,13 +118,15 @@
template
BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options<char>
parse_config_file(std::basic_istream<char>& is,
- const options_description& desc);
+ const options_description& desc,
+ bool allow_unregistered);
#ifndef BOOST_NO_STD_WSTRING
template
BOOST_PROGRAM_OPTIONS_DECL basic_parsed_options<wchar_t>
parse_config_file(std::basic_istream<wchar_t>& is,
- const options_description& desc);
+ const options_description& desc,
+ bool allow_unregistered);
#endif
// This versio, which accepts any options without validation, is disabled,
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs