NAVTOR SDK  v.3.0
Software Development Kit for fast and efficient development of ECDIS, ECS and generic marine applications
sdk_array_handler.h
Go to the documentation of this file.
1 #ifndef SDK_SDK_ARRAY_HANDLER_H_
11 #define SDK_SDK_ARRAY_HANDLER_H_
12 
13 #include <algorithm>
14 #include <vector>
15 #include <set>
16 #include <stdexcept>
17 #if defined(SDK_OS_MAC) || defined(SDK_OS_ANDROID)
18 # include <string>
19 #endif
20 #include <base/inc/platform.h>
22 #include <base/inc/base_types.h>
25 
26 namespace sdk {
27 
28 class SDKAnyHandler;
29 class SDKArrayHandler;
30 
34 public:
36  SDKArrayHandler() noexcept {
37  m_instance.num_of_elements = 0;
38  m_instance.element_type = kSDKAnyType_Empty;
39  m_instance.element_size = 0;
40  m_instance.data = NULL;
41  }
42 
43 #if 0
44  SDKArrayHandler(const SDKArrayHandler& rhs) noexcept {
45  try
46  {
47  m_instance.num_of_elements = 0;
48  m_instance.element_type = kSDKAnyType_Empty;
49  m_instance.element_size = 0;
50  m_instance.data = nullptr;
51 
52  SDKResult res = SDKArrayCreate(&m_instance, rhs.m_instance.element_type,
53  rhs.m_instance.element_size, rhs.m_instance.num_of_elements);
54  if (kSDKResult_Succeeded == res &&
55  (rhs.m_instance.num_of_elements * rhs.m_instance.element_size) > 0) {
56  SDKMemCopy(m_instance.data, static_cast<size_t>(
57  m_instance.num_of_elements * m_instance.element_size),
58  rhs.m_instance.data, static_cast<size_t>(
59  rhs.m_instance.num_of_elements * rhs.m_instance.element_size));
60  }
61  } catch (...) {}
62  //TODO: handle errors
63  }
64 
65  SDKArrayHandler& operator=(const SDKArrayHandler& rhs) noexcept {
66  if (this != &rhs) {
67  this->~SDKArrayHandler();
68  new (this) SDKArrayHandler(rhs);
69  }
70  return *this;
71  }
72 #endif
73 
74  SDKArrayHandler(SDKAnyType element_type, SDKUInt32 element_size,
75  SDKUInt64 num_of_elements) noexcept {
76  try
77  {
78  m_instance.num_of_elements = 0;
79  m_instance.element_type = kSDKAnyType_Empty;
80  m_instance.element_size = 0;
81  m_instance.data = nullptr;
82 
83  SDKArray instance = {0, kSDKAnyType_Empty, 0, nullptr};
84  SDKResult res = SDKArrayCreate(&instance, element_type, element_size,
85  num_of_elements);
86  if (kSDKResult_Succeeded == res)
87  Attach(instance);
88  }
89  catch (...) {}
90  //TODO: handle errors
91  }
92 
93  SDKArrayHandler(SDKAnyType element_type, SDKUInt32 element_size,
94  SDKUInt64 num_of_elements, const void* init_data, SDKUInt64 data_size) noexcept {
95  try
96  {
97  m_instance.num_of_elements = 0;
98  m_instance.element_type = kSDKAnyType_Empty;
99  m_instance.element_size = 0;
100  m_instance.data = nullptr;
101 
102  SDKArray instance = {0, kSDKAnyType_Empty, 0, nullptr};
103  SDKResult res = SDKArrayCreate(&instance, element_type, element_size,
104  num_of_elements);
105  if (kSDKResult_Succeeded == res) {
106  Attach(instance);
107 
108  SDKUInt64 size = m_instance.element_size * m_instance.num_of_elements;
109  if (init_data != NULL && size == data_size) {
110  SDKMemCopy(m_instance.data, static_cast<size_t>(size), init_data,
111  static_cast<size_t>(data_size));
112  }
113  }
114  }
115  catch (...) {}
116  //TODO: handle errors
117  }
118 
120  SDKArrayHandler(const SDKArray& instance) noexcept {
121  try
122  {
123  m_instance.num_of_elements = 0;
124  m_instance.element_type = kSDKAnyType_Empty;
125  m_instance.element_size = 0;
126  m_instance.data = NULL;
127 
128  SDKResult res = SDKArrayCreate(&m_instance, instance.element_type,
129  instance.element_size, instance.num_of_elements);
130  if (kSDKResult_Succeeded == res &&
131  (instance.num_of_elements * instance.element_size) > 0ULL)
132  {
133  SDKMemCopy(m_instance.data, static_cast<unsigned int>(
134  m_instance.num_of_elements * m_instance.element_size),
135  instance.data, static_cast<unsigned int>(
136  instance.num_of_elements * instance.element_size));
137  }
138  }
139  catch(...) {}
140  //TODO: handle errors
141  }
142 
143  virtual ~SDKArrayHandler() noexcept
144  {
145  try
146  {
147  SDKArrayDelete(&m_instance);
148  }
149  catch(...) {}
150  //TODO: handle errors
151  }
152 
154  operator SDKArray&() noexcept {
155  return m_instance;
156  }
157 
159  operator const SDKArray&() const noexcept {
160  return m_instance;
161  }
162 
164  SDKAnyType GetType() const noexcept {
165  return m_instance.element_type;
166  }
167 
169  SDKUInt32 GetElementSize() const noexcept {
170  return m_instance.element_size;
171  }
172 
174  SDKUInt64 GetElementsCount() const noexcept {
175  return m_instance.num_of_elements;
176  }
177 
179  SDKUInt8* GetBuffer() noexcept {
180  return m_instance.data;
181  }
182 
184  const SDKUInt8* GetBuffer() const noexcept {
185  return m_instance.data;
186  }
187 
189  SDKUInt64 GetBufferSize() const noexcept {
190  return GetElementSize() * GetElementsCount();
191  }
192 
194  SDKArray& GetReference() noexcept {
195  return m_instance;
196  }
197 
199  const SDKArray& GetReference() const noexcept {
200  return m_instance;
201  }
202 
204  SDKArray& Get() noexcept {
205  return m_instance;
206  }
208  const SDKArray& Get() const noexcept {
209  return m_instance;
210  }
211 
212  void Attach(SDKArray& instance) noexcept
213  {
214  SDKArrayDelete(&m_instance);
215 
216  m_instance.num_of_elements = instance.num_of_elements;
217  m_instance.element_type = instance.element_type;
218  m_instance.element_size = instance.element_size;
219  m_instance.data = instance.data;
220 
221  instance.num_of_elements = 0;
222  instance.element_type = kSDKAnyType_Empty;
223  instance.element_size = 0;
224  instance.data = NULL;
225  }
226 
227  SDKArray Detach() noexcept
228  {
229  SDKArray instance;
230  instance.num_of_elements = m_instance.num_of_elements;
231  instance.element_type = m_instance.element_type;
232  instance.element_size = m_instance.element_size;
233  instance.data = m_instance.data;
234 
235  m_instance.num_of_elements = 0;
236  m_instance.element_type = kSDKAnyType_Empty;
237  m_instance.element_size = 0;
238  m_instance.data = NULL;
239 
240  return instance;
241  }
242 
243  SDKAny DetachAsAny() noexcept
244  {
245  SDKAny any;
247  any.any_type = kSDKAnyType_SDKArrayPtr;
248  any.arr->num_of_elements = m_instance.num_of_elements;
249  any.arr->element_type = m_instance.element_type;
250  any.arr->element_size = m_instance.element_size;
251  any.arr->data = m_instance.data;
252 
253  m_instance.num_of_elements = 0;
254  m_instance.element_type = kSDKAnyType_Empty;
255  m_instance.element_size = 0;
256  m_instance.data = NULL;
257 
258  return any;
259  }
260 
261  void DetachAsAny(SDKAny& dest) noexcept
262  {
263  SDKAnyClear(&dest);
264  SDKAny any = DetachAsAny();
265  dest = any;
266  }
267 
268  bool IsEmpty()
269  {
270  return (m_instance.num_of_elements == 0) ||
271  (m_instance.element_type == kSDKAnyType_Empty) ||
272  (m_instance.element_size == 0) ||
273  (m_instance.data == NULL);
274  }
275 
277  template< typename T >
278  static bool FromStdVector(const std::vector< T >& v, SDKAnyType element_type,
279  SDKArray& arr) noexcept {
280  if (v.empty())
281  return false;
282  SDKArrayDelete(&arr);
283  arr.num_of_elements = v.size();
284  arr.element_type = static_cast<SDKArrayElementType>(element_type);
285  arr.element_size = sizeof(T);
286  arr.data = NULL;
287  if (SDK_FAILED(SDKArrayCreate(&arr, arr.element_type, arr.element_size,
288  arr.num_of_elements))) {
289  return false;
290  }
291  SDKMemCopy(arr.data, size_t(arr.num_of_elements * arr.element_size),
292  &v.front(), size_t(arr.num_of_elements * arr.element_size));
293  return true;
294  }
295 
297  template< typename T >
298  static bool FromStdSet(const std::set< T >& s, SDKAnyType element_type,
299  SDKArray& arr) noexcept {
300  if (s.empty())
301  return false;
302  SDKArrayDelete(&arr);
303  arr.num_of_elements = s.size();
304  arr.element_type = static_cast<SDKArrayElementType>(element_type);
305  arr.element_size = sizeof(T);
306  arr.data = NULL;
307  if (SDK_FAILED(SDKArrayCreate(&arr, arr.element_type, arr.element_size,
308  arr.num_of_elements))) {
309  return false;
310  }
311  T* ptr = reinterpret_cast<T*>(arr.data);
312  for (typename std::set< T >::const_iterator it = s.cbegin(); it != s.cend(); ++it) {
313  *ptr = *it;
314  ptr++;
315  }
316  return true;
317  }
318 
320  template< typename T >
321  static bool ToStdVector(const SDKArray* arr, SDKAnyType element_type,
322  std::vector< T >& v) noexcept {
323  v.clear();
324  if (!arr || !arr->data || !arr->num_of_elements ||
325  (sizeof(T) != arr->element_size) ||
326  (static_cast<SDKArrayElementType>(element_type) != arr->element_type)) {
327  return false;
328  }
329  v.resize(static_cast<size_t>(arr->num_of_elements));
330  SDKMemCopy(&v.front(), size_t(arr->num_of_elements * arr->element_size),
331  arr->data, size_t(arr->num_of_elements * arr->element_size));
332  return true;
333  }
334 
335  template< typename T >
336  bool ToStdVector(SDKAnyType element_type, std::vector< T >& v) const noexcept {
337  return ToStdVector(this, element_type, v);
338  }
339 
341  template< typename T >
342  static bool ToStdSet(const SDKArray* arr, SDKAnyType element_type,
343  std::set< T >& out) noexcept {
344  out.clear();
345  if (!arr || !arr->data || !arr->num_of_elements ||
346  (sizeof(T) != arr->element_size) ||
347  (static_cast<SDKArrayElementType>(element_type) != arr->element_type)) {
348  return false;
349  }
350  const T* ptr = reinterpret_cast<const T*>(arr->data);
351  SDKUInt64 count = arr->num_of_elements;
352  for (SDKUInt64 i = 0; i < count; ++i) {
353  out.insert(ptr[i]);
354  }
355  return true;
356  }
357 
359  static inline bool FromStdString(const std::string& str,
360  SDKArray& arr) noexcept {
361  try
362  {
363  if (str.empty())
364  return false;
365  SDKArrayDelete(&arr);
366  arr.num_of_elements = str.size();
367  arr.element_type = kSDKAnyType_Uint8;
368  arr.element_size = 1;
369  arr.data = NULL;
370  if (SDK_FAILED(SDKArrayCreate(&arr, arr.element_type, arr.element_size,
371  arr.num_of_elements))) {
372  return false;
373  }
374  SDKMemCopy(arr.data, size_t(arr.num_of_elements * arr.element_size),
375  str.c_str(), size_t(arr.num_of_elements * arr.element_size));
376  return true;
377  } catch(...) {}
378  return false;
379  }
380 
381  template <typename _Elem, typename _Alloc, typename _SDKAnyHandler=SDKAnyHandler>
382  static bool FromStdString(const std::basic_string<_Elem, _Alloc>& str,
383  SDKArray& arr) noexcept {
384  try
385  {
386  SDKArrayDelete(&arr);
387  if (str.empty())
388  return false;
389  arr.num_of_elements = str.size();
390  arr.element_type = static_cast<SDKArrayElementType>(
391  _SDKAnyHandler::template TypeToSDKAnyType<_Elem>::value);
392  arr.element_size = sizeof(_Elem);
393  arr.data = NULL;
394  if (SDK_FAILED(SDKArrayCreate(&arr, arr.element_type, arr.element_size,
395  arr.num_of_elements))) {
396  return false;
397  }
398 
399  using std::copy_n;
400  copy_n(str.c_str(), size_t(arr.num_of_elements), reinterpret_cast<_Elem *>(arr.data));
401  return true;
402  } catch (...) {}
403  return false;
404  }
405 
407  static inline bool ToStdString(const SDKArray* arr,
408  std::string& str) noexcept {
409  try
410  {
411  str.clear();
412  if ((NULL != arr) && (NULL != arr->data) && (arr->num_of_elements > 0) &&
413  (arr->element_type == kSDKAnyType_Uint8 ||
414  arr->element_type == kSDKAnyType_Int8)) {
415  str.assign(arr->data,
416  arr->data + size_t(arr->num_of_elements * arr->element_size));
417  return true;
418  }
419  } catch(...) {}
420  return false;
421  }
422 
423 private:
424 #if 1
427  void operator=(const SDKArrayHandler&);
428 #endif
429 
430  SDKArray m_instance;
431 };
432 
433 typedef sdk::SDKArrayHandler ScopedArray;
434 
438 {
439 public:
441  SDKArrayWrapper(SDKArray& instance) noexcept
442  : m_instance(instance)
443  {
444  }
445 
447  SDKAnyType GetType() const noexcept {
448  return m_instance.element_type;
449  }
450 
452  SDKUInt32 GetElementSize() const noexcept {
453  return m_instance.element_size;
454  }
455 
457  SDKUInt64 GetElementsCount() const noexcept {
458  return m_instance.num_of_elements;
459  }
460 
462  SDKUInt8* GetBuffer() noexcept {
463  return m_instance.data;
464  }
465 
467  const SDKUInt8* GetBuffer() const noexcept {
468  return m_instance.data;
469  }
470 
472  SDKUInt64 GetBufferSize() const noexcept {
473  return GetElementSize() * GetElementsCount();
474  }
475 
477  SDKArray& GetReference() noexcept {
478  return m_instance;
479  }
480 
482  const SDKArray& GetReference() const noexcept {
483  return m_instance;
484  }
485 
487  SDKArray& Get() noexcept {
488  return m_instance;
489  }
490 
492  const SDKArray& Get() const noexcept {
493  return m_instance;
494  }
495 
496 private:
500  void operator=(const SDKArrayWrapper&);
501 
502  SDKArray& m_instance;
503 };
504 
505 typedef sdk::SDKArrayWrapper ScopedArrayWrapper;
506 
507 template<typename T>
508 T GetArrayElement(const SDKArray& arr, SDKUInt64 idx)
509 {
510  if (idx >= arr.num_of_elements)
511  throw std::runtime_error("Index out of range in GetArrayElement()");
512  if (NULL == arr.data)
513  throw std::runtime_error("Empty array passed in GetArrayElement()");
514 
515  switch(arr.element_type) {
516  case kSDKAnyType_Empty:
517  break;
518  case kSDKAnyType_Null:
519  break;
520  case kSDKAnyType_Uint8:
521  return static_cast<T>(reinterpret_cast<SDKUInt8* >(arr.data)[idx]);
522  case kSDKAnyType_Uint16:
523  return static_cast<T>(reinterpret_cast<SDKUInt16*>(arr.data)[idx]);
524  case kSDKAnyType_Uint32:
525  return static_cast<T>(reinterpret_cast<SDKUInt32*>(arr.data)[idx]);
526  case kSDKAnyType_Uint64:
527  return static_cast<T>(reinterpret_cast<SDKUInt64*>(arr.data)[idx]);
528  case kSDKAnyType_Int8:
529  return static_cast<T>(reinterpret_cast<SDKInt8* >(arr.data)[idx]);
530  case kSDKAnyType_Int16:
531  return static_cast<T>(reinterpret_cast<SDKInt16* >(arr.data)[idx]);
532  case kSDKAnyType_Int32:
533  return static_cast<T>(reinterpret_cast<SDKInt32* >(arr.data)[idx]);
534  case kSDKAnyType_Int64:
535  return static_cast<T>(reinterpret_cast<SDKInt64* >(arr.data)[idx]);
536  case kSDKAnyType_Float:
537  return static_cast<T>(reinterpret_cast<float* >(arr.data)[idx]);
538  case kSDKAnyType_Double:
539  return static_cast<T>(reinterpret_cast<double* >(arr.data)[idx]);
540  case kSDKAnyType_Bool:
541  return static_cast<T>(reinterpret_cast<bool* >(arr.data)[idx]);
542  case kSDKAnyType_SDKTime:
543  return static_cast<T>(reinterpret_cast<SDKTime* >(arr.data)[idx]);
545  break;
547  break;
549  break;
551  break;
552  case kSDKAnyType_UserPtr:
553  break;
554  }
555  throw std::runtime_error("Unsupported type met in GetArrayElement()");
556 }
557 
558 template<typename T>
559 bool GetArrayElement(const SDKArray& arr, SDKUInt64 index, T& val) noexcept
560 {
561  if (NULL == arr.data)
562  return false;
563  if (index >= arr.num_of_elements)
564  return false;
565  val = 0;
566  const SDKUInt8* ptr = arr.data + (index * arr.element_size);
567  SDKMemCopy(&val, sizeof(val), ptr, arr.element_size);
568  return true;
569 }
570 
571 template<typename T>
572 bool SetArrayElement(const SDKArray& arr, SDKUInt64 index, const T& val) noexcept
573 {
574  if (NULL == arr.data)
575  return false;
576  if (index >= arr.num_of_elements)
577  return false;
578  SDKUInt8* ptr = arr.data + (index * arr.element_size);
579  SDKMemCopy(ptr, arr.element_size, &val, sizeof(val));
580  return true;
581 }
582 
583 template<typename T>
584 bool GetAllArrayElements(const SDKArray& arr, T* buffer) {
585  try
586  {
587  if (NULL == arr.data)
588  return false;
589  for (size_t idx = 0; idx < arr.num_of_elements; ++idx)
590  buffer[idx] = GetArrayElement<T>(arr, idx);
591  return true;
592  }
593  catch(...) {}
594  return false;
595 }
596 
606 inline bool IsSDKArrayEqual(const SDKArray* arr1, const SDKArray* arr2) {
607  if (!arr1 && !arr2)
608  return true;
609  if (!arr1 || !arr2)
610  return false;
611 
612  if (arr1->num_of_elements != arr2->num_of_elements)
613  return false;
614  if (arr1->element_type != arr2->element_type)
615  return false;
616  if (arr1->element_size != arr2->element_size)
617  return false;
618 
619  if (0 == arr1->num_of_elements)
620  return true;
621 
622  if (NULL == arr1->data || NULL == arr2->data)
623  return false; // wrong arrays actually
624 
625  size_t size = static_cast<size_t>(arr1->num_of_elements * arr1->element_size);
626  #ifndef SDK_CC_BCC
627  int cmp = memcmp(arr1->data, arr2->data, size);
628  #else
629  int cmp = std::memcmp(arr1->data, arr2->data, size);
630  #endif
631 
632  return (0 == cmp);
633 }
634 
635 } // namespace sdk
636 
637 #endif // SDK_SDK_ARRAY_HANDLER_H_
sdk::SDKArrayHandler::GetBuffer
const SDKUInt8 * GetBuffer() const noexcept
Returns the buffer.
Definition: sdk_array_handler.h:184
SDKMemCopy
size_t SDKMemCopy(void *destination, size_t destination_size, const void *source, size_t source_size)
Copies a memory chunk of a specified size to a specified location.
Definition: memory_portable.h:25
sdk::SDKArrayHandler::ToStdString
static bool ToStdString(const SDKArray *arr, std::string &str) noexcept
Copy SDKArray to std::string.
Definition: sdk_array_handler.h:407
sdk::SDKArrayHandler::GetReference
SDKArray & GetReference() noexcept
Returns the reference.
Definition: sdk_array_handler.h:194
sdk::SDKArrayWrapper::GetBuffer
SDKUInt8 * GetBuffer() noexcept
Returns the buffer.
Definition: sdk_array_handler.h:462
memory_portable.h
Portable way of including 'memory' header.
kSDKAnyType_Uint16
@ kSDKAnyType_Uint16
unsigned integer 16 bit value
Definition: base_types.h:141
sdk::SDKArrayWrapper::Get
const SDKArray & Get() const noexcept
Returns reference to the internal array.
Definition: sdk_array_handler.h:492
base_types.h
SDK base types.
sdk::SDKArrayWrapper::GetReference
SDKArray & GetReference() noexcept
Returns the reference.
Definition: sdk_array_handler.h:477
kSDKAnyType_Bool
@ kSDKAnyType_Bool
boolean value
Definition: base_types.h:152
sdk::SDKArrayHandler::GetElementSize
SDKUInt32 GetElementSize() const noexcept
Returns the size of the element.
Definition: sdk_array_handler.h:169
kSDKAnyType_Uint64
@ kSDKAnyType_Uint64
unsigned integer 64 bit value
Definition: base_types.h:143
sdk::SDKArrayHandler::ToStdSet
static bool ToStdSet(const SDKArray *arr, SDKAnyType element_type, std::set< T > &out) noexcept
Creates std::set from the SDKArray.
Definition: sdk_array_handler.h:342
SDKAnyClear
SDK_EXTERN_C SDK_BASE_LIBRARY_EXPORT_API SDKResult SDK_APICALLTYPE SDKAnyClear(SDKAny *any)
Clears SDKAny value (deleting complex types)
sdk::IsSDKArrayEqual
bool IsSDKArrayEqual(const SDKArray *arr1, const SDKArray *arr2)
Compares two SDKArrays.
Definition: sdk_array_handler.h:606
kSDKAnyType_Uint8
@ kSDKAnyType_Uint8
unsigned integer 8 bit value
Definition: base_types.h:140
kSDKAnyType_Int32
@ kSDKAnyType_Int32
signed integer 32 bit value
Definition: base_types.h:146
sdk::SDKArrayHandler::GetBuffer
SDKUInt8 * GetBuffer() noexcept
Returns the buffer.
Definition: sdk_array_handler.h:179
kSDKAnyType_Float
@ kSDKAnyType_Float
single precision real value
Definition: base_types.h:149
kSDKAnyType_Null
@ kSDKAnyType_Null
null value or no value
Definition: base_types.h:139
sdk::SDKArrayHandler::Get
SDKArray & Get() noexcept
Returns reference to the internal array.
Definition: sdk_array_handler.h:204
sdk::SDKArrayHandler::GetElementsCount
SDKUInt64 GetElementsCount() const noexcept
Returns the count of elements.
Definition: sdk_array_handler.h:174
kSDKResult_Succeeded
static const SDKResult kSDKResult_Succeeded
Operation completed successfully.
Definition: sdk_results.h:22
sdk::SDKArrayHandler::GetType
SDKAnyType GetType() const noexcept
Returns the type of the element.
Definition: sdk_array_handler.h:164
kSDKAnyType_Empty
@ kSDKAnyType_Empty
variable is empty
Definition: base_types.h:138
sdk::SDKArrayWrapper::GetBufferSize
SDKUInt64 GetBufferSize() const noexcept
Returns the buffer size.
Definition: sdk_array_handler.h:472
SDKResult
SDKInt32 SDKResult
Type of all error or return codes which SDK functions can end with.
Definition: sdk_results.h:17
sdk::SDKArrayWrapper::GetElementSize
SDKUInt32 GetElementSize() const noexcept
Returns the size of the element.
Definition: sdk_array_handler.h:452
sdk::SDKArrayHandler
This class wraps the SDKArray type.
Definition: sdk_array_handler.h:33
kSDKAnyType_Uint32
@ kSDKAnyType_Uint32
unsigned integer 32 bit value
Definition: base_types.h:142
kSDKAnyType_UserPtr
@ kSDKAnyType_UserPtr
user defined type of any size
Definition: base_types.h:163
sdk::SDKArrayHandler::FromStdSet
static bool FromStdSet(const std::set< T > &s, SDKAnyType element_type, SDKArray &arr) noexcept
Creates SDKArray from std::set.
Definition: sdk_array_handler.h:298
SDKArrayCreate
SDK_EXTERN_C SDK_BASE_LIBRARY_EXPORT_API SDKResult SDK_APICALLTYPE SDKArrayCreate(SDKArray *arr, SDKAnyType element_type, SDKUInt32 element_size, SDKUInt64 num_of_elements)
Creates SDKArray value.
sdk::SDKArrayWrapper::GetType
SDKAnyType GetType() const noexcept
Returns the type of the element.
Definition: sdk_array_handler.h:447
sdk::SDKArrayHandler::ToStdVector
static bool ToStdVector(const SDKArray *arr, SDKAnyType element_type, std::vector< T > &v) noexcept
Creates std::vector from the SDKArray.
Definition: sdk_array_handler.h:321
kSDKAnyType_Int8
@ kSDKAnyType_Int8
signed integer 8 bit value
Definition: base_types.h:144
kSDKAnyType_SDKArrayPtr
@ kSDKAnyType_SDKArrayPtr
pointer to SDKArray
Definition: base_types.h:156
SDKArrayElementType
SDKUInt16 SDKArrayElementType
Basic type for one dimensional array of any values, use SDKArray* functions from base library.
Definition: base_types.h:393
SDK_FAILED
#define SDK_FAILED(res)
Checks failed result.
Definition: sdk_results_enum.h:69
platform.h
Describes the platform constants.
sdk::SDKArrayWrapper::Get
SDKArray & Get() noexcept
Returns reference to the internal array.
Definition: sdk_array_handler.h:487
kSDKAnyType_SDKComponentPtr
@ kSDKAnyType_SDKComponentPtr
pointer to ISDKComponent
Definition: base_types.h:157
sdk::SDKArrayWrapper::GetElementsCount
SDKUInt64 GetElementsCount() const noexcept
Returns the count of elements.
Definition: sdk_array_handler.h:457
sdk::SDKArrayHandler::FromStdVector
static bool FromStdVector(const std::vector< T > &v, SDKAnyType element_type, SDKArray &arr) noexcept
Creates SDKArray from std::vector.
Definition: sdk_array_handler.h:278
kSDKAnyType_SDKAnyPtr
@ kSDKAnyType_SDKAnyPtr
pointer to SDKAny
Definition: base_types.h:155
sdk::SDKArrayWrapper::SDKArrayWrapper
SDKArrayWrapper(SDKArray &instance) noexcept
Attaches an existing value to the handler w/o taking over the ownership.
Definition: sdk_array_handler.h:441
kSDKAnyType_Double
@ kSDKAnyType_Double
double precision real value
Definition: base_types.h:150
kSDKAnyType_Int64
@ kSDKAnyType_Int64
signed integer 64 bit value
Definition: base_types.h:148
sdk::SDKArrayWrapper
Simple wrapper for accessing the SDKArray properties.
Definition: sdk_array_handler.h:437
kSDKAnyType_Int16
@ kSDKAnyType_Int16
signed integer 16 bit value
Definition: base_types.h:145
SDKTime
SDK_END_NAMESPACE typedef SDKInt64 SDKTime
Milliseconds from Unix epoch.
Definition: base_types.h:56
kSDKAnyType_SDKStringPtr
@ kSDKAnyType_SDKStringPtr
pointer to SDKString
Definition: base_types.h:154
sdk::SDKArrayHandler::Get
const SDKArray & Get() const noexcept
Returns reference to the internal array.
Definition: sdk_array_handler.h:208
SDKArrayDelete
SDK_EXTERN_C SDK_BASE_LIBRARY_EXPORT_API SDKResult SDK_APICALLTYPE SDKArrayDelete(SDKArray *arr)
Deletes SDKArray instance.
sdk::SDKArrayHandler::FromStdString
static bool FromStdString(const std::string &str, SDKArray &arr) noexcept
Creates SDKArray from std::string.
Definition: sdk_array_handler.h:359
SDKAnyInitArray
SDK_EXTERN_C SDK_BASE_LIBRARY_EXPORT_API SDKResult SDK_APICALLTYPE SDKAnyInitArray(SDKAny *any, SDKAnyType element_type, SDKUInt32 element_size)
Initializes SDKAny value to contain pointer to empty SDKArray.
sdk::SDKArrayHandler::GetBufferSize
SDKUInt64 GetBufferSize() const noexcept
Returns the buffer size.
Definition: sdk_array_handler.h:189
sdk::SDKArrayHandler::SDKArrayHandler
SDKArrayHandler() noexcept
Creates a new SDKArray instance.
Definition: sdk_array_handler.h:36
sdk::SDKArrayHandler::SDKArrayHandler
SDKArrayHandler(const SDKArray &instance) noexcept
Creates a copy of SDKArray instance.
Definition: sdk_array_handler.h:120
sdk_results_enum.h
SDK return values synonyms in the sdk namespace.
sdk::SDKArrayWrapper::GetBuffer
const SDKUInt8 * GetBuffer() const noexcept
Returns the buffer.
Definition: sdk_array_handler.h:467
kSDKAnyType_SDKTime
@ kSDKAnyType_SDKTime
SDKTime.
Definition: base_types.h:153
sdk::SDKArrayHandler::GetReference
const SDKArray & GetReference() const noexcept
Returns the reference.
Definition: sdk_array_handler.h:199
base_types_functions.h
Functions to work with SDK basic types.
sdk::SDKArrayWrapper::GetReference
const SDKArray & GetReference() const noexcept
Returns the reference.
Definition: sdk_array_handler.h:482