options.h
Go to the documentation of this file.
00001 //=================================================================================================
00002 // Copyright (c) 2012, Johannes Meyer, TU Darmstadt
00003 // All rights reserved.
00004 
00005 // Redistribution and use in source and binary forms, with or without
00006 // modification, are permitted provided that the following conditions are met:
00007 //     * Redistributions of source code must retain the above copyright
00008 //       notice, this list of conditions and the following disclaimer.
00009 //     * Redistributions in binary form must reproduce the above copyright
00010 //       notice, this list of conditions and the following disclaimer in the
00011 //       documentation and/or other materials provided with the distribution.
00012 //     * Neither the name of the Flight Systems and Automatic Control group,
00013 //       TU Darmstadt, nor the names of its contributors may be used to
00014 //       endorse or promote products derived from this software without
00015 //       specific prior written permission.
00016 
00017 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00018 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00019 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00020 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
00021 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00022 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00023 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00024 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00025 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00026 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027 //=================================================================================================
00028 
00029 #ifndef ROSMATLAB_OPTIONS_H
00030 #define ROSMATLAB_OPTIONS_H
00031 
00032 #include <matrix.h>
00033 #include <string>
00034 #include <map>
00035 #include <vector>
00036 #include <set>
00037 
00038 namespace rosmatlab {
00039 class Options {
00040 public:
00041 
00042   static bool isString(const mxArray *value);
00043   static std::string getString(const mxArray *value);
00044 
00045   static bool isScalar(const mxArray *value);
00046 
00047   static bool isDoubleScalar(const mxArray *value);
00048   static double getDoubleScalar(const mxArray *value);
00049 
00050   static bool isIntegerScalar(const mxArray *value);
00051   static int getIntegerScalar(const mxArray *value);
00052 
00053   static bool isLogicalScalar(const mxArray *value);
00054   static bool getLogicalScalar(const mxArray *value);
00055 
00056 public:
00057   typedef std::map<std::string, const mxArray *> ArrayMap;
00058 
00059   typedef std::vector<std::string> Strings;
00060   typedef std::map<std::string, Strings> StringMap;
00061   typedef std::vector<double> Doubles;
00062   typedef std::map<std::string, Doubles> DoubleMap;
00063   typedef std::vector<int> Integers;
00064   typedef std::map<std::string, Integers> IntegerMap;
00065   typedef std::vector<bool> Bools;
00066   typedef std::map<std::string, Bools> BoolMap;
00067 
00068 public:
00069   Options();
00070   Options(int nrhs, const mxArray *prhs[], bool lowerCaseKeys = false);
00071   virtual ~Options();
00072 
00073   virtual void init(int nrhs, const mxArray *prhs[], bool lowerCaseKeys = false);
00074   void merge(const Options& options);
00075   void clear();
00076 
00077   bool hasKey(const std::string& key) const;
00078   const mxArray *getArray(const std::string& key) const;
00079 
00080   const std::string& getString(const std::string& key, const std::string& default_value = std::string()) const;
00081   const Strings& getStrings(const std::string& key) const;
00082   double getDouble(const std::string& key, double default_value = 0) const;
00083   const Doubles& getDoubles(const std::string& key) const;
00084   int getInteger(const std::string& key, int default_value = 0) const;
00085   const Integers& getIntegers(const std::string& key) const;
00086   bool getBool(const std::string& key, bool default_value = false) const;
00087   const Bools& getBools(const std::string& key) const;
00088 
00089   Options &add(const std::string& key, const std::string& value);
00090   Options &add(const std::string& key, double value);
00091   Options &add(const std::string& key, int value);
00092   Options &add(const std::string& key, bool value);
00093 
00094   Options &set(const std::string& key, const std::string& value);
00095   Options &set(const std::string& key, double value);
00096   Options &set(const std::string& key, int value);
00097   Options &set(const std::string& key, bool value);
00098 
00099   Options &set(const std::string &key, const mxArray *value);
00100 
00101   void warnUnused() const;
00102   void throwOnUnused() const;
00103 
00104   const ArrayMap& arrays() const { return arrays_; }
00105   const StringMap& strings() const { return strings_; }
00106   const DoubleMap& doubles() const { return doubles_; }
00107   const IntegerMap& integers() const { return integers_; }
00108   const BoolMap& bools() const { return bools_; }
00109 
00110 private:
00111   ArrayMap arrays_;
00112   StringMap strings_;
00113   DoubleMap doubles_;
00114   IntegerMap integers_;
00115   BoolMap bools_;
00116 
00117   mutable std::set<std::string> used_;
00118 };
00119 
00120 } // namespace rosmatlab
00121 
00122 #endif // ROSMATLAB_OPTIONS_H


rosmatlab
Author(s): Johannes Meyer
autogenerated on Fri Jul 25 2014 06:08:36