196f6c0b5b
[SVN r22823]
210 lines
7.5 KiB
Plaintext
210 lines
7.5 KiB
Plaintext
From rogeeff@mail.com Fri Nov 16 19:57:49 2001
|
|
Received: from imap.cs.msu.su (imap.cs.msu.su [158.250.10.15])
|
|
by redsun.cs.msu.su (8.9.3/8.9.3) with ESMTP id TAA06515
|
|
for <ghost@redsun.cs.msu.su>; Fri, 16 Nov 2001 19:59:43 +0300 (MSK)
|
|
Received: from n15.groups.yahoo.com (n15.groups.yahoo.com [216.115.96.65])
|
|
by imap.cs.msu.su (8.11.6/8.11.6) with SMTP id fAGGtrd57869
|
|
for <ghost@cs.msu.su>; Fri, 16 Nov 2001 19:55:54 +0300 (MSK)
|
|
(envelope-from sentto-1234907-17382-1005929874-ghost=cs.msu.su@returns.groups.yahoo.com)
|
|
X-eGroups-Return: sentto-1234907-17382-1005929874-ghost=cs.msu.su@returns.groups.yahoo.com
|
|
Received: from [10.1.1.222] by n15.groups.yahoo.com with NNFMP; 16 Nov 2001 16:57:42 -0000
|
|
X-Sender: rogeeff@mail.com
|
|
X-Apparently-To: boost@yahoogroups.com
|
|
Received: (EGP: mail-8_0_0_1); 16 Nov 2001 16:57:53 -0000
|
|
Received: (qmail 2553 invoked from network); 16 Nov 2001 16:57:53 -0000
|
|
Received: from unknown (216.115.97.172)
|
|
by m4.grp.snv.yahoo.com with QMQP; 16 Nov 2001 16:57:53 -0000
|
|
Received: from unknown (HELO n6.groups.yahoo.com) (216.115.96.56)
|
|
by mta2.grp.snv.yahoo.com with SMTP; 16 Nov 2001 16:57:53 -0000
|
|
X-eGroups-Return: rogeeff@mail.com
|
|
Received: from [10.1.10.109] by n6.groups.yahoo.com with NNFMP; 16 Nov 2001 16:57:52 -0000
|
|
To: boost@yahoogroups.com
|
|
Message-ID: <9t3gid+hdf3@eGroups.com>
|
|
In-Reply-To: <E164iu4-00052e-00@zigzag.cs.msu.su>
|
|
User-Agent: eGroups-EW/0.82
|
|
X-Mailer: eGroups Message Poster
|
|
X-Originating-IP: 199.119.33.162
|
|
From: "Gennadiy E. Rozental" <rogeeff@mail.com>
|
|
X-Yahoo-Profile: rogeeff
|
|
MIME-Version: 1.0
|
|
Mailing-List: list boost@yahoogroups.com; contact boost-owner@yahoogroups.com
|
|
Delivered-To: mailing list boost@yahoogroups.com
|
|
Precedence: bulk
|
|
List-Unsubscribe: <mailto:boost-unsubscribe@yahoogroups.com>
|
|
Date: Fri, 16 Nov 2001 16:57:49 -0000
|
|
Reply-To: boost@yahoogroups.com
|
|
Subject: [boost] Re: arguments parsing, wildcard matcher
|
|
Content-Transfer-Encoding: 7bit
|
|
Content-Type: text/plain;
|
|
charset=US-ASCII
|
|
Content-Length: 5662
|
|
Status: R
|
|
X-Status: N
|
|
|
|
--- In boost@y..., Vladimir Prus <ghost@c...> wrote:
|
|
>
|
|
> > Just a couple of classes I wrote that I wondered if anyone thought
|
|
> > any place in boost:
|
|
> >
|
|
> > arguments : simple command-line arguments and options parser:
|
|
> >
|
|
> > class arguments
|
|
> > {
|
|
> > public:
|
|
> > arguments(int argc, char* argv[]);
|
|
> >
|
|
> > bool has_option(const char* name) const;
|
|
> > bool get_option(const char* name, bool& value) const;
|
|
>
|
|
> > Any interest? Already proposed? Wasting my time?
|
|
>
|
|
> Actually, I'm already working on library with the same goals but
|
|
more
|
|
> elaborated. Moreover, it's almost finished. I planned to announce
|
|
it later,
|
|
> but have to do it now. My design goals were:
|
|
> - It should be resonable to use the library to parse as little as
|
|
2 command
|
|
> line options.
|
|
> - It must be extandable to privide any resonable handling
|
|
> - since command line is just a way to affect the program behaviour,
|
|
other
|
|
> ways to accomplish that must be provided, most notable is
|
|
configuration file
|
|
> - library should provide a way to store information from command
|
|
line and
|
|
> config file in a way allowing easy retrieval and using to change
|
|
configurable
|
|
> parameters of the program.
|
|
>
|
|
> The docs are available at:
|
|
> http://chronos.cs.msu.su/~ghost/projects/config_db/doc/index.html
|
|
>
|
|
> Let me know what you think.
|
|
|
|
Privet, Volodya.
|
|
|
|
Here what I am looking for to be supported by Command Line Argument
|
|
Framework directly or by means of easy extension:
|
|
|
|
1. command line argument formats
|
|
a. -<one letter key> <value>
|
|
b. -<one letter key><value>
|
|
c. -<key> <value>
|
|
d. -<option> - any length
|
|
e. /<key> <value> - and all other cases like a,b,c but with /
|
|
instead
|
|
g. --<key> <value>
|
|
h. -<key substring> <value>
|
|
An example: let say you expecting argument -osagent_port
|
|
then following argument lists should be valid:
|
|
-o 15000
|
|
-osa 15000
|
|
-osagent_port 15000
|
|
On the other hand it should perform validity checks. For example
|
|
if you also expect another argument -osagent_host. then first 2
|
|
argument list above should generate runtime error and 3d should
|
|
pass. Arguments integrity check should also be performed, i.e.
|
|
you should not allow for user to define 2 argument like this:
|
|
"-port"
|
|
"-port_type"
|
|
|
|
2. argument types
|
|
I should be able to explicitle specify expected argument type. For
|
|
example: std::string, int, double, option(bool). The framework should
|
|
perform value validation. For example 1.23 is not valid for int
|
|
argument. The framework should allow to use user-defined classes as
|
|
expected types for command-line argument. In other word. If I provide
|
|
you a class with predefined psecification framework should try to
|
|
generate object of argument class. Some simple extention you can
|
|
provide youself. For example, using following command line you should
|
|
be able to generate std::list<int>
|
|
-values 2 5 7 8
|
|
and using following command line you should be able to generate
|
|
std::list<std::string>
|
|
-files_to_test test1.td test2.td test3.td test4.td
|
|
and using following command line user should be able to provide
|
|
argument class A to generate std::list<A>
|
|
struct A{
|
|
std::string key;
|
|
int value;
|
|
};
|
|
|
|
-parameters_mapping name1 4 name5 7 name6 8 name9 1123
|
|
|
|
3. argument storage.
|
|
a. Framework should be able to generate and store arguments
|
|
internally. In this case framework in responsable for memory.
|
|
b. Framework should be able to generate and store argument into the
|
|
user-bound location. In this case user in responsable for memory.
|
|
|
|
4. arguments can have default values
|
|
|
|
5. arguments can be optional and required. The framework should
|
|
automatically check presence of of all required arguments.
|
|
|
|
6. argument value access
|
|
a. if user passed storage location - he will be able to get value
|
|
from there
|
|
b. by name and type. If any of them is incorrect - error. The same
|
|
rules aplied here as in 1.h if argument matching algorithm allows
|
|
substrings.
|
|
c. is_present check - to be able to check presence of optional
|
|
arguments.
|
|
|
|
7. usage line.
|
|
The framework should be able to generate a using line given a
|
|
difinition of all feilds. To support this you will probably need
|
|
argument description as one of the command line argument
|
|
constructor's argument. Thr framework should be able to configured to
|
|
use different usage line. If command line contain predefined keyword
|
|
(-help or /? for example) framework should print usage message.
|
|
|
|
8. Framework Error
|
|
If any of the following condition occures during command line
|
|
processing the framework should generate an error and print a usage
|
|
line:
|
|
a. invalid aargument
|
|
b. ambiguous argument
|
|
c. invalid value for the argument
|
|
d. absence of required argument
|
|
e. framework meet -help (of any other predefined keyword)
|
|
|
|
Invalid name or type should generate exception during value access.
|
|
|
|
Here my view on the problem.
|
|
|
|
Regards,
|
|
|
|
Gennadiy.
|
|
|
|
|
|
P.S. Did you look into Brat Appleton's work? It seems to be close to
|
|
what you are doing.
|
|
|
|
>
|
|
> Concerning your proposal, I can mark two points, apart from it's
|
|
been a
|
|
> subset of mine:
|
|
> 1. It uses get_options(const char* name, type& value) methods,
|
|
which are not
|
|
> extendable (and the similar thing is used in KConfig class in
|
|
KDE....) What I
|
|
> propose is
|
|
> variables_map vm .....
|
|
> int i = vm["magic"].as<int>()
|
|
> FontName fn = vm["font"].as<FontName>()
|
|
> 2. You propose wildcard expansions. This is good. But it is easy to
|
|
add it to
|
|
> any existing command line parsing library.
|
|
>
|
|
> - Volodya
|
|
|
|
|
|
Info: http://www.boost.org Unsubscribe: <mailto:boost-unsubscribe@yahoogroups.com>
|
|
|
|
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
|
|
|
|
|
|
|