use std::{ptr, sync::Arc};
use crate::{
core::{
column::{Column, ColumnView},
error::{self, Result},
types::TypeId,
},
runtime::execution_domain::ExecutionDomain,
};
pub(crate) fn encode_impl(
input: &ColumnView<'_>,
indices_type: TypeId,
output_domain: &Arc<ExecutionDomain>,
exec_options: &cudf_sys::cudf_exec_options_t,
operation: &'static str,
) -> Result<Column> {
let mut out = ptr::null_mut();
let status = unsafe {
cudf_sys::cudf_dictionary_encode_ex(input.raw_handle(), indices_type.to_raw(), &mut out, exec_options)
};
error::check_status_in_with_details(
status,
operation,
[
("indices_type_id", format!("{:?}", indices_type).to_lowercase()),
("execution_authority", "retained_domain".to_string()),
],
)?;
unsafe { Column::from_raw_with_domain(out, Arc::clone(output_domain)) }
}
pub(crate) fn keys<'a>(dict_column: &ColumnView<'a>) -> Result<ColumnView<'a>> {
let mut out = ptr::null_mut();
error::check_status_in(
unsafe { cudf_sys::cudf_dictionary_keys(dict_column.raw_handle(), &mut out) },
"dictionary::keys",
)?;
unsafe { ColumnView::from_raw_with_domain(out, Arc::clone(dict_column.execution_domain())) }
}
pub(crate) fn indices<'a>(dict_column: &ColumnView<'a>) -> Result<ColumnView<'a>> {
let mut out = ptr::null_mut();
error::check_status_in(
unsafe { cudf_sys::cudf_dictionary_indices(dict_column.raw_handle(), &mut out) },
"dictionary::indices",
)?;
unsafe { ColumnView::from_raw_with_domain(out, Arc::clone(dict_column.execution_domain())) }
}