OW_CmdLineParser.hpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002 * Copyright (C) 2004 Vintela, Inc. All rights reserved.
00003 *
00004 * Redistribution and use in source and binary forms, with or without
00005 * modification, are permitted provided that the following conditions are met:
00006 *
00007 *  - Redistributions of source code must retain the above copyright notice,
00008 *    this list of conditions and the following disclaimer.
00009 *
00010 *  - Redistributions in binary form must reproduce the above copyright notice,
00011 *    this list of conditions and the following disclaimer in the documentation
00012 *    and/or other materials provided with the distribution.
00013 *
00014 *  - Neither the name of Vintela, Inc. nor the names of its
00015 *    contributors may be used to endorse or promote products derived from this
00016 *    software without specific prior written permission.
00017 *
00018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
00019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00021 * ARE DISCLAIMED. IN NO EVENT SHALL Vintela, Inc. OR THE CONTRIBUTORS
00022 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00023 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00024 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00025 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00026 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00027 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00028 * POSSIBILITY OF SUCH DAMAGE.
00029 *******************************************************************************/
00030 
00035 #ifndef OW_CMD_LINE_PARSER_HPP_INCLUDE_GUARD_
00036 #define OW_CMD_LINE_PARSER_HPP_INCLUDE_GUARD_
00037 #include "OW_config.h"
00038 #include "OW_String.hpp"
00039 #include "OW_SortedVectorMap.hpp"
00040 #include "OW_Array.hpp"
00041 #include "OW_Exception.hpp"
00042 
00043 namespace OW_NAMESPACE
00044 {
00045 
00046 OW_DECLARE_APIEXCEPTION(CmdLineParser, OW_COMMON_API)
00047 
00048 
00055 class OW_COMMON_API CmdLineParser
00056 {
00057 public:
00058    enum EArgumentTypeFlag
00059    {
00060       E_NO_ARG,       // the option does not take an argument
00061       E_REQUIRED_ARG, // the option requires an argument
00062       E_OPTIONAL_ARG  // the option might have an argument
00063    };
00064 
00065    // errors codes that may be specified when a CmdLineParserException is thrown
00066    enum EErrorCodes
00067    {
00068       E_INVALID_OPTION,         // an unknown option was specified
00069       E_MISSING_ARGUMENT,       // an option for which argtype == E_REQUIRED_ARG did not have an argument
00070       E_INVALID_NON_OPTION_ARG, // a non-option argument was specified, but they are not allowed
00071       E_MISSING_OPTION          // the option wasn't specified
00072    };
00073 
00074    struct Option
00075    {
00076       int id;                    // unique option id, used to retrieve option values
00077       char shortopt;             // short option char.  Set to '\0' for none.
00078       const char* longopt;       // long option string.  Set to 0 for none.
00079       EArgumentTypeFlag argtype; // specifies constraints for the option's argument
00080       const char* defaultValue;  // if argtype == E_OPTIONAL_ARG and no argument is specified, this value will be returned.  Set to 0 for none.
00081       const char* description;   // description used by getUsage().  May be 0.
00082    };
00083 
00084    enum EAllowNonOptionArgsFlag
00085    {
00086       E_NON_OPTION_ARGS_ALLOWED,
00087       E_NON_OPTION_ARGS_INVALID
00088    };
00089 
00098    CmdLineParser(int argc, char const* const* const argv, const Option* options, EAllowNonOptionArgsFlag allowNonOptionArgs);
00099 
00107    String getOptionValue(int id, const char* defaultValue = "") const;
00108    
00117    String mustGetOptionValue(int id, const char* exceptionMessage = "") const;
00118    
00124    StringArray getOptionValueList(int id) const;
00125    
00133    StringArray mustGetOptionValueList(int id, const char* exceptionMessage = "") const;
00134    
00138    bool isSet(int id) const;
00139    
00143    size_t getNonOptionCount () const;
00144    
00149    String getNonOptionArg(size_t n) const;
00150 
00154    StringArray getNonOptionArgs() const;
00155    
00169    static String getUsage(const Option* options, unsigned int maxColumns = 80);
00170 
00171 
00172 private:
00173 
00174 #ifdef OW_WIN32
00175 #pragma warning (push)
00176 #pragma warning (disable: 4251)
00177 #endif
00178 
00179    // key is Option::id, value is the value(s) specified by the user
00180    typedef SortedVectorMap<int, StringArray> optionsMap_t;
00181    optionsMap_t m_parsedOptions;
00182    StringArray m_nonOptionArgs;
00183 
00184 #ifdef OW_WIN32
00185 #pragma warning (pop)
00186 #endif
00187 
00188 };
00189 
00190 } // end namespace OW_NAMESPACE
00191 
00192 #endif
00193 
00194 

Generated on Thu Feb 9 08:47:56 2006 for openwbem by  doxygen 1.4.6