Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
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 }
00121
00122 #endif // ROSMATLAB_OPTIONS_H