scalar_device_view.cuh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019-2023, NVIDIA CORPORATION.
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 #pragma once
17 
18 #include <cudf/scalar/scalar.hpp>
20 #include <cudf/types.hpp>
21 
27 namespace cudf {
28 namespace detail {
34  public:
35  ~scalar_device_view_base() = default;
36 
42  [[nodiscard]] __host__ __device__ data_type type() const noexcept { return _type; }
43 
50  [[nodiscard]] __device__ bool is_valid() const noexcept { return *_is_valid; }
51 
57  __device__ void set_valid(bool is_valid) noexcept { *_is_valid = is_valid; }
58 
59  protected:
60  data_type _type{type_id::EMPTY};
61  bool* _is_valid{};
62 
73 
74  scalar_device_view_base() = default;
75 };
76 
81  public:
88  template <typename T>
89  __device__ T& value() noexcept
90  {
91  return *data<T>();
92  }
93 
100  template <typename T>
101  __device__ T const& value() const noexcept
102  {
103  return *data<T>();
104  }
105 
112  template <typename T>
113  __device__ void set_value(T value)
114  {
115  *static_cast<T*>(_data) = value;
116  }
117 
124  template <typename T>
125  __device__ T* data() noexcept
126  {
127  return static_cast<T*>(_data);
128  }
129 
136  template <typename T>
137  __device__ T const* data() const noexcept
138  {
139  return static_cast<T const*>(_data);
140  }
141 
142  protected:
143  void* _data{};
144 
158  {
159  }
160 };
161 
165 template <typename T>
167  public:
168  using value_type = T;
169 
175  __device__ T& value() noexcept { return fixed_width_scalar_device_view_base::value<T>(); }
176 
182  __device__ T const& value() const noexcept
183  {
184  return fixed_width_scalar_device_view_base::value<T>();
185  }
186 
192  __device__ void set_value(T value) { fixed_width_scalar_device_view_base::set_value<T>(value); }
193 
199  __device__ T* data() noexcept { return fixed_width_scalar_device_view_base::data<T>(); }
200 
206  __device__ T const* data() const noexcept
207  {
208  return fixed_width_scalar_device_view_base::data<T>();
209  }
210 
211  protected:
225  {
226  }
227 };
228 
229 } // namespace detail
230 
234 template <typename T>
236  public:
247  {
248  }
249 };
250 
254 template <typename T>
256  public:
257  using rep_type = typename T::rep;
258 
268  : detail::scalar_device_view_base(type, is_valid), _data(data)
269  {
270  }
271 
277  __device__ void set_value(rep_type value) { *_data = value; }
278 
284  __device__ rep_type const& rep() const noexcept { return *_data; }
285 
286  private:
287  rep_type* _data{};
288 };
289 
294  public:
296 
308  : detail::scalar_device_view_base(type, is_valid), _data(data), _size(size)
309  {
310  }
311 
317  [[nodiscard]] __device__ ValueType value() const noexcept
318  {
319  return ValueType{this->data(), _size};
320  }
321 
327  [[nodiscard]] __device__ char const* data() const noexcept
328  {
329  return static_cast<char const*>(_data);
330  }
331 
337  [[nodiscard]] __device__ size_type size() const noexcept { return _size; }
338 
339  private:
340  char const* _data{};
341  size_type _size;
342 };
343 
347 template <typename T>
349  public:
360  {
361  }
362 };
363 
367 template <typename T>
369  public:
380  {
381  }
382 };
383 
390 template <typename T>
392 {
394 }
395 
403 {
404  return string_scalar_device_view(s.type(), s.data(), s.validity_data(), s.size());
405 }
406 
413 template <typename T>
415 {
417 }
418 
425 template <typename T>
427 {
429 }
430 
437 template <typename T>
439 {
441 }
442 
443 } // namespace cudf
cudf::detail::fixed_width_scalar_device_view_base::fixed_width_scalar_device_view_base
fixed_width_scalar_device_view_base(data_type type, void *data, bool *is_valid)
Construct a new fixed width scalar device view object.
Definition: scalar_device_view.cuh:156
cudf::string_scalar_device_view::data
char const * data() const noexcept
Returns a raw pointer to the value in device memory.
Definition: scalar_device_view.cuh:327
cudf::detail::fixed_width_scalar_device_view
A type of scalar_device_view where the value is a fixed width type.
Definition: scalar_device_view.cuh:166
cudf::detail::fixed_width_scalar_device_view::data
T * data() noexcept
Returns a raw pointer to the value in device memory.
Definition: scalar_device_view.cuh:199
cudf::string_scalar::data
char const * data() const
Returns a raw pointer to the string in device memory.
cudf::timestamp_scalar
An owning class to represent a timestamp value in device memory.
Definition: scalar.hpp:624
cudf::scalar::validity_data
bool * validity_data()
Returns a raw pointer to the validity bool in device memory.
scalar.hpp
Class definitions for cudf::scalar.
string_view.hpp
Class definition for cudf::string_view.
cudf::size_type
int32_t size_type
Row index type for columns and tables.
Definition: types.hpp:80
cudf::string_scalar_device_view
A type of scalar_device_view that stores a pointer to a string value.
Definition: scalar_device_view.cuh:293
cudf::detail::fixed_width_scalar_device_view::value_type
T value_type
The value type of the scalar.
Definition: scalar_device_view.cuh:168
cudf::detail::fixed_width_scalar_device_view_base::data
T const * data() const noexcept
Returns a const raw pointer to the value in device memory.
Definition: scalar_device_view.cuh:137
cudf::string_scalar_device_view::size
size_type size() const noexcept
Returns the size of the string in bytes.
Definition: scalar_device_view.cuh:337
cudf::fixed_point_scalar_device_view::rep
rep_type const & rep() const noexcept
Get the value of the scalar, as a rep_type.
Definition: scalar_device_view.cuh:284
types.hpp
Type declarations for libcudf.
cudf::detail::fixed_width_scalar_device_view_base::set_value
void set_value(T value)
Stores the value in scalar.
Definition: scalar_device_view.cuh:113
cudf::string_view
A non-owning, immutable view of device data that is a variable length char array representing a UTF-8...
Definition: string_view.hpp:44
cudf::detail::fixed_width_scalar_device_view::set_value
void set_value(T value)
Stores the value in scalar.
Definition: scalar_device_view.cuh:192
cudf::detail::fixed_width_scalar_device_view::value
T const & value() const noexcept
Returns const reference to stored value.
Definition: scalar_device_view.cuh:182
cudf::timestamp_scalar_device_view
A type of scalar_device_view that stores a pointer to a timestamp value.
Definition: scalar_device_view.cuh:348
cudf::fixed_point_scalar::data
rep_type * data()
Returns a raw pointer to the value in device memory.
cudf::detail::fixed_width_scalar_device_view_base::data
T * data() noexcept
Returns a raw pointer to the value in device memory.
Definition: scalar_device_view.cuh:125
cudf::detail::scalar_device_view_base::set_valid
void set_valid(bool is_valid) noexcept
Updates the validity of the value.
Definition: scalar_device_view.cuh:57
cudf::detail::fixed_width_scalar_device_view::value
T & value() noexcept
Returns reference to stored value.
Definition: scalar_device_view.cuh:175
cudf::duration_scalar_device_view
A type of scalar_device_view that stores a pointer to a duration value.
Definition: scalar_device_view.cuh:368
cudf::string_scalar_device_view::value
ValueType value() const noexcept
Returns string_view of the value of this scalar.
Definition: scalar_device_view.cuh:317
cudf::detail::fixed_width_scalar_device_view_base::value
T const & value() const noexcept
Returns const reference to stored value.
Definition: scalar_device_view.cuh:101
cudf::duration_scalar
An owning class to represent a duration value in device memory.
Definition: scalar.hpp:679
cudf::string_scalar_device_view::string_scalar_device_view
string_scalar_device_view(data_type type, char const *data, bool *is_valid, size_type size)
Construct a new string scalar device view object from string data, size and validity pointers.
Definition: scalar_device_view.cuh:307
cudf::fixed_point_scalar_device_view::set_value
void set_value(rep_type value)
Stores the value in scalar.
Definition: scalar_device_view.cuh:277
cudf::fixed_point_scalar_device_view::fixed_point_scalar_device_view
fixed_point_scalar_device_view(data_type type, rep_type *data, bool *is_valid)
Construct a new fixed point scalar device view object from data and validity pointers.
Definition: scalar_device_view.cuh:267
cudf::detail::scalar_device_view_base
A non-owning view of scalar from device that is trivially copyable and usable in CUDA device code.
Definition: scalar_device_view.cuh:33
cudf::get_scalar_device_view
auto get_scalar_device_view(numeric_scalar< T > &s)
Get the device view of a numeric_scalar.
Definition: scalar_device_view.cuh:391
cudf::numeric_scalar
An owning class to represent a numerical value in device memory.
Definition: scalar.hpp:243
cudf::data_type
Indicator for the logical data type of an element in a column.
Definition: types.hpp:228
cudf::detail::fixed_width_scalar_device_view_base::_data
void * _data
Pointer to device memory containing the value.
Definition: scalar_device_view.cuh:143
cudf::duration_scalar_device_view::duration_scalar_device_view
duration_scalar_device_view(data_type type, T *data, bool *is_valid)
Construct a new duration scalar device view object from data and validity pointers.
Definition: scalar_device_view.cuh:378
cudf::numeric_scalar_device_view
A type of scalar_device_view that stores a pointer to a numerical value.
Definition: scalar_device_view.cuh:235
cudf::fixed_point_scalar
An owning class to represent a fixed_point number in device memory.
Definition: scalar.hpp:303
cudf::detail::fixed_width_scalar::data
T * data()
Returns a raw pointer to the value in device memory.
cudf
cuDF interfaces
Definition: aggregation.hpp:34
cudf::detail::scalar_device_view_base::_type
data_type _type
Value data type.
Definition: scalar_device_view.cuh:60
cudf::detail::scalar_device_view_base::is_valid
bool is_valid() const noexcept
Returns whether the scalar holds a valid value (i.e., not null).
Definition: scalar_device_view.cuh:50
cudf::string_scalar::size
size_type size() const
Returns the size of the string in bytes.
cudf::detail::fixed_width_scalar_device_view_base
A type-erased scalar_device_view where the value is a fixed width type.
Definition: scalar_device_view.cuh:80
cudf::numeric_scalar_device_view::numeric_scalar_device_view
numeric_scalar_device_view(data_type type, T *data, bool *is_valid)
Construct a new numeric scalar device view object from data and validity pointers.
Definition: scalar_device_view.cuh:245
cudf::fixed_point_scalar_device_view
A type of scalar_device_view that stores a pointer to a fixed_point value.
Definition: scalar_device_view.cuh:255
cudf::detail::fixed_width_scalar_device_view::data
T const * data() const noexcept
Returns a const raw pointer to the value in device memory.
Definition: scalar_device_view.cuh:206
cudf::detail::scalar_device_view_base::_is_valid
bool * _is_valid
Definition: scalar_device_view.cuh:61
cudf::fixed_point_scalar_device_view::rep_type
typename T::rep rep_type
The representation type of the fixed_point value.
Definition: scalar_device_view.cuh:257
cudf::string_scalar
An owning class to represent a string in device memory.
Definition: scalar.hpp:429
cudf::timestamp_scalar_device_view::timestamp_scalar_device_view
timestamp_scalar_device_view(data_type type, T *data, bool *is_valid)
Construct a new timestamp scalar device view object.
Definition: scalar_device_view.cuh:358
cudf::detail::fixed_width_scalar_device_view::fixed_width_scalar_device_view
fixed_width_scalar_device_view(data_type type, T *data, bool *is_valid)
Construct a new fixed width scalar device view object.
Definition: scalar_device_view.cuh:223
cudf::detail::scalar_device_view_base::scalar_device_view_base
scalar_device_view_base(data_type type, bool *is_valid)
Construct a new scalar device view base object from a device pointer and a validity boolean.
Definition: scalar_device_view.cuh:72
cudf::scalar::type
data_type type() const noexcept
Returns the scalar's logical value type.
cudf::detail::fixed_width_scalar_device_view_base::value
T & value() noexcept
Returns reference to stored value.
Definition: scalar_device_view.cuh:89
cudf::detail::scalar_device_view_base::type
data_type type() const noexcept
Returns the value type.
Definition: scalar_device_view.cuh:42