Skip to main content

VirtualReturn

Trait VirtualReturn 

Source
pub trait VirtualReturn: Sized {
    type Raw;

    // Required method
    fn from_raw(raw: Self::Raw) -> Self;
}
Expand description

How a value comes back from a C++ virtual call, and what to declare the foreign function as returning to receive it safely.

A C++ function returning bool, uint8_t or a 16-bit integer sets only the low part of EAX; the rest of the register is left as it was. The official IVehicle::isOccupied() on Windows ORs two pointers into EAX and then setne %al — true comes back as 0x????..01. Rust, told the function returns bool, assumes the register holds exactly 0 or 1, and a bool with any other bit pattern is undefined behaviour: a comparison may read the whole register and answer wrongly, with nothing to show for it.

So narrow types are received as the full register (Raw) and narrowed in Rust, where truncation is defined. Everything else comes back as it is.

Required Associated Types§

Source

type Raw

The type the foreign function is declared to return.

Required Methods§

Source

fn from_raw(raw: Self::Raw) -> Self

The value the caller sees.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl VirtualReturn for ()

Source§

impl VirtualReturn for bool

Source§

impl VirtualReturn for f32

Source§

impl VirtualReturn for f64

Source§

impl VirtualReturn for i8

Source§

impl VirtualReturn for i16

Source§

impl VirtualReturn for i32

Source§

impl VirtualReturn for i64

Source§

impl VirtualReturn for isize

Source§

impl VirtualReturn for u8

Source§

impl VirtualReturn for u16

Source§

impl VirtualReturn for u32

Source§

impl VirtualReturn for u64

Source§

impl VirtualReturn for usize

Source§

impl<T> VirtualReturn for *const T

Source§

impl<T> VirtualReturn for *mut T

Implementors§

Source§

impl VirtualReturn for ActorSpawnData

Source§

impl VirtualReturn for ConsoleCommandSenderData

Source§

impl VirtualReturn for GTAQuat

Source§

impl VirtualReturn for GangZonePos

Source§

impl VirtualReturn for LegacyDBResult

Source§

impl VirtualReturn for NetworkID

Source§

impl VirtualReturn for ObjectAttachmentData

Source§

impl VirtualReturn for ObjectAttachmentSlotData

Source§

impl VirtualReturn for ObjectMoveData

Source§

impl VirtualReturn for PeerAddress

Source§

impl VirtualReturn for PeerNetworkData

Source§

impl VirtualReturn for PeerRequestParams

Source§

impl VirtualReturn for PlayerAimData

Source§

impl VirtualReturn for PlayerAnimationData

Source§

impl VirtualReturn for PlayerClass

Source§

impl VirtualReturn for PlayerKeyData

Source§

impl VirtualReturn for PlayerSpectateData

Source§

impl VirtualReturn for PlayerSurfingData

Source§

impl VirtualReturn for TextLabelAttachmentData

Source§

impl VirtualReturn for Vector3

Source§

impl VirtualReturn for Vector4

Source§

impl VirtualReturn for VehicleDriverSyncPacket

Source§

impl VirtualReturn for VehicleParams

Source§

impl VirtualReturn for VehiclePassengerSyncPacket

Source§

impl VirtualReturn for VehicleSpawnData

Source§

impl VirtualReturn for VehicleTrailerSyncPacket

Source§

impl VirtualReturn for VehicleUnoccupiedSyncPacket

Source§

impl VirtualReturn for WeaponSlotData

Source§

impl<A, B> VirtualReturn for Pair<A, B>

Source§

type Raw = Pair<A, B>