1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
pub use CV_MAKETYPE as CV_MAKE_TYPE;

pub use affine3::*;
pub use boxed::*;
pub use input_output_array::*;
pub use mat::*;
pub use matx::*;
pub use point3::*;
pub use point::*;
pub use ptr::*;
pub use rect::*;
pub use size::*;
pub use sized::*;
pub use vec::*;
pub use vector::*;

macro_rules! valid_types {
	($trait: ident, $($rust_type: ty),+) => {
		/// This sealed trait is implemented for types that are valid to use in corresponding context
		pub trait $trait: ::num::traits::NumAssign + PartialOrd + Default + Copy + private::Sealed {}

		mod private {
			pub trait Sealed {}
		}

		$(
			impl $trait for $rust_type {}
			impl private::Sealed for $rust_type {}
		)+
	};
}

mod affine3;
mod boxed;
mod input_output_array;
mod mat;
mod matx;
mod point3;
mod point;
pub(crate)mod ptr;
mod rect;
mod size;
mod sized;
mod vec;
mod vector;

#[inline(always)]
pub const fn CV_MAT_DEPTH(flags: i32) -> i32 {
	#![allow(non_snake_case)]
	flags & crate::core::Mat_DEPTH_MASK
}

#[inline(always)]
pub const fn CV_MAKETYPE(depth: i32, cn: i32) -> i32 {
	#![allow(non_snake_case)]
	CV_MAT_DEPTH(depth) + ((cn - 1) << crate::core::CV_CN_SHIFT)
}