Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/rust/windows-core/src/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 838 B image not shown  

Quelle  scoped_interface.rs   Sprache: unbekannt

 
use super::*;
use core::ffi::c_void;
use core::marker::PhantomData;

#[doc(hidden)]
#[repr(C)]
pub struct ScopedHeap {
    pub vtable: *const c_void,
    pub this: *const c_void,
}

#[doc(hidden)]
pub struct ScopedInterface<'a, T: Interface> {
    interface: T,
    lifetime: PhantomData<&'a T>,
}

impl<'a, T: Interface> ScopedInterface<'a, T> {
    pub fn new(interface: T) -> Self {
        Self {
            interface,
            lifetime: PhantomData,
        }
    }
}

impl<'a, T: Interface> core::ops::Deref for ScopedInterface<'a, T> {
    type Target = T;

    fn deref(&self) -> &T {
        &self.interface
    }
}

impl<'a, T: Interface> Drop for ScopedInterface<'a, T> {
    fn drop(&mut self) {
        unsafe {
            let _ = Box::from_raw(self.interface.as_raw() as *const _ as *mut ScopedHeap);
        }
    }
}

[ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ]