- first commit
This commit is contained in:
110
src/handle.rs
Normal file
110
src/handle.rs
Normal file
@@ -0,0 +1,110 @@
|
||||
use crate::misc::Ptr;
|
||||
use crate::sys::*;
|
||||
use std::mem::MaybeUninit;
|
||||
use std::ops::Deref;
|
||||
|
||||
|
||||
/// CZI-reader object.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct CziReader(pub (crate) CziReaderObjectHandle);
|
||||
|
||||
/// sub-block object.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct SubBlock(pub (crate) SubBlockObjectHandle);
|
||||
|
||||
/// input stream object.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct InputStream(pub (crate) InputStreamObjectHandle);
|
||||
|
||||
/// output stream object.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct OutputStream(pub (crate) OutputStreamObjectHandle);
|
||||
|
||||
/// memory allocation object - which is a pointer to a memory block, which must be
|
||||
/// freed with 'libCZI_Free'.
|
||||
/// TODO(JBL): this is not really used so far, should be removed I guess.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct MemoryAllocation(pub (crate) MemoryAllocationObjectHandle);
|
||||
|
||||
/// bitmap object.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Bitmap(pub (crate) BitmapObjectHandle);
|
||||
|
||||
/// metadata segment object.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct MetadataSegment(pub (crate) MetadataSegmentObjectHandle);
|
||||
|
||||
/// attachment object.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Attachment(pub (crate) AttachmentObjectHandle);
|
||||
|
||||
/// writer object.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct CziWriter(pub (crate) CziWriterObjectHandle);
|
||||
|
||||
/// single-channel-scaling-tile-accessor.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct SingleChannelScalingTileAccessor(pub (crate) SingleChannelScalingTileAccessorObjectHandle);
|
||||
|
||||
/// document info object.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct CziDocumentInfo(pub (crate) CziDocumentInfoHandle);
|
||||
|
||||
/// display settings object.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct DisplaySettings(pub (crate) DisplaySettingsHandle);
|
||||
|
||||
/// channel display settings object.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct ChannelDisplaySettings(pub (crate) ChannelDisplaySettingsHandle);
|
||||
|
||||
macro_rules! impl_struct {
|
||||
($($n:ident: $t:ty: $s:ty $(,)?)*) => {
|
||||
$(
|
||||
impl $t {
|
||||
#[allow(dead_code)]
|
||||
pub (crate) fn handle(&self) -> ObjectHandle { self.0 }
|
||||
}
|
||||
|
||||
impl Ptr for $t {
|
||||
type Pointer = $s;
|
||||
|
||||
unsafe fn assume_init(ptr: MaybeUninit<Self::Pointer>) -> Self {
|
||||
Self(unsafe { ptr.assume_init() })
|
||||
}
|
||||
|
||||
fn as_mut_ptr(&self) -> *mut Self::Pointer {
|
||||
&self.0 as *const _ as *mut _
|
||||
}
|
||||
|
||||
fn as_ptr(&self) -> *const Self::Pointer {
|
||||
&self.0 as *const _ as *const _
|
||||
}
|
||||
}
|
||||
|
||||
impl Deref for $t {
|
||||
type Target = ObjectHandle;
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
)*
|
||||
};
|
||||
}
|
||||
|
||||
impl_struct! {
|
||||
CziReader: CziReader: CziReaderObjectHandle,
|
||||
SubBlock: SubBlock: SubBlockObjectHandle,
|
||||
InputStream: InputStream: InputStreamObjectHandle,
|
||||
OutputStream: OutputStream: OutputStreamObjectHandle,
|
||||
MemoryAllocation: MemoryAllocation: MemoryAllocationObjectHandle,
|
||||
Bitmap: Bitmap: BitmapObjectHandle,
|
||||
MetadataSegment: MetadataSegment: MetadataSegmentObjectHandle,
|
||||
Attachment: Attachment: AttachmentObjectHandle,
|
||||
CziWriter: CziWriter: CziWriterObjectHandle,
|
||||
SingleChannelScalingTileAccessor: SingleChannelScalingTileAccessor: SingleChannelScalingTileAccessorObjectHandle,
|
||||
CziDocumentInfo: CziDocumentInfo: CziDocumentInfoHandle,
|
||||
DisplaySettings: DisplaySettings: DisplaySettingsHandle,
|
||||
ChannelDisplaySettings: ChannelDisplaySettings: ChannelDisplaySettingsHandle,
|
||||
}
|
||||
Reference in New Issue
Block a user