use crate::tiff::errors::TiffResult;
use crate::tiff::ifd::IFDEntry;
use std::collections::HashSet;
use std::io::Write;
pub fn align_to_4_bytes(offset: u64) -> u64 {
let remainder = offset % 4;
if remainder == 0 {
offset
} else {
offset + (4 - remainder)
}
}
pub fn write_padding(writer: &mut impl Write, data_len: usize) -> TiffResult<()> {
let padding = (4 - (data_len % 4)) % 4;
if padding > 0 {
writer.write_all(&vec![0u8; padding])?;
}
Ok(())
}
pub fn get_unique_sorted_entries(entries: &[IFDEntry]) -> Vec<IFDEntry> {
let mut sorted_entries = entries.to_vec();
sorted_entries.sort_by_key(|entry| entry.tag);
let mut unique_entries = Vec::new();
let mut seen_tags = HashSet::new();
for entry in sorted_entries.iter().rev() {
if !seen_tags.contains(&entry.tag) {
seen_tags.insert(entry.tag);
unique_entries.push(entry.clone());
}
}
unique_entries.reverse();
unique_entries
}
pub fn calculate_padding(data_len: usize) -> usize {
(4 - (data_len % 4)) % 4
}