#[cfg(not(test))]
#[allow(unused)]
pub(crate) use std::panic::catch_unwind as handle_panic;
#[cfg(test)]
#[inline]
#[allow(unused)]
pub(crate) fn handle_panic<F: FnOnce() -> R, R>(f: F) -> std::thread::Result<R> {
Ok(f())
}
mod fixed_point;
mod id;
mod timestamp;
mod universal_plugin_id;
mod version;
pub use fixed_point::*;
pub use id::ClapId;
pub use timestamp::Timestamp;
pub use universal_plugin_id::{UniversalPluginAbi, UniversalPluginId};
pub use version::ClapVersion;
pub type Color = clap_color;
pub const TRANSPARENT_COLOR: Color = Color {
alpha: 0,
red: 0,
green: 0,
blue: 0,
};
use clap_sys::color::clap_color;
use std::ffi::c_void;
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
pub struct Cookie(*mut c_void);
impl Cookie {
#[inline]
pub const fn empty() -> Self {
Self(core::ptr::null_mut())
}
#[inline]
pub const fn from_raw(ptr: *mut c_void) -> Self {
Self(ptr)
}
#[inline]
pub const fn as_raw(&self) -> *mut c_void {
self.0
}
}
impl Default for Cookie {
#[inline]
fn default() -> Self {
Self::empty()
}
}
unsafe impl Send for Cookie {}
unsafe impl Sync for Cookie {}
#[inline]
pub(crate) const unsafe fn slice_from_external_parts<'a, T>(data: *const T, len: usize) -> &'a [T] {
if len == 0 {
return &[];
}
core::slice::from_raw_parts(data, len)
}
#[inline]
pub(crate) const unsafe fn slice_from_external_parts_mut<'a, T>(
data: *mut T,
len: usize,
) -> &'a mut [T] {
if len == 0 {
return &mut [];
}
core::slice::from_raw_parts_mut(data, len)
}
#[inline]
pub(crate) const fn check_clap_size_overflow(value: usize) {
#[cold]
#[inline(never)]
const fn too_big() -> ! {
panic!("CLAP size (u32) overflowed")
}
if value > u32::MAX as usize {
too_big()
}
}
#[inline]
pub(crate) const fn usize_to_clap_size(value: usize) -> u32 {
check_clap_size_overflow(value);
#[allow(clippy::cast_possible_truncation)] {
value as u32
}
}