33 #ifndef xmmAttribute_h 34 #define xmmAttribute_h 45 #pragma mark === Functions checkLimits === 55 void checkLimits(T
const& value, T
const& limit_min, T
const& limit_max) {
56 throw std::runtime_error(
57 "Attribute limits are not implemented for the current type.");
62 bool const& limit_max);
66 unsigned char const& limit_min,
67 unsigned char const& limit_max);
71 char const& limit_max);
75 unsigned int const& limit_min,
76 unsigned int const& limit_max);
80 int const& limit_max);
84 long const& limit_max);
88 float const& limit_max);
92 double const& limit_max);
95 void checkLimits<std::string>(std::string
const& value,
96 std::string
const& limit_min,
97 std::string
const& limit_max);
100 #pragma mark === Class AttributeBase === 121 #pragma mark === Class Attribute === 127 template <
typename T>
132 template <
typename U,
typename args,
class ListenerClass>
134 void (ListenerClass::*listenerMethod)(args)) {
135 using namespace std::placeholders;
137 callback_ = std::bind(listenerMethod, owner, _1);
148 Attribute(T
const& value = T(), T
const& limit_min = defaultLimitMin(),
149 T
const& limit_max = defaultLimitMax())
150 : limit_min_(limit_min), limit_max_(limit_max) {
161 : value_(src.value_),
162 limit_min_(src.limit_min_),
163 limit_max_(src.limit_max_) {
173 template <
typename U>
192 void set(T
const& value,
bool silently =
false) {
196 if (!silently && callback_) callback_(
this);
203 T
get()
const {
return value_; }
210 limit_min_ = limit_min;
218 limit_max_ = limit_max;
227 T
const& limit_max = defaultLimitMax()) {
228 setLimitMin(limit_min);
229 setLimitMax(limit_max);
265 #pragma mark === Class Attribute: vector specialization === 271 template <
typename T>
276 template <
typename U,
typename args,
class ListenerClass>
278 void (ListenerClass::*listenerMethod)(args)) {
279 using namespace std::placeholders;
281 callback_ = std::bind(listenerMethod, owner, _1);
293 Attribute(std::vector<T>
const& value = std::vector<T>(),
294 T
const& limit_min = defaultLimitMin(),
295 T
const& limit_max = defaultLimitMax(),
unsigned int size = 0)
296 : limit_min_(limit_min), limit_max_(limit_max), size_(size) {
307 : value_(src.value_),
308 limit_min_(src.limit_min_),
309 limit_max_(src.limit_max_),
320 template <
typename U>
342 void set(std::vector<T>
const& value,
bool silently =
false) {
343 if (size_ > 0 && value.size() != size_) {
344 throw std::domain_error(
"Attribute value has the wrong size");
346 for (
auto& val : value) {
351 if (!silently && callback_) callback_(
this);
358 std::vector<T>
get()
const {
return value_; }
365 T
at(
unsigned int index)
const {
367 return value_[index];
369 throw std::out_of_range(
"Index out of range");
378 limit_min_ = limit_min;
386 limit_max_ = limit_max;
395 T
const& limit_max = defaultLimitMax()) {
396 setLimitMin(limit_min);
397 setLimitMax(limit_max);
406 value_.resize(size, T());
414 unsigned int size()
const {
return value_.size(); }
454 #pragma mark === Class Attribute: vector<string> specialization === 464 template <
typename U,
typename args,
class ListenerClass>
466 void (ListenerClass::*listenerMethod)(args)) {
467 using namespace std::placeholders;
469 callback_ = std::bind(listenerMethod, owner, _1);
482 std::string
const& limit_min =
"",
483 std::string
const& limit_max =
"",
unsigned int size = 0)
484 : limit_min_(limit_min), limit_max_(limit_max), size_(size) {
495 : value_(src.value_),
496 limit_min_(src.limit_min_),
497 limit_max_(src.limit_max_),
508 template <
typename U>
530 void set(std::vector<std::string>
const& value,
bool silently =
false) {
531 if (size_ > 0 && value.size() != size_) {
532 throw std::domain_error(
"Attribute value has the wrong size");
534 for (
auto& val : value) {
539 if (!silently && callback_) callback_(
this);
546 std::vector<std::string>
get()
const {
return value_; }
553 std::string
at(
unsigned int index)
const {
555 return value_[index];
557 throw std::out_of_range(
"Index out of range");
565 void setLimitMin(std::string
const& limit_min = defaultLimitMin()) {
566 limit_min_ = limit_min;
573 void setLimitMax(std::string
const& limit_max = defaultLimitMax()) {
574 limit_max_ = limit_max;
582 void setLimits(std::string
const& limit_min = defaultLimitMin(),
583 std::string
const& limit_max = defaultLimitMax()) {
584 setLimitMin(limit_min);
585 setLimitMax(limit_max);
594 value_.resize(size,
"");
603 return static_cast<unsigned int>(value_.size());
void checkLimits< double >(double const &value, double const &limit_min, double const &limit_max)
Definition: xmmAttribute.cpp:97
Attribute(std::vector< std::string > const &value={}, std::string const &limit_min="", std::string const &limit_max="", unsigned int size=0)
Default Constructor.
Definition: xmmAttribute.hpp:481
void resize(unsigned int size)
set the attribute's size (vector Attribute). if 0, there is not size-checking on set.
Definition: xmmAttribute.hpp:593
Attribute & operator=(Attribute< U > const &src)
Assignment operator.
Definition: xmmAttribute.hpp:321
void checkLimits< unsigned int >(unsigned int const &value, unsigned int const &limit_min, unsigned int const &limit_max)
Definition: xmmAttribute.cpp:60
AttributeChangeCallback callback_
Callback function to be called on attribute change.
Definition: xmmAttribute.hpp:640
Attribute(Attribute const &src)
Copy Constructor.
Definition: xmmAttribute.hpp:494
void setLimits(T const &limit_min=defaultLimitMin(), T const &limit_max=defaultLimitMax())
set the attribute's limit values
Definition: xmmAttribute.hpp:394
AttributeChangeCallback callback_
Callback function to be called on attribute change.
Definition: xmmAttribute.hpp:450
AttributeChangeCallback callback_
Callback function to be called on attribute change.
Definition: xmmAttribute.hpp:261
void checkLimits< bool >(bool const &value, bool const &limit_min, bool const &limit_max)
Definition: xmmAttribute.cpp:37
static T defaultLimitMin()
Attribute default minimum value.
Definition: xmmAttribute.hpp:236
void setLimitMax(T const &limit_max=defaultLimitMax())
set the attribute's maximum value
Definition: xmmAttribute.hpp:217
void onAttributeChange(U *owner, void(ListenerClass::*listenerMethod)(args))
Definition: xmmAttribute.hpp:465
std::function< void(AttributeBase *)> AttributeChangeCallback
Definition: xmmAttribute.hpp:462
T limit_min_
Minimum value of the attribute.
Definition: xmmAttribute.hpp:251
void setLimits(std::string const &limit_min=defaultLimitMin(), std::string const &limit_max=defaultLimitMax())
set the attribute's limit values
Definition: xmmAttribute.hpp:582
T value_
Current value of the attribute.
Definition: xmmAttribute.hpp:246
unsigned int size() const
get the attribute's current size (vector Attribute)
Definition: xmmAttribute.hpp:414
static std::string defaultLimitMax()
Attribute default maximum value.
Definition: xmmAttribute.hpp:615
void setLimitMin(T const &limit_min=defaultLimitMin())
set the attribute's minimum value
Definition: xmmAttribute.hpp:209
void checkLimits(T const &value, T const &limit_min, T const &limit_max)
checks the validity of the requested value with respect to the current limits
Definition: xmmAttribute.hpp:55
T limit_max_
Maximum value of the attribute.
Definition: xmmAttribute.hpp:256
static T defaultLimitMin()
Attribute default minimum value.
Definition: xmmAttribute.hpp:420
Base Class for Generic Attributes.
Definition: xmmAttribute.hpp:105
void resize(unsigned int size)
set the attribute's size (vector Attribute). if 0, there is not size-checking on set.
Definition: xmmAttribute.hpp:405
Attribute & operator=(Attribute< U > const &src)
Assignment operator.
Definition: xmmAttribute.hpp:509
virtual ~AttributeBase()
Definition: xmmAttribute.hpp:107
unsigned int size_
Size of the vector of values.
Definition: xmmAttribute.hpp:445
std::vector< std::string > value_
Current value of the attribute.
Definition: xmmAttribute.hpp:620
Attribute(T const &value=T(), T const &limit_min=defaultLimitMin(), T const &limit_max=defaultLimitMax())
Default Constructor.
Definition: xmmAttribute.hpp:148
std::vector< T > value_
Current value of the attribute.
Definition: xmmAttribute.hpp:430
std::string limit_max_
Maximum value of the attribute.
Definition: xmmAttribute.hpp:630
void checkLimits< long >(long const &value, long const &limit_min, long const &limit_max)
Definition: xmmAttribute.cpp:79
Attribute(Attribute const &src)
Copy Constructor.
Definition: xmmAttribute.hpp:306
void setLimitMax(std::string const &limit_max=defaultLimitMax())
set the attribute's maximum value
Definition: xmmAttribute.hpp:573
static std::string defaultLimitMin()
Attribute default minimum value.
Definition: xmmAttribute.hpp:610
std::function< void(AttributeBase *)> AttributeChangeCallback
Definition: xmmAttribute.hpp:130
void checkLimits< int >(int const &value, int const &limit_min, int const &limit_max)
Definition: xmmAttribute.cpp:70
void setLimitMin(T const &limit_min=defaultLimitMin())
set the attribute's minimum value
Definition: xmmAttribute.hpp:377
void setLimits(T const &limit_min=defaultLimitMin(), T const &limit_max=defaultLimitMax())
set the attribute's limit values
Definition: xmmAttribute.hpp:226
void setLimitMax(T const &limit_max=defaultLimitMax())
set the attribute's maximum value
Definition: xmmAttribute.hpp:385
Attribute(std::vector< T > const &value=std::vector< T >(), T const &limit_min=defaultLimitMin(), T const &limit_max=defaultLimitMax(), unsigned int size=0)
Default Constructor.
Definition: xmmAttribute.hpp:293
void setLimitMin(std::string const &limit_min=defaultLimitMin())
set the attribute's minimum value
Definition: xmmAttribute.hpp:565
T at(unsigned int index) const
get the attribute's current value at a given index
Definition: xmmAttribute.hpp:365
void onAttributeChange(U *owner, void(ListenerClass::*listenerMethod)(args))
Definition: xmmAttribute.hpp:277
T limit_max_
Maximum value of the attribute.
Definition: xmmAttribute.hpp:440
T limit_min_
Minimum value of the attribute.
Definition: xmmAttribute.hpp:435
Attribute(Attribute const &src)
Copy Constructor.
Definition: xmmAttribute.hpp:160
Generic Attribute.
Definition: xmmAttribute.hpp:128
std::function< void(AttributeBase *)> AttributeChangeCallback
Definition: xmmAttribute.hpp:274
Definition: xmmAttribute.hpp:42
bool changed
Defines if the value has been changed.
Definition: xmmAttribute.hpp:117
void checkLimits< unsigned char >(unsigned char const &value, unsigned char const &limit_min, unsigned char const &limit_max)
Definition: xmmAttribute.cpp:41
static T defaultLimitMax()
Attribute default maximum value.
Definition: xmmAttribute.hpp:425
void checkLimits< float >(float const &value, float const &limit_min, float const &limit_max)
Definition: xmmAttribute.cpp:88
Attribute & operator=(Attribute< U > const &src)
Assignment operator.
Definition: xmmAttribute.hpp:174
void checkLimits< char >(char const &value, char const &limit_min, char const &limit_max)
Definition: xmmAttribute.cpp:51
void onAttributeChange(U *owner, void(ListenerClass::*listenerMethod)(args))
Definition: xmmAttribute.hpp:133
unsigned int size() const
get the attribute's current size (vector Attribute)
Definition: xmmAttribute.hpp:602
std::string limit_min_
Minimum value of the attribute.
Definition: xmmAttribute.hpp:625
unsigned int size_
Size of the vector of values.
Definition: xmmAttribute.hpp:635
AttributeBase()
Default Constructor.
Definition: xmmAttribute.hpp:112
static T defaultLimitMax()
Attribute default maximum value.
Definition: xmmAttribute.hpp:241
std::string at(unsigned int index) const
get the attribute's current value at a given index
Definition: xmmAttribute.hpp:553