+class LIBMIDIPP_API Value
+{
+public:
+ Value() {}
+ Value(const uint16_t number,
+ const std::string& name)
+ : _number(number)
+ , _name(name)
+ {}
+
+ uint16_t number() const { return _number; }
+ const std::string& name() const { return _name; }
+
+ void set_number(uint16_t number) { _number = number; }
+ void set_name(const std::string& name) { _name = name; }
+
+ XMLNode& get_state(void);
+ int set_state(const XMLTree&, const XMLNode&);
+
+private:
+ uint16_t _number;
+ std::string _name;
+};
+
+class LIBMIDIPP_API ValueNameList
+{
+public:
+ typedef std::map<uint16_t, boost::shared_ptr<Value> > Values;
+
+ ValueNameList() {}
+ ValueNameList(const std::string& name) : _name(name) {}
+
+ const std::string& name() const { return _name; }
+
+ void set_name(const std::string& name) { _name = name; }
+
+ boost::shared_ptr<const Value> value(uint16_t num) const;
+ boost::shared_ptr<const Value> max_value_below(uint16_t num) const;
+
+ const Values& values() const { return _values; }
+
+ XMLNode& get_state(void);
+ int set_state(const XMLTree&, const XMLNode&);
+
+private:
+ std::string _name;
+ Values _values;
+};
+