qpid/Options.h Source File

Apache Qpid - AMQP Messaging for Java JMS, C++, Python, Ruby, and .NET | Apache Qpid Documentation

- Main Page
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

qpid/Options.h
Go to the documentation of this file.

    00001 #ifndef QPID_COMMONOPTIONS_H
    00002 #define QPID_COMMONOPTIONS_H
    00003
    00004 /*
    00005  *
    00006  * Licensed to the Apache Software Foundation (ASF) under one
    00007  * or more contributor license agreements.  See the NOTICE file
    00008  * distributed with this work for additional information
    00009  * regarding copyright ownership.  The ASF licenses this file
    00010  * to you under the Apache License, Version 2.0 (the
    00011  * "License"); you may not use this file except in compliance
    00012  * with the License.  You may obtain a copy of the License at
    00013  *
    00014  *   http://www.apache.org/licenses/LICENSE-2.0
    00015  *
    00016  * Unless required by applicable law or agreed to in writing,
    00017  * software distributed under the License is distributed on an
    00018  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    00019  * KIND, either express or implied.  See the License for the
    00020  * specific language governing permissions and limitations
    00021  * under the License.
    00022  *
    00023  */
    00024
    00025 #include "qpid/Exception.h"
    00026
    00027 // Disable warnings triggered by boost.
    00028 #ifdef _MSC_VER
    00029 #  pragma warning(push)
    00030 #  pragma warning(disable : 4251 4275)
    00031 #endif
    00032
    00033 #include <boost/program_options.hpp>
    00034 #include <boost/format.hpp>
    00035
    00036 #ifdef _MSC_VER
    00037 #  pragma warning(pop)
    00038 #endif
    00039
    00040 #include <sstream>
    00041 #include <iterator>
    00042 #include <algorithm>
    00043 #include <string>
    00044 #include "qpid/CommonImportExport.h"
    00045
    00046 namespace qpid {
    00047 namespace po=boost::program_options;
    00048
    00049
    00050
    00052 QPID_COMMON_EXTERN std::string prettyArg(const std::string&, const std::string&);
    00053
    00055 template <class T>
    00056 class OptionValue : public po::typed_value<T> {
    00057   public:
    00058     OptionValue(T& value, const std::string& arg)
    00059         : po::typed_value<T>(&value), argName(arg) {}
    00060     std::string name() const { return argName; }
    00061
    00062   private:
    00063     std::string argName;
    00064 };
    00065
    00066
    00073 template<class T>
    00074 po::value_semantic* optValue(T& value, const char* name) {
    00075     std::string valstr(boost::lexical_cast<std::string>(value));
    00076     return new OptionValue<T>(value, prettyArg(name, valstr));
    00077 }
    00078
    00082 template <class T>
    00083 po::value_semantic* optValue(std::vector<T>& value, const char* name) {
    00084     using namespace std;
    00085     ostringstream os;
    00086     copy(value.begin(), value.end(), ostream_iterator<T>(os, " "));
    00087     string val=os.str();
    00088     if (!val.empty())
    00089         val.erase(val.end()-1); // Remove trailing " "
    00090     return (new OptionValue<vector<T> >(value, prettyArg(name, val)));
    00091 }
    00092
    00094 inline po::value_semantic* optValue(bool& value) { return po::bool_switch(&value); }
    00095
    00136 struct Options : public po::options_description {
    00137
    00138     struct Exception : public qpid::Exception {
    00139         Exception(const std::string& msg) : qpid::Exception(msg) {}
    00140     };
    00141
    00142     QPID_COMMON_EXTERN Options(const std::string& name=std::string());
    00143
    00149     QPID_COMMON_EXTERN void parse(int argc, char const* const* argv,
    00150                const std::string& configfile=std::string(),
    00151                bool  allowUnknown = false);
    00152
    00153
    00154   boost::program_options::options_description_easy_init addOptions() {
    00155       return add_options();
    00156   }
    00157 };
    00158
    00159
    00160
    00164 struct CommonOptions : public Options {
    00165     QPID_COMMON_EXTERN CommonOptions(const std::string& name=std::string(),
    00166                   const std::string& configfile=std::string());
    00167     bool help;
    00168     bool version;
    00169     std::string config;
    00170 };
    00171
    00172
    00173
    00174
    00175 } // namespace qpid
    00176
    00177 #endif