range_window_bounds.hpp
1 /*
2  * Copyright (c) 2021-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 
17 #pragma once
18 
19 #include <cudf/scalar/scalar.hpp>
20 
21 namespace cudf {
22 
39  public:
43  enum class extent_type : int32_t {
44  CURRENT_ROW = 0,
45  BOUNDED,
46  UNBOUNDED
48  };
49 
56  static range_window_bounds get(scalar const& boundary);
57 
66 
73  [[nodiscard]] bool is_current_row() const { return _extent == extent_type::CURRENT_ROW; }
74 
82 
89  [[nodiscard]] bool is_unbounded() const { return _extent == extent_type::UNBOUNDED; }
90 
96  [[nodiscard]] scalar const& range_scalar() const { return *_range_scalar; }
97 
99  range_window_bounds() = default; // Required for use as return types from dispatch functors.
100 
101  private:
102  const extent_type _extent{extent_type::UNBOUNDED};
103  std::shared_ptr<scalar> _range_scalar{nullptr}; // To enable copy construction/assignment.
104 
105  range_window_bounds(extent_type extent_, std::unique_ptr<scalar> range_scalar_);
106 };
107 
108 } // namespace cudf
cudf::range_window_bounds::is_current_row
bool is_current_row() const
Whether or not the window is bounded to the current row.
Definition: range_window_bounds.hpp:73
cudf::range_window_bounds::unbounded
static range_window_bounds unbounded(data_type type)
Factory method to construct an unbounded window boundary.
scalar.hpp
Class definitions for cudf::scalar.
cudf::range_window_bounds::get
static range_window_bounds get(scalar const &boundary)
Factory method to construct a bounded window boundary.
cudf::range_window_bounds::range_scalar
scalar const & range_scalar() const
Returns the underlying scalar value for the bounds.
Definition: range_window_bounds.hpp:96
cudf::range_window_bounds
Abstraction for window boundary sizes, to be used with grouped_range_rolling_window().
Definition: range_window_bounds.hpp:38
cudf::range_window_bounds::current_row
static range_window_bounds current_row(data_type type)
Factory method to construct a window boundary limited to the value of the current row.
cudf::range_window_bounds::is_unbounded
bool is_unbounded() const
Whether or not the window is unbounded.
Definition: range_window_bounds.hpp:89
cudf::scalar
An owning class to represent a singular value.
Definition: scalar.hpp:48
cudf::range_window_bounds::range_window_bounds
range_window_bounds(range_window_bounds const &)=default
Copy constructor.
cudf::range_window_bounds::extent_type::BOUNDED
@ BOUNDED
Bounds defined as the first/last row that matches the current row.
cudf::data_type
Indicator for the logical data type of an element in a column.
Definition: types.hpp:228
cudf
cuDF interfaces
Definition: aggregation.hpp:34
cudf::range_window_bounds::extent_type::UNBOUNDED
@ UNBOUNDED
Bounds stretching to the first/last row in the entire group.
cudf::range_window_bounds::extent_type
extent_type
The type of range_window_bounds.
Definition: range_window_bounds.hpp:43