#pragma once
#include <cudf/sorting.hpp>
#include <cudf/types.hpp>
#include <memory>
#include <vector>
#include "rust/cxx.h"
#include "column_shim.h"
#include "table_shim.h"
namespace cudf_shims {
std::unique_ptr<OwnedColumn> sorted_order(
const OwnedTable& table,
rust::Slice<const int32_t> column_order,
rust::Slice<const int32_t> null_order);
std::unique_ptr<OwnedTable> sort(
const OwnedTable& table,
rust::Slice<const int32_t> column_order,
rust::Slice<const int32_t> null_order);
std::unique_ptr<OwnedTable> sort_by_key(
const OwnedTable& values,
const OwnedTable& keys,
rust::Slice<const int32_t> column_order,
rust::Slice<const int32_t> null_order);
std::unique_ptr<OwnedTable> stable_sort_by_key(
const OwnedTable& values,
const OwnedTable& keys,
rust::Slice<const int32_t> column_order,
rust::Slice<const int32_t> null_order);
std::unique_ptr<OwnedColumn> rank(
const OwnedColumn& col,
int32_t method,
int32_t column_order,
int32_t null_order,
int32_t null_handling,
bool percentage);
bool is_sorted(
const OwnedTable& table,
rust::Slice<const int32_t> column_order,
rust::Slice<const int32_t> null_order);
std::unique_ptr<OwnedColumn> stable_sorted_order(
const OwnedTable& table,
rust::Slice<const int32_t> column_order,
rust::Slice<const int32_t> null_order);
std::unique_ptr<OwnedTable> stable_sort(
const OwnedTable& table,
rust::Slice<const int32_t> column_order,
rust::Slice<const int32_t> null_order);
std::unique_ptr<OwnedColumn> top_k(
const OwnedColumn& col,
int32_t k,
int32_t order);
std::unique_ptr<OwnedColumn> segmented_sorted_order(
const OwnedTable& table,
const OwnedColumn& segment_offsets,
rust::Slice<const int32_t> column_order,
rust::Slice<const int32_t> null_order);
std::unique_ptr<OwnedColumn> stable_segmented_sorted_order(
const OwnedTable& table,
const OwnedColumn& segment_offsets,
rust::Slice<const int32_t> column_order,
rust::Slice<const int32_t> null_order);
std::unique_ptr<OwnedTable> segmented_sort_by_key(
const OwnedTable& values,
const OwnedTable& keys,
const OwnedColumn& segment_offsets,
rust::Slice<const int32_t> column_order,
rust::Slice<const int32_t> null_order);
std::unique_ptr<OwnedTable> stable_segmented_sort_by_key(
const OwnedTable& values,
const OwnedTable& keys,
const OwnedColumn& segment_offsets,
rust::Slice<const int32_t> column_order,
rust::Slice<const int32_t> null_order);
}