From: dylan_at_[hidden]
Date: 2001-11-16 01:42:59


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;
        bool get_option(const char* name, int& value) const;
        bool get_option(const char* name, float& value) const;
        bool get_option(const char* name, double& value) const;
        bool get_option(const char* name, const char*& value) const;
        bool get_option(const char* name, std::string& value) const;

        const char* program() const;
        
        typedef const char* const* iterator;

        // first non-option argument
        iterator begin() const;
        iterator end() const;

private:
        int find_option_index(const char* name) const;
        int argc_;
        char** argv_;
        mutable int arga_;
};

Sample usage:

int main(int argc, char* argv[])
{
 arguments args(argc, argv);
 int key = 0;
 args.get_option("key key);
 bool verbose = args.has_option("v");
 for (arguments::iterator it = args.begin(); it != args.end(); ++it)
  encrypt_file(*it, key, verbose);
}

For Windows, it does automatic wildcard expansion, and to do this I
wrote a wildcard finder class, the POSIX version of which is:

struct file_finder
{
        file_finder(const char* pattern);
        ~file_finder();
        typedef const char* const* iterator;
        operator bool() const;
        iterator begin();
        iterator end();
private:
        glob_t glob_;
};

The Win32 version is somewhat more complex and uses FindFirstFile etc.
but works just the same.

Any interest? Already proposed? Wasting my time?

Thanks

Dylan