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/ 



