use crate::util::constants::*;
mod active_plan;
mod collection;
mod object_model;
mod reference_glue;
mod scanning;
pub use self::active_plan::ActivePlan;
pub use self::collection::Collection;
pub use self::object_model::ObjectModel;
pub use self::reference_glue::ReferenceGlue;
pub use self::scanning::Scanning;
pub trait VMBinding
where
Self: Sized + 'static + Send + Sync + Default,
{
type VMObjectModel: ObjectModel<Self>;
type VMScanning: Scanning<Self>;
type VMCollection: Collection<Self>;
type VMActivePlan: ActivePlan<Self>;
type VMReferenceGlue: ReferenceGlue<Self>;
const ALIGNMENT_VALUE: usize = 0xdead_beef;
const LOG_MIN_ALIGNMENT: usize = LOG_BYTES_IN_INT as usize;
const MIN_ALIGNMENT: usize = 1 << Self::LOG_MIN_ALIGNMENT;
#[cfg(target_arch = "x86")]
const MAX_ALIGNMENT_SHIFT: usize = 1 + LOG_BYTES_IN_LONG as usize - LOG_BYTES_IN_INT as usize;
#[cfg(target_arch = "x86_64")]
const MAX_ALIGNMENT_SHIFT: usize = LOG_BYTES_IN_LONG as usize - LOG_BYTES_IN_INT as usize;
const MAX_ALIGNMENT: usize = Self::MIN_ALIGNMENT << Self::MAX_ALIGNMENT_SHIFT;
const ALLOC_END_ALIGNMENT: usize = 1;
}