TwirreLink
 All Classes Functions Pages
ArrayValue.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_ARRAYVALUE_H_
14 #define CORE_ARRAYVALUE_H_
15 
16 #include "../Core/Value.h"
17 
18 namespace twirre
19 {
20 template<typename T>
21  class ArrayValue: public Parameter
22  {
23  public:
24  ArrayValue(const std::string name);
25  ArrayValue(const std::string name, const uint32_t size, const T defaultValue);
26  ArrayValue(const std::string name, const uint32_t size, const T* defaultArray);
27  ArrayValue(const std::string name, owned_mutex * actuatorMutex);
28  ArrayValue(const std::string name, owned_mutex * actuatorMutex, const uint32_t size, const T defaultValue);
29  ArrayValue(const std::string name, owned_mutex * actuatorMutex, const uint32_t size, const T* defaultArray);
30 
31  //disambiguation constructor for passing an int as defaultValue
32  template<typename U = T>
33  ArrayValue(const std::string name, const uint32_t size, typename std::enable_if<!std::is_same<U, int>::value, const int>::type defaultValue) :
34  ArrayValue(name, size, static_cast<T>(defaultValue))
35  {
36 
37  }
38  //disambiguation constructor for passing an int as defaultValue
39  template<typename U = T>
40  ArrayValue(const std::string name, owned_mutex * actuatorMutex, const uint32_t size, typename std::enable_if<!std::is_same<U, int>::value, const int>::type defaultValue) :
41  ArrayValue(name, size, static_cast<T>(defaultValue))
42  {
43 
44  }
45 
46  virtual ~ArrayValue() noexcept;
47 
48  virtual NativeType getNativeType() override;
49  T* nativeValue();
50 
51  /* copy, move constructors and operators */
52  ArrayValue(const ArrayValue<T> & val);
53  ArrayValue(ArrayValue<T> && val) noexcept;
54  ArrayValue<T> & operator =(const ArrayValue<T> & other);
55  ArrayValue<T> & operator =(ArrayValue<T> && other) noexcept;
56 
57  virtual uint8_t as_uint8_t() override;
58  virtual int8_t as_int8_t() override;
59  virtual uint16_t as_uint16_t() override;
60  virtual int16_t as_int16_t() override;
61  virtual uint32_t as_uint32_t() override;
62  virtual int32_t as_int32_t() override;
63  virtual uint64_t as_uint64_t() override;
64  virtual int64_t as_int64_t() override;
65  virtual float as_float() override;
66  virtual double as_double() override;
67  virtual std::string as_string() override;
68 
69  virtual uint8_t as_uint8_t(uint32_t index) override;
70  virtual int8_t as_int8_t(uint32_t index) override;
71  virtual uint16_t as_uint16_t(uint32_t index) override;
72  virtual int16_t as_int16_t(uint32_t index) override;
73  virtual uint32_t as_uint32_t(uint32_t index) override;
74  virtual int32_t as_int32_t(uint32_t index) override;
75  virtual uint64_t as_uint64_t(uint32_t index) override;
76  virtual int64_t as_int64_t(uint32_t index) override;
77  virtual float as_float(uint32_t index) override;
78  virtual double as_double(uint32_t index) override;
79 
80  virtual void set(const uint8_t val) override;
81  virtual void set(const int8_t val) override;
82  virtual void set(const uint16_t val) override;
83  virtual void set(const int16_t val) override;
84  virtual void set(const uint32_t val) override;
85  virtual void set(const int32_t val) override;
86  virtual void set(const uint64_t val) override;
87  virtual void set(const int64_t val) override;
88  virtual void set(const float val) override;
89  virtual void set(const double val) override;
90  virtual void set(const Value& val) override;
91 
92  virtual void set(const uint8_t * vals, const uint32_t size) override;
93  virtual void set(const int8_t * vals, const uint32_t size) override;
94  virtual void set(const uint16_t * vals, const uint32_t size) override;
95  virtual void set(const int16_t * vals, const uint32_t size) override;
96  virtual void set(const uint32_t * vals, const uint32_t size) override;
97  virtual void set(const int32_t * vals, const uint32_t size) override;
98  virtual void set(const uint64_t * vals, const uint32_t size) override;
99  virtual void set(const int64_t * vals, const uint32_t size) override;
100  virtual void set(const float * vals, const uint32_t size) override;
101  virtual void set(const double * vals, const uint32_t size) override;
102 
103  virtual void set(const std::vector<uint8_t>& vals) override;
104  virtual void set(const std::vector<int8_t>& vals) override;
105  virtual void set(const std::vector<uint16_t>& vals) override;
106  virtual void set(const std::vector<int16_t>& vals) override;
107  virtual void set(const std::vector<uint32_t>& vals) override;
108  virtual void set(const std::vector<int32_t>& vals) override;
109  virtual void set(const std::vector<uint64_t>& vals) override;
110  virtual void set(const std::vector<int64_t>& vals) override;
111  virtual void set(const std::vector<float>& vals) override;
112  virtual void set(const std::vector<double>& vals) override;
113 
114  virtual bool isValid() const override;
115  virtual bool isArray() const override;
116 
117  virtual Scalar& getMin() override;
118  virtual Scalar& getMax() override;
119 
120  virtual uint32_t getSize() const override;
121  virtual size_t getElementSize() const override;
122  virtual void* getBuffer() override;
123  virtual T* getNativeBuffer();
124  virtual void setSize(uint32_t size);
125  virtual void setNative(T* data, uint32_t size);
126  virtual T getNative(uint32_t id);
127  virtual T operator[](uint32_t id);
128  protected:
129  T* _val;
130  uint32_t _size;
131  ScalarImpl<T> _min;
132  ScalarImpl<T> _max;
133  virtual void copyTo(Parameter* parm) const override;
134  };
135 
136  /* explicit template instantiations of ArrayValue */
137  extern template class ArrayValue<uint8_t> ;
138  extern template class ArrayValue<int8_t> ;
139  extern template class ArrayValue<uint16_t> ;
140  extern template class ArrayValue<int16_t> ;
141  extern template class ArrayValue<uint32_t> ;
142  extern template class ArrayValue<int32_t> ;
143  extern template class ArrayValue<uint64_t> ;
144  extern template class ArrayValue<int64_t> ;
145  extern template class ArrayValue<float> ;
146  extern template class ArrayValue<double> ;
147 }
148 #endif /* CORE_ARRAYVALUE_H_ */
Definition: Value.h:194
Definition: Value.h:259
Definition: ArrayValue.h:21
Definition: Value.h:140
A mutex with the concept of 'ownership'.
Definition: owned_mutex.h:27
Definition: Value.h:118