use crate::plan::CopyContext;
use crate::util::{Address, ObjectReference};
use crate::vm::VMBinding;
use crate::AllocationSemantics;
pub trait ObjectModel<VM: VMBinding> {
const GC_BYTE_OFFSET: isize = 0;
fn copy(
from: ObjectReference,
semantics: AllocationSemantics,
copy_context: &mut impl CopyContext,
) -> ObjectReference;
fn copy_to(from: ObjectReference, to: ObjectReference, region: Address) -> Address;
fn get_reference_when_copied_to(from: ObjectReference, to: Address) -> ObjectReference;
fn get_current_size(object: ObjectReference) -> usize;
fn get_type_descriptor(reference: ObjectReference) -> &'static [i8];
fn object_start_ref(object: ObjectReference) -> Address;
fn ref_to_address(object: ObjectReference) -> Address;
fn dump_object(object: ObjectReference);
}