1use crate::AltrepBuffer;
3use crate::altrep::RegisterAltrep;
4
5macro_rules! buffer_class {
6 ($elem:ty, $storage:ty, $methods:ident, $infer:ident, $class:literal, $register:ident, $entry:ident) => {
7 crate::__impl_altrep_base!(
8 AltrepBuffer<$elem>,
9 RUnwind,
10 with_serialize,
11 extra = {
12 const HAS_DUPLICATE: bool = true;
13 fn duplicate(x: crate::SEXP, _deep: bool) -> crate::SEXP {
14 unsafe { super::duplicate_altrep_owner::<Self>(x) }
15 }
16 }
17 );
18 crate::__impl_altvec_dataptr!(AltrepBuffer<$elem>, $storage);
19 crate::$methods!(AltrepBuffer<$elem>);
20 crate::$infer!(AltrepBuffer<$elem>);
21 super::builtins::impl_register_altrep_builtin!(AltrepBuffer<$elem>, $class);
22
23 #[doc(hidden)]
24 #[unsafe(no_mangle)]
25 pub extern "C-unwind" fn $register() {
26 <AltrepBuffer<$elem> as RegisterAltrep>::get_or_init_class();
27 }
28 #[cfg_attr(
29 not(target_arch = "wasm32"),
30 crate::linkme::distributed_slice(crate::registry::MX_ALTREP_REGISTRATIONS),
31 linkme(crate = crate::linkme)
32 )]
33 static $entry: crate::registry::AltrepRegistration = crate::registry::AltrepRegistration {
34 register: $register,
35 symbol: stringify!($register),
36 };
37 };
38}
39
40impl crate::altrep_traits::Altrep for AltrepBuffer<i32> where {
const GUARD: crate::altrep_traits::AltrepGuard =
crate::altrep_traits::AltrepGuard::RUnwind;
const HAS_DUPLICATE: bool = true;
fn duplicate(x: crate::SEXP, _deep: bool) -> crate::SEXP {
unsafe { super::duplicate_altrep_owner::<Self>(x) }
}
fn length(x: crate::SEXP) -> crate::R_xlen_t {
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return crate::SexpExt::len(&data2) as crate::R_xlen_t;
}
let data =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<i32> as crate::altrep_data::AltrepLen>::altrep_len(data)
as crate::R_xlen_t
}
const HAS_SERIALIZED_STATE: bool = true;
fn serialized_state(x: crate::SEXP) -> crate::SEXP {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::SEXP::null();
}
let data =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<i32> as
crate::altrep_data::AltrepSerialize>::serialized_state(data)
}
const HAS_UNSERIALIZE: bool = true;
fn unserialize(class: crate::SEXP, state: crate::SEXP) -> crate::SEXP {
let ::core::option::Option::Some(data) =
<AltrepBuffer<i32> as
crate::altrep_data::AltrepSerialize>::unserialize(state) else {
{
::core::panicking::panic_fmt(format_args!("ALTREP unserialize failed for {0}",
::core::any::type_name::<AltrepBuffer<i32>>()));
};
};
unsafe {
use crate::SEXP;
use crate::externalptr::ExternalPtr;
use crate::sys::altrep::R_altrep_class_t;
use crate::sys::{Rf_protect_unchecked, Rf_unprotect_unchecked};
let ext_ptr = ExternalPtr::new_unchecked(data);
let data1 = ext_ptr.as_sexp();
Rf_protect_unchecked(data1);
let cls = R_altrep_class_t::from_sexp(class);
let out = cls.new_altrep_unchecked(data1, SEXP::nil());
Rf_unprotect_unchecked(1);
out
}
}
}
impl crate::altrep_traits::AltVec for AltrepBuffer<i32> where {
const HAS_DATAPTR: bool = true;
fn dataptr(x: crate::SEXP, writable: bool) -> *mut ::core::ffi::c_void {
unsafe {
if let ::core::option::Option::Some(data2) =
crate::altrep_data::materialized_altrep_data2(x) {
return crate::sys::DATAPTR_RO(data2).cast_mut();
}
}
let direct =
if writable {
let d =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_mut(x)
};
<AltrepBuffer<i32> as
crate::altrep_data::AltrepDataptr<i32>>::dataptr(d,
true).map(|p| p.cast::<::core::ffi::c_void>())
} else {
let ro =
{
let d =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<i32> as
crate::altrep_data::AltrepDataptr<i32>>::dataptr_or_null(d)
};
if let ::core::option::Option::Some(p) = ro {
return p.cast_mut().cast::<::core::ffi::c_void>();
}
let d =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_mut(x)
};
<AltrepBuffer<i32> as
crate::altrep_data::AltrepDataptr<i32>>::dataptr(d,
false).map(|p| p.cast::<::core::ffi::c_void>())
};
if let ::core::option::Option::Some(p) = direct { return p; }
unsafe { crate::altrep_data::materialize_altrep_data2::<i32>(x) }
}
const HAS_DATAPTR_OR_NULL: bool = true;
fn dataptr_or_null(x: crate::SEXP) -> *const ::core::ffi::c_void {
unsafe {
if let ::core::option::Option::Some(data2) =
crate::altrep_data::materialized_altrep_data2(x) {
return crate::sys::DATAPTR_RO(data2);
}
}
let d =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<i32> as
crate::altrep_data::AltrepDataptr<i32>>::dataptr_or_null(d).map(|p|
p.cast::<::core::ffi::c_void>()).unwrap_or(::core::ptr::null())
}
}
impl crate::altrep_traits::AltInteger for AltrepBuffer<i32> where {
const HAS_ELT: bool = true;
fn elt(x: crate::SEXP, i: crate::R_xlen_t) -> i32 {
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return <i32 as crate::RNativeType>::elt(data2, i.max(0));
}
let data =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<i32> as
crate::altrep_data::AltIntegerData>::elt(data,
i.max(0) as usize)
}
const HAS_GET_REGION: bool = true;
fn get_region(x: crate::SEXP, start: crate::R_xlen_t,
len: crate::R_xlen_t, buf: &mut [i32]) -> crate::R_xlen_t {
if start < 0 || len <= 0 { return 0; }
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return unsafe {
crate::altrep_data::materialized_altrep_region::<i32>(data2,
start as usize, len as usize, buf)
} as crate::R_xlen_t;
}
let data =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
let len = len as usize;
<AltrepBuffer<i32> as
crate::altrep_data::AltIntegerData>::get_region(data,
start as usize, len, buf) as crate::R_xlen_t
}
const HAS_IS_SORTED: bool = true;
fn is_sorted(x: crate::SEXP) -> i32 {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::altrep_traits::UNKNOWN_SORTEDNESS;
}
let data =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<i32> as
crate::altrep_data::AltIntegerData>::is_sorted(data).map(|s|
s.to_r_int()).unwrap_or(i32::MIN)
}
const HAS_NO_NA: bool = true;
fn no_na(x: crate::SEXP) -> i32 {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return 0;
}
let data =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<i32> as
crate::altrep_data::AltIntegerData>::no_na(data).map(|b|
if b { 1 } else { 0 }).unwrap_or(0)
}
const HAS_SUM: bool = true;
fn sum(x: crate::SEXP, narm: bool) -> crate::SEXP {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::SEXP::null();
}
let data =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
match <AltrepBuffer<i32> as
crate::altrep_data::AltIntegerData>::sum(data, narm) {
::core::option::Option::Some(s) => {
if s >= i32::MIN as i64 && s <= i32::MAX as i64 {
crate::SEXP::scalar_integer(s as i32)
} else { crate::SEXP::scalar_real(s as f64) }
}
::core::option::Option::None => crate::SEXP::null(),
}
}
const HAS_MIN: bool = true;
fn min(x: crate::SEXP, narm: bool) -> crate::SEXP {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::SEXP::null();
}
let data =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<i32> as
crate::altrep_data::AltIntegerData>::min(data,
narm).map(|m|
crate::SEXP::scalar_integer(m)).unwrap_or(crate::SEXP::null())
}
const HAS_MAX: bool = true;
fn max(x: crate::SEXP, narm: bool) -> crate::SEXP {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::SEXP::null();
}
let data =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<i32> as
crate::altrep_data::AltIntegerData>::max(data,
narm).map(|m|
crate::SEXP::scalar_integer(m)).unwrap_or(crate::SEXP::null())
}
}
impl crate::altrep_data::InferBase for AltrepBuffer<i32> where {
const BASE: crate::altrep::RBase = crate::altrep::RBase::Int;
unsafe fn make_class(class_name: *const ::core::ffi::c_char,
pkg_name: *const ::core::ffi::c_char)
-> crate::sys::altrep::R_altrep_class_t {
let dll = crate::altrep_dll_info();
let cls =
unsafe {
crate::sys::altrep::R_make_altinteger_class(class_name,
pkg_name, dll)
};
let name = unsafe { ::core::ffi::CStr::from_ptr(class_name) };
crate::altrep::validate_altrep_class(cls, name,
crate::altrep::RBase::Int)
}
unsafe fn install_methods(cls: crate::sys::altrep::R_altrep_class_t) {
unsafe {
crate::altrep_bridge::install_base::<AltrepBuffer<i32>>(cls)
};
unsafe {
crate::altrep_bridge::install_vec::<AltrepBuffer<i32>>(cls)
};
unsafe {
crate::altrep_bridge::install_int::<AltrepBuffer<i32>>(cls)
};
}
}
impl RegisterAltrep for AltrepBuffer<i32> {
fn get_or_init_class() -> crate::sys::altrep::R_altrep_class_t {
use std::sync::OnceLock;
static CLASS: OnceLock<crate::sys::altrep::R_altrep_class_t> =
OnceLock::new();
*CLASS.get_or_init(||
{
const CLASS_NAME: &[u8] = "Buffer_i32\u{0}".as_bytes();
let cls =
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::InferBase>::make_class(CLASS_NAME.as_ptr().cast::<std::ffi::c_char>(),
crate::AltrepPkgName::as_ptr())
};
unsafe {
<AltrepBuffer<i32> as
crate::altrep_data::InferBase>::install_methods(cls);
}
cls
})
}
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub extern "C-unwind" fn __mx_altrep_reg_builtin_Buffer_i32() {
<AltrepBuffer<i32> as RegisterAltrep>::get_or_init_class();
}
#[used]
#[unsafe(link_section = "linkme_MX_ALTREP_REGISTRATIONS")]
static __MX_ALTREP_REG_BUFFER_I32: crate::registry::AltrepRegistration =
{
#[allow(clippy :: no_effect_underscore_binding)]
unsafe fn __typecheck(_: crate::linkme::__private36::Void) {
#[allow(clippy :: ref_option_ref)]
let __new =
|| -> fn() -> &'static crate::registry::AltrepRegistration
{ || &__MX_ALTREP_REG_BUFFER_I32 };
unsafe {
crate::linkme::DistributedSlice::private_typecheck(crate::registry::MX_ALTREP_REGISTRATIONS,
__new());
}
}
crate::registry::AltrepRegistration {
register: __mx_altrep_reg_builtin_Buffer_i32,
symbol: "__mx_altrep_reg_builtin_Buffer_i32",
}
};buffer_class!(
41 i32,
42 i32,
43 __impl_altinteger_methods,
44 impl_inferbase_integer,
45 "Buffer_i32",
46 __mx_altrep_reg_builtin_Buffer_i32,
47 __MX_ALTREP_REG_BUFFER_I32
48);
49impl crate::altrep_traits::Altrep for AltrepBuffer<f64> where {
const GUARD: crate::altrep_traits::AltrepGuard =
crate::altrep_traits::AltrepGuard::RUnwind;
const HAS_DUPLICATE: bool = true;
fn duplicate(x: crate::SEXP, _deep: bool) -> crate::SEXP {
unsafe { super::duplicate_altrep_owner::<Self>(x) }
}
fn length(x: crate::SEXP) -> crate::R_xlen_t {
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return crate::SexpExt::len(&data2) as crate::R_xlen_t;
}
let data =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<f64> as crate::altrep_data::AltrepLen>::altrep_len(data)
as crate::R_xlen_t
}
const HAS_SERIALIZED_STATE: bool = true;
fn serialized_state(x: crate::SEXP) -> crate::SEXP {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::SEXP::null();
}
let data =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<f64> as
crate::altrep_data::AltrepSerialize>::serialized_state(data)
}
const HAS_UNSERIALIZE: bool = true;
fn unserialize(class: crate::SEXP, state: crate::SEXP) -> crate::SEXP {
let ::core::option::Option::Some(data) =
<AltrepBuffer<f64> as
crate::altrep_data::AltrepSerialize>::unserialize(state) else {
{
::core::panicking::panic_fmt(format_args!("ALTREP unserialize failed for {0}",
::core::any::type_name::<AltrepBuffer<f64>>()));
};
};
unsafe {
use crate::SEXP;
use crate::externalptr::ExternalPtr;
use crate::sys::altrep::R_altrep_class_t;
use crate::sys::{Rf_protect_unchecked, Rf_unprotect_unchecked};
let ext_ptr = ExternalPtr::new_unchecked(data);
let data1 = ext_ptr.as_sexp();
Rf_protect_unchecked(data1);
let cls = R_altrep_class_t::from_sexp(class);
let out = cls.new_altrep_unchecked(data1, SEXP::nil());
Rf_unprotect_unchecked(1);
out
}
}
}
impl crate::altrep_traits::AltVec for AltrepBuffer<f64> where {
const HAS_DATAPTR: bool = true;
fn dataptr(x: crate::SEXP, writable: bool) -> *mut ::core::ffi::c_void {
unsafe {
if let ::core::option::Option::Some(data2) =
crate::altrep_data::materialized_altrep_data2(x) {
return crate::sys::DATAPTR_RO(data2).cast_mut();
}
}
let direct =
if writable {
let d =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_mut(x)
};
<AltrepBuffer<f64> as
crate::altrep_data::AltrepDataptr<f64>>::dataptr(d,
true).map(|p| p.cast::<::core::ffi::c_void>())
} else {
let ro =
{
let d =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<f64> as
crate::altrep_data::AltrepDataptr<f64>>::dataptr_or_null(d)
};
if let ::core::option::Option::Some(p) = ro {
return p.cast_mut().cast::<::core::ffi::c_void>();
}
let d =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_mut(x)
};
<AltrepBuffer<f64> as
crate::altrep_data::AltrepDataptr<f64>>::dataptr(d,
false).map(|p| p.cast::<::core::ffi::c_void>())
};
if let ::core::option::Option::Some(p) = direct { return p; }
unsafe { crate::altrep_data::materialize_altrep_data2::<f64>(x) }
}
const HAS_DATAPTR_OR_NULL: bool = true;
fn dataptr_or_null(x: crate::SEXP) -> *const ::core::ffi::c_void {
unsafe {
if let ::core::option::Option::Some(data2) =
crate::altrep_data::materialized_altrep_data2(x) {
return crate::sys::DATAPTR_RO(data2);
}
}
let d =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<f64> as
crate::altrep_data::AltrepDataptr<f64>>::dataptr_or_null(d).map(|p|
p.cast::<::core::ffi::c_void>()).unwrap_or(::core::ptr::null())
}
}
impl crate::altrep_traits::AltReal for AltrepBuffer<f64> where {
const HAS_ELT: bool = true;
fn elt(x: crate::SEXP, i: crate::R_xlen_t) -> f64 {
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return <f64 as crate::RNativeType>::elt(data2, i.max(0));
}
let data =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<f64> as
crate::altrep_data::AltRealData>::elt(data, i.max(0) as usize)
}
const HAS_GET_REGION: bool = true;
fn get_region(x: crate::SEXP, start: crate::R_xlen_t,
len: crate::R_xlen_t, buf: &mut [f64]) -> crate::R_xlen_t {
if start < 0 || len <= 0 { return 0; }
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return unsafe {
crate::altrep_data::materialized_altrep_region::<f64>(data2,
start as usize, len as usize, buf)
} as crate::R_xlen_t;
}
let data =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
let len = len as usize;
<AltrepBuffer<f64> as
crate::altrep_data::AltRealData>::get_region(data,
start as usize, len, buf) as crate::R_xlen_t
}
const HAS_IS_SORTED: bool = true;
fn is_sorted(x: crate::SEXP) -> i32 {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::altrep_traits::UNKNOWN_SORTEDNESS;
}
let data =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<f64> as
crate::altrep_data::AltRealData>::is_sorted(data).map(|s|
s.to_r_int()).unwrap_or(i32::MIN)
}
const HAS_NO_NA: bool = true;
fn no_na(x: crate::SEXP) -> i32 {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return 0;
}
let data =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<f64> as
crate::altrep_data::AltRealData>::no_na(data).map(|b|
if b { 1 } else { 0 }).unwrap_or(0)
}
const HAS_SUM: bool = true;
fn sum(x: crate::SEXP, narm: bool) -> crate::SEXP {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::SEXP::null();
}
let data =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<f64> as
crate::altrep_data::AltRealData>::sum(data,
narm).map(|s|
crate::SEXP::scalar_real(s)).unwrap_or(crate::SEXP::null())
}
const HAS_MIN: bool = true;
fn min(x: crate::SEXP, narm: bool) -> crate::SEXP {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::SEXP::null();
}
let data =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<f64> as
crate::altrep_data::AltRealData>::min(data,
narm).map(|m|
crate::SEXP::scalar_real(m)).unwrap_or(crate::SEXP::null())
}
const HAS_MAX: bool = true;
fn max(x: crate::SEXP, narm: bool) -> crate::SEXP {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::SEXP::null();
}
let data =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<f64> as
crate::altrep_data::AltRealData>::max(data,
narm).map(|m|
crate::SEXP::scalar_real(m)).unwrap_or(crate::SEXP::null())
}
}
impl crate::altrep_data::InferBase for AltrepBuffer<f64> where {
const BASE: crate::altrep::RBase = crate::altrep::RBase::Real;
unsafe fn make_class(class_name: *const ::core::ffi::c_char,
pkg_name: *const ::core::ffi::c_char)
-> crate::sys::altrep::R_altrep_class_t {
let dll = crate::altrep_dll_info();
let cls =
unsafe {
crate::sys::altrep::R_make_altreal_class(class_name, pkg_name,
dll)
};
let name = unsafe { ::core::ffi::CStr::from_ptr(class_name) };
crate::altrep::validate_altrep_class(cls, name,
crate::altrep::RBase::Real)
}
unsafe fn install_methods(cls: crate::sys::altrep::R_altrep_class_t) {
unsafe {
crate::altrep_bridge::install_base::<AltrepBuffer<f64>>(cls)
};
unsafe {
crate::altrep_bridge::install_vec::<AltrepBuffer<f64>>(cls)
};
unsafe {
crate::altrep_bridge::install_real::<AltrepBuffer<f64>>(cls)
};
}
}
impl RegisterAltrep for AltrepBuffer<f64> {
fn get_or_init_class() -> crate::sys::altrep::R_altrep_class_t {
use std::sync::OnceLock;
static CLASS: OnceLock<crate::sys::altrep::R_altrep_class_t> =
OnceLock::new();
*CLASS.get_or_init(||
{
const CLASS_NAME: &[u8] = "Buffer_f64\u{0}".as_bytes();
let cls =
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::InferBase>::make_class(CLASS_NAME.as_ptr().cast::<std::ffi::c_char>(),
crate::AltrepPkgName::as_ptr())
};
unsafe {
<AltrepBuffer<f64> as
crate::altrep_data::InferBase>::install_methods(cls);
}
cls
})
}
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub extern "C-unwind" fn __mx_altrep_reg_builtin_Buffer_f64() {
<AltrepBuffer<f64> as RegisterAltrep>::get_or_init_class();
}
#[used]
#[unsafe(link_section = "linkme_MX_ALTREP_REGISTRATIONS")]
static __MX_ALTREP_REG_BUFFER_F64: crate::registry::AltrepRegistration =
{
#[allow(clippy :: no_effect_underscore_binding)]
unsafe fn __typecheck(_: crate::linkme::__private36::Void) {
#[allow(clippy :: ref_option_ref)]
let __new =
|| -> fn() -> &'static crate::registry::AltrepRegistration
{ || &__MX_ALTREP_REG_BUFFER_F64 };
unsafe {
crate::linkme::DistributedSlice::private_typecheck(crate::registry::MX_ALTREP_REGISTRATIONS,
__new());
}
}
crate::registry::AltrepRegistration {
register: __mx_altrep_reg_builtin_Buffer_f64,
symbol: "__mx_altrep_reg_builtin_Buffer_f64",
}
};buffer_class!(
50 f64,
51 f64,
52 __impl_altreal_methods,
53 impl_inferbase_real,
54 "Buffer_f64",
55 __mx_altrep_reg_builtin_Buffer_f64,
56 __MX_ALTREP_REG_BUFFER_F64
57);
58impl crate::altrep_traits::Altrep for AltrepBuffer<u8> where {
const GUARD: crate::altrep_traits::AltrepGuard =
crate::altrep_traits::AltrepGuard::RUnwind;
const HAS_DUPLICATE: bool = true;
fn duplicate(x: crate::SEXP, _deep: bool) -> crate::SEXP {
unsafe { super::duplicate_altrep_owner::<Self>(x) }
}
fn length(x: crate::SEXP) -> crate::R_xlen_t {
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return crate::SexpExt::len(&data2) as crate::R_xlen_t;
}
let data =
unsafe {
<AltrepBuffer<u8> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<u8> as crate::altrep_data::AltrepLen>::altrep_len(data)
as crate::R_xlen_t
}
const HAS_SERIALIZED_STATE: bool = true;
fn serialized_state(x: crate::SEXP) -> crate::SEXP {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::SEXP::null();
}
let data =
unsafe {
<AltrepBuffer<u8> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<u8> as
crate::altrep_data::AltrepSerialize>::serialized_state(data)
}
const HAS_UNSERIALIZE: bool = true;
fn unserialize(class: crate::SEXP, state: crate::SEXP) -> crate::SEXP {
let ::core::option::Option::Some(data) =
<AltrepBuffer<u8> as
crate::altrep_data::AltrepSerialize>::unserialize(state) else {
{
::core::panicking::panic_fmt(format_args!("ALTREP unserialize failed for {0}",
::core::any::type_name::<AltrepBuffer<u8>>()));
};
};
unsafe {
use crate::SEXP;
use crate::externalptr::ExternalPtr;
use crate::sys::altrep::R_altrep_class_t;
use crate::sys::{Rf_protect_unchecked, Rf_unprotect_unchecked};
let ext_ptr = ExternalPtr::new_unchecked(data);
let data1 = ext_ptr.as_sexp();
Rf_protect_unchecked(data1);
let cls = R_altrep_class_t::from_sexp(class);
let out = cls.new_altrep_unchecked(data1, SEXP::nil());
Rf_unprotect_unchecked(1);
out
}
}
}
impl crate::altrep_traits::AltVec for AltrepBuffer<u8> where {
const HAS_DATAPTR: bool = true;
fn dataptr(x: crate::SEXP, writable: bool) -> *mut ::core::ffi::c_void {
unsafe {
if let ::core::option::Option::Some(data2) =
crate::altrep_data::materialized_altrep_data2(x) {
return crate::sys::DATAPTR_RO(data2).cast_mut();
}
}
let direct =
if writable {
let d =
unsafe {
<AltrepBuffer<u8> as
crate::altrep_data::AltrepExtract>::altrep_extract_mut(x)
};
<AltrepBuffer<u8> as
crate::altrep_data::AltrepDataptr<u8>>::dataptr(d,
true).map(|p| p.cast::<::core::ffi::c_void>())
} else {
let ro =
{
let d =
unsafe {
<AltrepBuffer<u8> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<u8> as
crate::altrep_data::AltrepDataptr<u8>>::dataptr_or_null(d)
};
if let ::core::option::Option::Some(p) = ro {
return p.cast_mut().cast::<::core::ffi::c_void>();
}
let d =
unsafe {
<AltrepBuffer<u8> as
crate::altrep_data::AltrepExtract>::altrep_extract_mut(x)
};
<AltrepBuffer<u8> as
crate::altrep_data::AltrepDataptr<u8>>::dataptr(d,
false).map(|p| p.cast::<::core::ffi::c_void>())
};
if let ::core::option::Option::Some(p) = direct { return p; }
unsafe { crate::altrep_data::materialize_altrep_data2::<u8>(x) }
}
const HAS_DATAPTR_OR_NULL: bool = true;
fn dataptr_or_null(x: crate::SEXP) -> *const ::core::ffi::c_void {
unsafe {
if let ::core::option::Option::Some(data2) =
crate::altrep_data::materialized_altrep_data2(x) {
return crate::sys::DATAPTR_RO(data2);
}
}
let d =
unsafe {
<AltrepBuffer<u8> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<u8> as
crate::altrep_data::AltrepDataptr<u8>>::dataptr_or_null(d).map(|p|
p.cast::<::core::ffi::c_void>()).unwrap_or(::core::ptr::null())
}
}
impl crate::altrep_traits::AltRaw for AltrepBuffer<u8> where {
const HAS_ELT: bool = true;
fn elt(x: crate::SEXP, i: crate::R_xlen_t) -> u8 {
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return <u8 as crate::RNativeType>::elt(data2, i.max(0));
}
let data =
unsafe {
<AltrepBuffer<u8> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<u8> as
crate::altrep_data::AltRawData>::elt(data, i.max(0) as usize)
}
const HAS_GET_REGION: bool = true;
fn get_region(x: crate::SEXP, start: crate::R_xlen_t,
len: crate::R_xlen_t, buf: &mut [u8]) -> crate::R_xlen_t {
if start < 0 || len <= 0 { return 0; }
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return unsafe {
crate::altrep_data::materialized_altrep_region::<u8>(data2,
start as usize, len as usize, buf)
} as crate::R_xlen_t;
}
let data =
unsafe {
<AltrepBuffer<u8> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
let len = len as usize;
<AltrepBuffer<u8> as
crate::altrep_data::AltRawData>::get_region(data,
start as usize, len, buf) as crate::R_xlen_t
}
}
impl crate::altrep_data::InferBase for AltrepBuffer<u8> where {
const BASE: crate::altrep::RBase = crate::altrep::RBase::Raw;
unsafe fn make_class(class_name: *const ::core::ffi::c_char,
pkg_name: *const ::core::ffi::c_char)
-> crate::sys::altrep::R_altrep_class_t {
let dll = crate::altrep_dll_info();
let cls =
unsafe {
crate::sys::altrep::R_make_altraw_class(class_name, pkg_name,
dll)
};
let name = unsafe { ::core::ffi::CStr::from_ptr(class_name) };
crate::altrep::validate_altrep_class(cls, name,
crate::altrep::RBase::Raw)
}
unsafe fn install_methods(cls: crate::sys::altrep::R_altrep_class_t) {
unsafe {
crate::altrep_bridge::install_base::<AltrepBuffer<u8>>(cls)
};
unsafe { crate::altrep_bridge::install_vec::<AltrepBuffer<u8>>(cls) };
unsafe { crate::altrep_bridge::install_raw::<AltrepBuffer<u8>>(cls) };
}
}
impl RegisterAltrep for AltrepBuffer<u8> {
fn get_or_init_class() -> crate::sys::altrep::R_altrep_class_t {
use std::sync::OnceLock;
static CLASS: OnceLock<crate::sys::altrep::R_altrep_class_t> =
OnceLock::new();
*CLASS.get_or_init(||
{
const CLASS_NAME: &[u8] = "Buffer_u8\u{0}".as_bytes();
let cls =
unsafe {
<AltrepBuffer<u8> as
crate::altrep_data::InferBase>::make_class(CLASS_NAME.as_ptr().cast::<std::ffi::c_char>(),
crate::AltrepPkgName::as_ptr())
};
unsafe {
<AltrepBuffer<u8> as
crate::altrep_data::InferBase>::install_methods(cls);
}
cls
})
}
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub extern "C-unwind" fn __mx_altrep_reg_builtin_Buffer_u8() {
<AltrepBuffer<u8> as RegisterAltrep>::get_or_init_class();
}
#[used]
#[unsafe(link_section = "linkme_MX_ALTREP_REGISTRATIONS")]
static __MX_ALTREP_REG_BUFFER_U8: crate::registry::AltrepRegistration =
{
#[allow(clippy :: no_effect_underscore_binding)]
unsafe fn __typecheck(_: crate::linkme::__private36::Void) {
#[allow(clippy :: ref_option_ref)]
let __new =
|| -> fn() -> &'static crate::registry::AltrepRegistration
{ || &__MX_ALTREP_REG_BUFFER_U8 };
unsafe {
crate::linkme::DistributedSlice::private_typecheck(crate::registry::MX_ALTREP_REGISTRATIONS,
__new());
}
}
crate::registry::AltrepRegistration {
register: __mx_altrep_reg_builtin_Buffer_u8,
symbol: "__mx_altrep_reg_builtin_Buffer_u8",
}
};buffer_class!(
59 u8,
60 u8,
61 __impl_altraw_methods,
62 impl_inferbase_raw,
63 "Buffer_u8",
64 __mx_altrep_reg_builtin_Buffer_u8,
65 __MX_ALTREP_REG_BUFFER_U8
66);
67impl crate::altrep_traits::Altrep for AltrepBuffer<crate::Rcomplex> where {
const GUARD: crate::altrep_traits::AltrepGuard =
crate::altrep_traits::AltrepGuard::RUnwind;
const HAS_DUPLICATE: bool = true;
fn duplicate(x: crate::SEXP, _deep: bool) -> crate::SEXP {
unsafe { super::duplicate_altrep_owner::<Self>(x) }
}
fn length(x: crate::SEXP) -> crate::R_xlen_t {
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return crate::SexpExt::len(&data2) as crate::R_xlen_t;
}
let data =
unsafe {
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepLen>::altrep_len(data) as
crate::R_xlen_t
}
const HAS_SERIALIZED_STATE: bool = true;
fn serialized_state(x: crate::SEXP) -> crate::SEXP {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::SEXP::null();
}
let data =
unsafe {
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepSerialize>::serialized_state(data)
}
const HAS_UNSERIALIZE: bool = true;
fn unserialize(class: crate::SEXP, state: crate::SEXP) -> crate::SEXP {
let ::core::option::Option::Some(data) =
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepSerialize>::unserialize(state) else {
{
::core::panicking::panic_fmt(format_args!("ALTREP unserialize failed for {0}",
::core::any::type_name::<AltrepBuffer<crate::Rcomplex>>()));
};
};
unsafe {
use crate::SEXP;
use crate::externalptr::ExternalPtr;
use crate::sys::altrep::R_altrep_class_t;
use crate::sys::{Rf_protect_unchecked, Rf_unprotect_unchecked};
let ext_ptr = ExternalPtr::new_unchecked(data);
let data1 = ext_ptr.as_sexp();
Rf_protect_unchecked(data1);
let cls = R_altrep_class_t::from_sexp(class);
let out = cls.new_altrep_unchecked(data1, SEXP::nil());
Rf_unprotect_unchecked(1);
out
}
}
}
impl crate::altrep_traits::AltVec for AltrepBuffer<crate::Rcomplex> where {
const HAS_DATAPTR: bool = true;
fn dataptr(x: crate::SEXP, writable: bool) -> *mut ::core::ffi::c_void {
unsafe {
if let ::core::option::Option::Some(data2) =
crate::altrep_data::materialized_altrep_data2(x) {
return crate::sys::DATAPTR_RO(data2).cast_mut();
}
}
let direct =
if writable {
let d =
unsafe {
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepExtract>::altrep_extract_mut(x)
};
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepDataptr<crate::Rcomplex>>::dataptr(d,
true).map(|p| p.cast::<::core::ffi::c_void>())
} else {
let ro =
{
let d =
unsafe {
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepDataptr<crate::Rcomplex>>::dataptr_or_null(d)
};
if let ::core::option::Option::Some(p) = ro {
return p.cast_mut().cast::<::core::ffi::c_void>();
}
let d =
unsafe {
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepExtract>::altrep_extract_mut(x)
};
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepDataptr<crate::Rcomplex>>::dataptr(d,
false).map(|p| p.cast::<::core::ffi::c_void>())
};
if let ::core::option::Option::Some(p) = direct { return p; }
unsafe {
crate::altrep_data::materialize_altrep_data2::<crate::Rcomplex>(x)
}
}
const HAS_DATAPTR_OR_NULL: bool = true;
fn dataptr_or_null(x: crate::SEXP) -> *const ::core::ffi::c_void {
unsafe {
if let ::core::option::Option::Some(data2) =
crate::altrep_data::materialized_altrep_data2(x) {
return crate::sys::DATAPTR_RO(data2);
}
}
let d =
unsafe {
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepDataptr<crate::Rcomplex>>::dataptr_or_null(d).map(|p|
p.cast::<::core::ffi::c_void>()).unwrap_or(::core::ptr::null())
}
}
impl crate::altrep_traits::AltComplex for AltrepBuffer<crate::Rcomplex> where
{
const HAS_ELT: bool = true;
fn elt(x: crate::SEXP, i: crate::R_xlen_t) -> crate::Rcomplex {
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return <crate::Rcomplex as
crate::RNativeType>::elt(data2, i.max(0));
}
let data =
unsafe {
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltComplexData>::elt(data,
i.max(0) as usize)
}
const HAS_GET_REGION: bool = true;
fn get_region(x: crate::SEXP, start: crate::R_xlen_t,
len: crate::R_xlen_t, buf: &mut [crate::Rcomplex])
-> crate::R_xlen_t {
if start < 0 || len <= 0 { return 0; }
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return unsafe {
crate::altrep_data::materialized_altrep_region::<crate::Rcomplex>(data2,
start as usize, len as usize, buf)
} as crate::R_xlen_t;
}
let data =
unsafe {
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
let len = len as usize;
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::AltComplexData>::get_region(data,
start as usize, len, buf) as crate::R_xlen_t
}
}
impl crate::altrep_data::InferBase for AltrepBuffer<crate::Rcomplex> where {
const BASE: crate::altrep::RBase = crate::altrep::RBase::Complex;
unsafe fn make_class(class_name: *const ::core::ffi::c_char,
pkg_name: *const ::core::ffi::c_char)
-> crate::sys::altrep::R_altrep_class_t {
let dll = crate::altrep_dll_info();
let cls =
unsafe {
crate::sys::altrep::R_make_altcomplex_class(class_name,
pkg_name, dll)
};
let name = unsafe { ::core::ffi::CStr::from_ptr(class_name) };
crate::altrep::validate_altrep_class(cls, name,
crate::altrep::RBase::Complex)
}
unsafe fn install_methods(cls: crate::sys::altrep::R_altrep_class_t) {
unsafe {
crate::altrep_bridge::install_base::<AltrepBuffer<crate::Rcomplex>>(cls)
};
unsafe {
crate::altrep_bridge::install_vec::<AltrepBuffer<crate::Rcomplex>>(cls)
};
unsafe {
crate::altrep_bridge::install_cplx::<AltrepBuffer<crate::Rcomplex>>(cls)
};
}
}
impl RegisterAltrep for AltrepBuffer<crate::Rcomplex> {
fn get_or_init_class() -> crate::sys::altrep::R_altrep_class_t {
use std::sync::OnceLock;
static CLASS: OnceLock<crate::sys::altrep::R_altrep_class_t> =
OnceLock::new();
*CLASS.get_or_init(||
{
const CLASS_NAME: &[u8] = "Buffer_Rcomplex\u{0}".as_bytes();
let cls =
unsafe {
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::InferBase>::make_class(CLASS_NAME.as_ptr().cast::<std::ffi::c_char>(),
crate::AltrepPkgName::as_ptr())
};
unsafe {
<AltrepBuffer<crate::Rcomplex> as
crate::altrep_data::InferBase>::install_methods(cls);
}
cls
})
}
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub extern "C-unwind" fn __mx_altrep_reg_builtin_Buffer_Rcomplex() {
<AltrepBuffer<crate::Rcomplex> as RegisterAltrep>::get_or_init_class();
}
#[used]
#[unsafe(link_section = "linkme_MX_ALTREP_REGISTRATIONS")]
static __MX_ALTREP_REG_BUFFER_RCOMPLEX: crate::registry::AltrepRegistration =
{
#[allow(clippy :: no_effect_underscore_binding)]
unsafe fn __typecheck(_: crate::linkme::__private36::Void) {
#[allow(clippy :: ref_option_ref)]
let __new =
|| -> fn() -> &'static crate::registry::AltrepRegistration
{ || &__MX_ALTREP_REG_BUFFER_RCOMPLEX };
unsafe {
crate::linkme::DistributedSlice::private_typecheck(crate::registry::MX_ALTREP_REGISTRATIONS,
__new());
}
}
crate::registry::AltrepRegistration {
register: __mx_altrep_reg_builtin_Buffer_Rcomplex,
symbol: "__mx_altrep_reg_builtin_Buffer_Rcomplex",
}
};buffer_class!(
68 crate::Rcomplex,
69 crate::Rcomplex,
70 __impl_altcomplex_methods,
71 impl_inferbase_complex,
72 "Buffer_Rcomplex",
73 __mx_altrep_reg_builtin_Buffer_Rcomplex,
74 __MX_ALTREP_REG_BUFFER_RCOMPLEX
75);
76impl crate::altrep_traits::Altrep for AltrepBuffer<crate::RLogical> where {
const GUARD: crate::altrep_traits::AltrepGuard =
crate::altrep_traits::AltrepGuard::RUnwind;
const HAS_DUPLICATE: bool = true;
fn duplicate(x: crate::SEXP, _deep: bool) -> crate::SEXP {
unsafe { super::duplicate_altrep_owner::<Self>(x) }
}
fn length(x: crate::SEXP) -> crate::R_xlen_t {
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return crate::SexpExt::len(&data2) as crate::R_xlen_t;
}
let data =
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepLen>::altrep_len(data) as
crate::R_xlen_t
}
const HAS_SERIALIZED_STATE: bool = true;
fn serialized_state(x: crate::SEXP) -> crate::SEXP {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::SEXP::null();
}
let data =
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepSerialize>::serialized_state(data)
}
const HAS_UNSERIALIZE: bool = true;
fn unserialize(class: crate::SEXP, state: crate::SEXP) -> crate::SEXP {
let ::core::option::Option::Some(data) =
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepSerialize>::unserialize(state) else {
{
::core::panicking::panic_fmt(format_args!("ALTREP unserialize failed for {0}",
::core::any::type_name::<AltrepBuffer<crate::RLogical>>()));
};
};
unsafe {
use crate::SEXP;
use crate::externalptr::ExternalPtr;
use crate::sys::altrep::R_altrep_class_t;
use crate::sys::{Rf_protect_unchecked, Rf_unprotect_unchecked};
let ext_ptr = ExternalPtr::new_unchecked(data);
let data1 = ext_ptr.as_sexp();
Rf_protect_unchecked(data1);
let cls = R_altrep_class_t::from_sexp(class);
let out = cls.new_altrep_unchecked(data1, SEXP::nil());
Rf_unprotect_unchecked(1);
out
}
}
}
impl crate::altrep_traits::AltVec for AltrepBuffer<crate::RLogical> where {
const HAS_DATAPTR: bool = true;
fn dataptr(x: crate::SEXP, writable: bool) -> *mut ::core::ffi::c_void {
unsafe {
if let ::core::option::Option::Some(data2) =
crate::altrep_data::materialized_altrep_data2(x) {
return crate::sys::DATAPTR_RO(data2).cast_mut();
}
}
let direct =
if writable {
let d =
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepExtract>::altrep_extract_mut(x)
};
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepDataptr<i32>>::dataptr(d,
true).map(|p| p.cast::<::core::ffi::c_void>())
} else {
let ro =
{
let d =
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepDataptr<i32>>::dataptr_or_null(d)
};
if let ::core::option::Option::Some(p) = ro {
return p.cast_mut().cast::<::core::ffi::c_void>();
}
let d =
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepExtract>::altrep_extract_mut(x)
};
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepDataptr<i32>>::dataptr(d,
false).map(|p| p.cast::<::core::ffi::c_void>())
};
if let ::core::option::Option::Some(p) = direct { return p; }
unsafe { crate::altrep_data::materialize_altrep_data2::<i32>(x) }
}
const HAS_DATAPTR_OR_NULL: bool = true;
fn dataptr_or_null(x: crate::SEXP) -> *const ::core::ffi::c_void {
unsafe {
if let ::core::option::Option::Some(data2) =
crate::altrep_data::materialized_altrep_data2(x) {
return crate::sys::DATAPTR_RO(data2);
}
}
let d =
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepDataptr<i32>>::dataptr_or_null(d).map(|p|
p.cast::<::core::ffi::c_void>()).unwrap_or(::core::ptr::null())
}
}
impl crate::altrep_traits::AltLogical for AltrepBuffer<crate::RLogical> where
{
const HAS_ELT: bool = true;
fn elt(x: crate::SEXP, i: crate::R_xlen_t) -> i32 {
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return <crate::RLogical as
crate::RNativeType>::elt(data2, i.max(0)).to_i32();
}
let data =
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
let i = i.max(0) as usize;
if let ::core::option::Option::Some(values) =
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltLogicalData>::as_r_slice(data) {
return values[i];
}
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltLogicalData>::elt(data, i).to_r_int()
}
const HAS_GET_REGION: bool = true;
fn get_region(x: crate::SEXP, start: crate::R_xlen_t,
len: crate::R_xlen_t, buf: &mut [i32]) -> crate::R_xlen_t {
if start < 0 || len <= 0 { return 0; }
if let ::core::option::Option::Some(data2) =
unsafe { crate::altrep_data::materialized_altrep_data2(x) } {
return unsafe {
crate::altrep_data::materialized_altrep_region::<i32>(data2,
start as usize, len as usize, buf)
} as crate::R_xlen_t;
}
let data =
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
let len = len as usize;
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltLogicalData>::get_region(data,
start as usize, len, buf) as crate::R_xlen_t
}
const HAS_IS_SORTED: bool = true;
fn is_sorted(x: crate::SEXP) -> i32 {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::altrep_traits::UNKNOWN_SORTEDNESS;
}
let data =
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltLogicalData>::is_sorted(data).map(|s|
s.to_r_int()).unwrap_or(i32::MIN)
}
const HAS_NO_NA: bool = true;
fn no_na(x: crate::SEXP) -> i32 {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return 0;
}
let data =
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltLogicalData>::no_na(data).map(|b|
if b { 1 } else { 0 }).unwrap_or(0)
}
const HAS_SUM: bool = true;
fn sum(x: crate::SEXP, narm: bool) -> crate::SEXP {
if unsafe { crate::altrep_data::altrep_values_written(x) } {
return crate::SEXP::null();
}
let data =
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltrepExtract>::altrep_extract_ref(x)
};
match <AltrepBuffer<crate::RLogical> as
crate::altrep_data::AltLogicalData>::sum(data, narm) {
::core::option::Option::Some(s) => {
if s >= i32::MIN as i64 && s <= i32::MAX as i64 {
crate::SEXP::scalar_integer(s as i32)
} else { crate::SEXP::scalar_real(s as f64) }
}
::core::option::Option::None => crate::SEXP::null(),
}
}
}
impl crate::altrep_data::InferBase for AltrepBuffer<crate::RLogical> where {
const BASE: crate::altrep::RBase = crate::altrep::RBase::Logical;
unsafe fn make_class(class_name: *const ::core::ffi::c_char,
pkg_name: *const ::core::ffi::c_char)
-> crate::sys::altrep::R_altrep_class_t {
let dll = crate::altrep_dll_info();
let cls =
unsafe {
crate::sys::altrep::R_make_altlogical_class(class_name,
pkg_name, dll)
};
let name = unsafe { ::core::ffi::CStr::from_ptr(class_name) };
crate::altrep::validate_altrep_class(cls, name,
crate::altrep::RBase::Logical)
}
unsafe fn install_methods(cls: crate::sys::altrep::R_altrep_class_t) {
unsafe {
crate::altrep_bridge::install_base::<AltrepBuffer<crate::RLogical>>(cls)
};
unsafe {
crate::altrep_bridge::install_vec::<AltrepBuffer<crate::RLogical>>(cls)
};
unsafe {
crate::altrep_bridge::install_lgl::<AltrepBuffer<crate::RLogical>>(cls)
};
}
}
impl RegisterAltrep for AltrepBuffer<crate::RLogical> {
fn get_or_init_class() -> crate::sys::altrep::R_altrep_class_t {
use std::sync::OnceLock;
static CLASS: OnceLock<crate::sys::altrep::R_altrep_class_t> =
OnceLock::new();
*CLASS.get_or_init(||
{
const CLASS_NAME: &[u8] = "Buffer_RLogical\u{0}".as_bytes();
let cls =
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::InferBase>::make_class(CLASS_NAME.as_ptr().cast::<std::ffi::c_char>(),
crate::AltrepPkgName::as_ptr())
};
unsafe {
<AltrepBuffer<crate::RLogical> as
crate::altrep_data::InferBase>::install_methods(cls);
}
cls
})
}
}
#[doc(hidden)]
#[unsafe(no_mangle)]
pub extern "C-unwind" fn __mx_altrep_reg_builtin_Buffer_RLogical() {
<AltrepBuffer<crate::RLogical> as RegisterAltrep>::get_or_init_class();
}
#[used]
#[unsafe(link_section = "linkme_MX_ALTREP_REGISTRATIONS")]
static __MX_ALTREP_REG_BUFFER_RLOGICAL: crate::registry::AltrepRegistration =
{
#[allow(clippy :: no_effect_underscore_binding)]
unsafe fn __typecheck(_: crate::linkme::__private36::Void) {
#[allow(clippy :: ref_option_ref)]
let __new =
|| -> fn() -> &'static crate::registry::AltrepRegistration
{ || &__MX_ALTREP_REG_BUFFER_RLOGICAL };
unsafe {
crate::linkme::DistributedSlice::private_typecheck(crate::registry::MX_ALTREP_REGISTRATIONS,
__new());
}
}
crate::registry::AltrepRegistration {
register: __mx_altrep_reg_builtin_Buffer_RLogical,
symbol: "__mx_altrep_reg_builtin_Buffer_RLogical",
}
};buffer_class!(
77 crate::RLogical,
78 i32,
79 __impl_altlogical_methods,
80 impl_inferbase_logical,
81 "Buffer_RLogical",
82 __mx_altrep_reg_builtin_Buffer_RLogical,
83 __MX_ALTREP_REG_BUFFER_RLOGICAL
84);