stromx  0.8.0
Primitive.h
1 /*
2 * Copyright 2011 Matthias Fuchs
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 
17 #ifndef STROMX_RUNTIME_PRIMITIVE_H
18 #define STROMX_RUNTIME_PRIMITIVE_H
19 
20 #ifdef __GNUG__
21  #include <tr1/cstdint>
22 #else
23  #include <cstdint>
24 #endif
25 
26 #include "stromx/runtime/Data.h"
27 #include "stromx/runtime/Version.h"
28 
29 namespace stromx
30 {
31  namespace runtime
32  {
33  template<typename data_t>
34  class NumericParameter;
35 
37  template <class repr_t, class val_t>
38  class STROMX_RUNTIME_API Primitive : public Data
39  {
40  public:
42  explicit Primitive() : m_value(0) {}
43 
45  explicit Primitive(const repr_t value) : m_value(val_t(value)) {}
46 
47  virtual const std::string & type() const { return TYPE; }
48  virtual const Version & version() const { return VERSION; }
49  virtual const std::string & package() const { return PACKAGE; }
50 
51  virtual const VariantHandle & variant() const;
52 
53  virtual Data* clone() const { return new Primitive<repr_t, val_t>(m_value); }
54 
55  virtual void serialize(OutputProvider & out) const;
56 
57  virtual void deserialize(InputProvider & in, const Version & version);
58 
60  const repr_t get() const { return m_value; }
61 
63  operator repr_t() const { return get(); }
64 
66  const Primitive operator=(const repr_t value)
67  {
68  m_value = val_t(value);
69  return *this;
70  }
71 
73  static const Primitive MIN;
74 
76  static const Primitive MAX;
77 
78  private:
79  static const std::string TYPE;
80  static const std::string PACKAGE;
81  static const Version VERSION;
82 
83  val_t m_value;
84  };
85 
88  template<>
89  STROMX_RUNTIME_API const VariantHandle & Bool::variant() const;
90  template <>
91  STROMX_RUNTIME_API void Bool::serialize(OutputProvider & out) const;
92  template <>
93  STROMX_RUNTIME_API void Bool::deserialize(InputProvider & in, const Version & version);
94 
96  template <>
97  class STROMX_RUNTIME_API data_traits<Bool>
98  {
99  public:
100  static const VariantHandle & variant();
101  };
106  template<>
107  STROMX_RUNTIME_API const VariantHandle & Int8::variant() const;
108  template <>
109  STROMX_RUNTIME_API void Int8::serialize(OutputProvider & out) const;
110  template <>
111  STROMX_RUNTIME_API void Int8::deserialize(InputProvider & in, const Version & version);
112 
114  template <>
115  class STROMX_RUNTIME_API data_traits<Int8>
116  {
117  public:
118  static const VariantHandle & variant();
119  };
124  template<>
125  STROMX_RUNTIME_API const VariantHandle & UInt8::variant() const;
126  template <>
127  STROMX_RUNTIME_API void UInt8::serialize(OutputProvider & out) const;
128  template <>
129  STROMX_RUNTIME_API void UInt8::deserialize(InputProvider & in, const Version & version);
130 
132  template <>
133  class STROMX_RUNTIME_API data_traits<UInt8>
134  {
135  public:
136  static const VariantHandle & variant();
137  };
142  template<>
143  STROMX_RUNTIME_API const VariantHandle & Int16::variant() const;
144  template <>
145  STROMX_RUNTIME_API void Int16::serialize(OutputProvider & out) const;
146  template <>
147  STROMX_RUNTIME_API void Int16::deserialize(InputProvider & in, const Version & version);
148 
150  template <>
151  class STROMX_RUNTIME_API data_traits<Int16>
152  {
153  public:
154  static const VariantHandle & variant();
155  };
160  template<>
161  STROMX_RUNTIME_API const VariantHandle & UInt16::variant() const;
162  template <>
163  STROMX_RUNTIME_API void UInt16::serialize(OutputProvider & out) const;
164  template <>
165  STROMX_RUNTIME_API void UInt16::deserialize(InputProvider & in, const Version & version);
166 
168  template <>
169  class STROMX_RUNTIME_API data_traits<UInt16>
170  {
171  public:
172  static const VariantHandle & variant();
173  };
178  template<>
179  STROMX_RUNTIME_API const VariantHandle & Int32::variant() const;
180  template <>
181  STROMX_RUNTIME_API void Int32::serialize(OutputProvider & out) const;
182  template <>
183  STROMX_RUNTIME_API void Int32::deserialize(InputProvider & in, const Version & version);
184 
186  template <>
187  class STROMX_RUNTIME_API data_traits<Int32>
188  {
189  public:
190  static const VariantHandle & variant();
191  };
196  template<>
197  STROMX_RUNTIME_API const VariantHandle & UInt32::variant() const;
198  template <>
199  STROMX_RUNTIME_API void UInt32::serialize(OutputProvider & out) const;
200  template <>
201  STROMX_RUNTIME_API void UInt32::deserialize(InputProvider & in, const Version & version);
202 
204  template <>
205  class STROMX_RUNTIME_API data_traits<UInt32>
206  {
207  public:
208  static const VariantHandle & variant();
209  };
214  template<>
215  STROMX_RUNTIME_API const VariantHandle & Int64::variant() const;
216  template <>
217  STROMX_RUNTIME_API void Int64::serialize(OutputProvider & out) const;
218  template <>
219  STROMX_RUNTIME_API void Int64::deserialize(InputProvider & in, const Version & version);
220 
222  template <>
223  class STROMX_RUNTIME_API data_traits<Int64>
224  {
225  public:
226  static const VariantHandle & variant();
227  };
232  template<>
233  STROMX_RUNTIME_API const VariantHandle & UInt64::variant() const;
234  template <>
235  STROMX_RUNTIME_API void UInt64::serialize(OutputProvider & out) const;
236  template <>
237  STROMX_RUNTIME_API void UInt64::deserialize(InputProvider & in, const Version & version);
238 
240  template <>
241  class STROMX_RUNTIME_API data_traits<UInt64>
242  {
243  public:
244  static const VariantHandle & variant();
245  };
250  template<>
251  STROMX_RUNTIME_API const VariantHandle & Float32::variant() const;
252  template <>
253  STROMX_RUNTIME_API void Float32::serialize(OutputProvider & out) const;
254  template <>
255  STROMX_RUNTIME_API void Float32::deserialize(InputProvider & in, const Version & version);
256 
258  template <>
259  class STROMX_RUNTIME_API data_traits<Float32>
260  {
261  public:
262  static const VariantHandle & variant();
263  };
268  template<>
269  STROMX_RUNTIME_API const VariantHandle & Float64::variant() const;
270  template <>
271  STROMX_RUNTIME_API void Float64::serialize(OutputProvider & out) const;
272  template <>
273  STROMX_RUNTIME_API void Float64::deserialize(InputProvider & in, const Version & version);
274 
276  template <>
277  class STROMX_RUNTIME_API data_traits<Float64>
278  {
279  public:
280  static const VariantHandle & variant();
281  };
290  STROMX_RUNTIME_API int64_t toInt(const Data & data);
291 
298  STROMX_RUNTIME_API double toDouble(const Data & data);
299 
300 #ifdef WIN32
301 
302  template class STROMX_RUNTIME_API Primitive<bool, bool>;
303  template class STROMX_RUNTIME_API Primitive<int, int8_t>;
304  template class STROMX_RUNTIME_API Primitive<unsigned int, uint8_t>;
305  template class STROMX_RUNTIME_API Primitive<int, int16_t>;
306  template class STROMX_RUNTIME_API Primitive<unsigned int, uint16_t>;
307  template class STROMX_RUNTIME_API Primitive<int, int32_t>;
308  template class STROMX_RUNTIME_API Primitive<unsigned int, uint32_t>;
309  template class STROMX_RUNTIME_API Primitive<double, float>;
310  template class STROMX_RUNTIME_API Primitive<double, double>;
312 #endif // WIN32
313  }
314 }
315 
316 #endif // STROMX_RUNTIME_PRIMITIVE_H
A version of an operator or data type.
Definition: Version.h:46
Primitive< int, int8_t > Int8
Signed 8-bit integer.
Definition: Primitive.h:105
Primitive data value.
Definition: Primitive.h:38
Abstract data object.
Definition: Data.h:53
Definition: VariantHandle.h:34
Primitive< double, float > Float32
Single precision floating point number.
Definition: Primitive.h:249
int64_t toInt(const Data &data)
Definition: Primitive.cpp:358
static const Primitive MAX
Definition: Primitive.h:76
Primitive< bool, bool > Bool
Boolean value.
Definition: Primitive.h:87
Primitive< unsigned int, uint16_t > UInt16
Unsigned 16-bit integer.
Definition: Primitive.h:159
Provides functions to serialize data to strings and files.
Definition: OutputProvider.h:27
virtual void serialize(OutputProvider &out) const
Definition: Primitive.cpp:74
Primitive< int64_t, int64_t > Int64
Signed 64-bit integer.
Definition: Primitive.h:213
Provides functions to deserialize data from strings and files.
Definition: InputProvider.h:27
virtual const std::string & package() const
Definition: Primitive.h:49
double toDouble(const Data &data)
Definition: Primitive.cpp:363
virtual const Version & version() const
Definition: Primitive.h:48
Primitive< unsigned int, uint8_t > UInt8
Unsigned 8-bit integer.
Definition: Primitive.h:123
virtual const std::string & type() const
Definition: Primitive.h:47
Primitive()
Definition: Primitive.h:42
Primitive(const repr_t value)
Definition: Primitive.h:45
Version version()
Returns the version of the stromx runtime library.
Definition: Runtime.cpp:54
Primitive< uint64_t, uint64_t > UInt64
Unsigned 64-bit integer.
Definition: Primitive.h:231
Primitive< int, int32_t > Int32
Signed 32-bit integer.
Definition: Primitive.h:177
The stromx class library.
Definition: AdjustRgbChannels.cpp:29
virtual void deserialize(InputProvider &in, const Version &version)
Definition: Primitive.cpp:80
virtual Data * clone() const
Definition: Primitive.h:53
Primitive< double, double > Float64
Float64 precision floating point number.
Definition: Primitive.h:267
Primitive< int, int16_t > Int16
Signed 16-bit integer.
Definition: Primitive.h:141
virtual const VariantHandle & variant() const
Definition: Primitive.cpp:60
const Primitive operator=(const repr_t value)
Definition: Primitive.h:66
Primitive< unsigned int, uint32_t > UInt32
Unsigned 32-bit integer.
Definition: Primitive.h:195
static const Primitive MIN
Definition: Primitive.h:73