use super::super::Handle;
use super::refcount::with_obj;
use super::types::{PdfObjHandle, PdfObjType};
#[unsafe(no_mangle)]
pub extern "C" fn pdf_objcmp(_ctx: Handle, a: PdfObjHandle, b: PdfObjHandle) -> i32 {
let obj_a = with_obj(a, None, |o| Some(o.obj_type.clone()));
let obj_b = with_obj(b, None, |o| Some(o.obj_type.clone()));
match (obj_a, obj_b) {
(Some(a_type), Some(b_type)) => i32::from(!a_type.shallow_eq(&b_type)),
_ => 1,
}
}
#[unsafe(no_mangle)]
pub extern "C" fn pdf_name_eq(_ctx: Handle, a: PdfObjHandle, b: PdfObjHandle) -> i32 {
let name_a = with_obj(a, None, |o| match &o.obj_type {
PdfObjType::Name(s) => Some(s.clone()),
_ => None,
});
let name_b = with_obj(b, None, |o| match &o.obj_type {
PdfObjType::Name(s) => Some(s.clone()),
_ => None,
});
match (name_a, name_b) {
(Some(a_name), Some(b_name)) => i32::from(a_name == b_name),
_ => 0,
}
}
#[cfg(test)]
mod tests {
use super::super::create::{pdf_new_int, pdf_new_name};
use super::*;
use std::ffi::CString;
#[test]
fn test_pdf_objcmp() {
let int1 = pdf_new_int(0, 42);
let int2 = pdf_new_int(0, 42);
let int3 = pdf_new_int(0, 99);
assert_eq!(pdf_objcmp(0, int1, int2), 0);
assert_eq!(pdf_objcmp(0, int1, int3), 1);
}
#[test]
fn test_pdf_name_eq_same() {
let name1 = pdf_new_name(0, CString::new("Type").unwrap().as_ptr());
let name2 = pdf_new_name(0, CString::new("Type").unwrap().as_ptr());
assert_eq!(pdf_name_eq(0, name1, name2), 1);
}
#[test]
fn test_pdf_name_eq_different() {
let name1 = pdf_new_name(0, CString::new("Type").unwrap().as_ptr());
let name2 = pdf_new_name(0, CString::new("Other").unwrap().as_ptr());
assert_eq!(pdf_name_eq(0, name1, name2), 0);
}
#[test]
fn test_pdf_name_eq_non_name() {
let name1 = pdf_new_name(0, CString::new("Type").unwrap().as_ptr());
let int_obj = pdf_new_int(0, 42);
assert_eq!(pdf_name_eq(0, name1, int_obj), 0);
assert_eq!(pdf_name_eq(0, int_obj, name1), 0);
}
}