TwirreLink
 All Classes Functions Pages
ValueImpl.h
1 /*
2  * Twirre: architecture for autonomous UAVs using interchangeable commodity components
3  *
4  * Copyright© 2017 Centre of expertise in Computer Vision & Data Science, NHL Stenden University of applied sciences
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
7  *
8  * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
11  */
12 
13 #ifndef CORE_VALUEIMPL_H_
14 #define CORE_VALUEIMPL_H_
15 
16 #include "../Core/Value.h"
17 
18 namespace twirre
19 {
20 template<typename T>
21  class ValueImpl: public Parameter
22  {
23  public:
24  ValueImpl(const std::string name, const T val);
25  ValueImpl(const std::string name, const T val, const T min, const T max);
26  ValueImpl(const std::string name, const T val, owned_mutex * actuatorMutex);
27  ValueImpl(const std::string name, const T val, const T min, const T max, owned_mutex * actuatorMutex);
28 
29  virtual ~ValueImpl()
30  {
31  }
32 
33  virtual NativeType getNativeType() override;
34  T getNativeValue();
35  void setNativeValue(T val);
36 
37  virtual uint8_t as_uint8_t() override;
38  virtual int8_t as_int8_t() override;
39  virtual uint16_t as_uint16_t() override;
40  virtual int16_t as_int16_t() override;
41  virtual uint32_t as_uint32_t() override;
42  virtual int32_t as_int32_t() override;
43  virtual uint64_t as_uint64_t() override;
44  virtual int64_t as_int64_t() override;
45  virtual float as_float() override;
46  virtual double as_double() override;
47  virtual std::string as_string() override;
48 
49  virtual uint8_t as_uint8_t(uint32_t index) override;
50  virtual int8_t as_int8_t(uint32_t index) override;
51  virtual uint16_t as_uint16_t(uint32_t index) override;
52  virtual int16_t as_int16_t(uint32_t index) override;
53  virtual uint32_t as_uint32_t(uint32_t index) override;
54  virtual int32_t as_int32_t(uint32_t index) override;
55  virtual uint64_t as_uint64_t(uint32_t index) override;
56  virtual int64_t as_int64_t(uint32_t index) override;
57  virtual float as_float(uint32_t index) override;
58  virtual double as_double(uint32_t index) override;
59 
60  virtual void set(const uint8_t val) override;
61  virtual void set(const int8_t val) override;
62  virtual void set(const uint16_t val) override;
63  virtual void set(const int16_t val) override;
64  virtual void set(const uint32_t val) override;
65  virtual void set(const int32_t val) override;
66  virtual void set(const uint64_t val) override;
67  virtual void set(const int64_t val) override;
68  virtual void set(const float val) override;
69  virtual void set(const double val) override;
70  virtual void set(const Value& val) override;
71 
72  virtual void set(const uint8_t * vals, const uint32_t size) override;
73  virtual void set(const int8_t * vals, const uint32_t size) override;
74  virtual void set(const uint16_t * vals, const uint32_t size) override;
75  virtual void set(const int16_t * vals, const uint32_t size) override;
76  virtual void set(const uint32_t * vals, const uint32_t size) override;
77  virtual void set(const int32_t * vals, const uint32_t size) override;
78  virtual void set(const uint64_t * vals, const uint32_t size) override;
79  virtual void set(const int64_t * vals, const uint32_t size) override;
80  virtual void set(const float * vals, const uint32_t size) override;
81  virtual void set(const double * vals, const uint32_t size) override;
82 
83  virtual void set(const std::vector<uint8_t>& vals) override;
84  virtual void set(const std::vector<int8_t>& vals) override;
85  virtual void set(const std::vector<uint16_t>& vals) override;
86  virtual void set(const std::vector<int16_t>& vals) override;
87  virtual void set(const std::vector<uint32_t>& vals) override;
88  virtual void set(const std::vector<int32_t>& vals) override;
89  virtual void set(const std::vector<uint64_t>& vals) override;
90  virtual void set(const std::vector<int64_t>& vals) override;
91  virtual void set(const std::vector<float>& vals) override;
92  virtual void set(const std::vector<double>& vals) override;
93 
94  virtual Scalar& getMin() override;
95  virtual Scalar& getMax() override;
96 
97  virtual bool isValid() const override;
98  virtual bool isArray() const override;
99 
100  virtual uint32_t getSize() const override;
101  virtual size_t getElementSize() const override;
102  virtual void* getBuffer() override;
103  protected:
104  T _val;
105  ScalarImpl<T> _min;
106  ScalarImpl<T> _max;
107  virtual void copyTo(Parameter* parm) const override;
108  };
109 
110  /* explicit template instantiations of ValueImpl */
111  extern template class ValueImpl<uint8_t> ;
112  extern template class ValueImpl<int8_t> ;
113  extern template class ValueImpl<uint16_t> ;
114  extern template class ValueImpl<int16_t> ;
115  extern template class ValueImpl<uint32_t> ;
116  extern template class ValueImpl<int32_t> ;
117  extern template class ValueImpl<uint64_t> ;
118  extern template class ValueImpl<int64_t> ;
119  extern template class ValueImpl<float> ;
120  extern template class ValueImpl<double> ;
121 }
122 #endif /* CORE_VALUEIMPL_H_ */
Definition: Value.h:194
Definition: ValueImpl.h:21
Definition: Value.h:259
Definition: Value.h:140
A mutex with the concept of 'ownership'.
Definition: owned_mutex.h:27
Definition: Value.h:118