OmniSciDB  bf83d84833
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ExtensionFunctionsArray.hpp
Go to the documentation of this file.
1 #include <cassert>
2 
3 #if defined(__clang__)
4 #pragma clang diagnostic push
5 #pragma clang diagnostic ignored "-Wreturn-type-c-linkage"
6 #endif
7 
8 #ifndef __CUDACC__
9 
10 namespace {
11 
12 template <typename T>
14  Array<T> out_arr(in_arr.getSize() + 1);
15  for (int64_t i = 0; i < in_arr.getSize(); i++) {
16  out_arr[i] = in_arr(i);
17  }
18  out_arr[in_arr.getSize()] = val;
19  return out_arr;
20 }
21 
22 } // namespace
23 
24 #endif
25 
27  const int64_t val) {
28 #ifndef __CUDACC__
29  return array_append_impl(in_arr, val);
30 #else
31  assert(false);
32  return Array<int64_t>(0, true);
33 #endif
34 }
35 
37  const int32_t val) {
38 #ifndef __CUDACC__
39  return array_append_impl(in_arr, val);
40 #else
41  assert(false);
42  return Array<int32_t>(0, true);
43 #endif
44 }
45 
47  const int16_t val) {
48 #ifndef __CUDACC__
49  return array_append_impl(in_arr, val);
50 #else
51  assert(false);
52  return Array<int16_t>(0, true);
53 #endif
54 }
55 
57  const int8_t val) {
58 #ifndef __CUDACC__
59  return array_append_impl(in_arr, val);
60 #else
61  assert(false);
62  return Array<int8_t>(0, true);
63 #endif
64 }
65 
67  const double val) {
68 #ifndef __CUDACC__
69  return array_append_impl(in_arr, val);
70 #else
71  assert(false);
72  return Array<double>(0, true);
73 #endif
74 }
75 
77  const float val) {
78 #ifndef __CUDACC__
79  return array_append_impl(in_arr, val);
80 #else
81  assert(false);
82  return Array<float>(0, true);
83 #endif
84 }
85 
86 /*
87  Overloading UDFs works for types in the same SQL family. BOOLEAN
88  does not belong to NUMERIC family, hence we need to use different
89  name for boolean UDF.
90  */
92 #ifndef __CUDACC__
93  return array_append_impl(in_arr, val);
94 #else
95  assert(false);
96  return Array<bool>(0, true);
97 #endif
98 }
99 
100 #if defined(__clang__)
101 #pragma clang diagnostic pop
102 #endif
EXTENSION_NOINLINE Array< bool > barray_append(const Array< bool > in_arr, const bool val)
EXTENSION_NOINLINE Array< int16_t > array_append__1(const Array< int16_t > in_arr, const int16_t val)
#define DEVICE
#define EXTENSION_NOINLINE
Definition: OmniSciTypes.h:27
EXTENSION_NOINLINE Array< float > array_append__4(const Array< float > in_arr, const float val)
EXTENSION_NOINLINE Array< int32_t > array_append__(const Array< int32_t > in_arr, const int32_t val)
DEVICE int64_t getSize() const
Definition: OmniSciTypes.h:58
EXTENSION_NOINLINE Array< double > array_append__3(const Array< double > in_arr, const double val)
EXTENSION_NOINLINE Array< int64_t > array_append(const Array< int64_t > in_arr, const int64_t val)
EXTENSION_NOINLINE Array< int8_t > array_append__2(const Array< int8_t > in_arr, const int8_t val)
DEVICE ALWAYS_INLINE Array< T > array_append_impl(const Array< T > in_arr, T val)
#define ALWAYS_INLINE