Skip to main content

DirectoryOffset

Struct DirectoryOffset 

Source
pub struct DirectoryOffset<K: TiffKind> {
    pub offset: K::OffsetType,
    pub pointer: IfdPointer,
    /* private fields */
}
Expand description

The offset of an encoded directory in the file.

Both the offset and pointer field are a complete description of the start offset of the dictionary which is used to point to it. The struct also describes the extent covered by the encoding of the directory. The constructors new allow the checked conversion. Note that even though the offsets are public do not expect their information to propagate when modified.

Fields§

§offset: K::OffsetType

The start of the directory as a Tiff value.

This is a bit of a wart in the strongly typed design of the encoder. The value type must itself know how to be represented in the Tiff file but that may differ based on endianess as well as the offset size (u32 or BigTIFF’s u64). Thankfully we’re allowed to represent offsets with LONG or IFD in the usual case.

§pointer: IfdPointer

The start of the directory as a pure offset.

Implementations§

Source§

impl<K: TiffKind> DirectoryOffset<K>

Source

pub fn new(pointer: IfdPointer, dir: &Directory) -> TiffResult<Self>

Construct the directory pointer information from its raw offset.

Fails in these cases:

  • if start offset is too large to be represented with the chosen TIFF format, i.e. a value larger than u32::MAX with a standard tiff which is only valid in a BigTiff. This returns TiffError::IntSizeError.
  • the extent of the directory would overflow the file length. This returns a TiffError::UsageError.

The library does not validate the contents or offset in any way, it just performs the necessary math assuming the data is an accurate representation of existing content.

§Examples

If you have any custom way of writing a directory to a file that can not go through the usual TiffEncoder::extra_directory then you can reconstruct the offset information as long as you provide all the necessary data to the library. You can then use it as a parent directory, i.e. have the library overwrite its next field.

use tiff::{
    encoder::{TiffEncoder, DirectoryOffset},
    Directory,
    tags::IfdPointer,
};

let mut tiff = TiffEncoder::new(&mut file)?;

// … some custom data writes, assume we know where a directory was written
let known_offset = IfdPointer(1024);
let known_contents: Directory = reconstruction_of_your_directory();

let reconstructed = DirectoryOffset::new(known_offset, &known_contents)?;

// Now we can use it as if the directory was written by the `TiffEncoder` itself.
let mut chain = tiff.extra_directory()?;
chain.set_parent(&reconstructed);
chain.finish_with_offsets()?;

Trait Implementations§

Source§

impl<K: Clone + TiffKind> Clone for DirectoryOffset<K>
where K::OffsetType: Clone,

Source§

fn clone(&self) -> DirectoryOffset<K>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<K: Debug + TiffKind> Debug for DirectoryOffset<K>
where K::OffsetType: Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<K: Hash + TiffKind> Hash for DirectoryOffset<K>
where K::OffsetType: Hash,

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<K: PartialEq + TiffKind> PartialEq for DirectoryOffset<K>

Source§

fn eq(&self, other: &DirectoryOffset<K>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<K: Copy + TiffKind> Copy for DirectoryOffset<K>
where K::OffsetType: Copy,

Source§

impl<K: Eq + TiffKind> Eq for DirectoryOffset<K>
where K::OffsetType: Eq,

Source§

impl<K: TiffKind> StructuralPartialEq for DirectoryOffset<K>

Auto Trait Implementations§

§

impl<K> Freeze for DirectoryOffset<K>
where <K as TiffKind>::OffsetType: Freeze,

§

impl<K> RefUnwindSafe for DirectoryOffset<K>

§

impl<K> Send for DirectoryOffset<K>
where <K as TiffKind>::OffsetType: Send, K: Send,

§

impl<K> Sync for DirectoryOffset<K>
where <K as TiffKind>::OffsetType: Sync, K: Sync,

§

impl<K> Unpin for DirectoryOffset<K>
where <K as TiffKind>::OffsetType: Unpin, K: Unpin,

§

impl<K> UnsafeUnpin for DirectoryOffset<K>

§

impl<K> UnwindSafe for DirectoryOffset<K>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,