| 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/ |
| |
| |
| |