Rename GeckoArc macro so it sounds like it's useful for already-threadsafely-refcounted objects.

This commit is contained in:
Cameron McCormack 2016-08-12 17:00:36 +08:00
parent 614e9ca840
commit bd23790c09

View file

@ -7,17 +7,20 @@ use heapsize::HeapSizeOf;
use std::fmt::{self, Debug}; use std::fmt::{self, Debug};
// Defines an Arc-like type that manages a refcounted Gecko object stored // Defines an Arc-like type that manages a refcounted Gecko object stored
// in a ThreadSafeFooHolder smart pointer. Used in tandem with the // in a ThreadSafeFooHolder smart pointer (for those Gecko classes that
// NS_DECL_HOLDER_FFI_REFCOUNTING-defined types and functions in Gecko. // do not have thread-safe refcounting support) or as raw pointers (for
macro_rules! define_holder_arc { // those that do have thread-safe refcounting support). Used in tandem
($arc_type:ident, $name:ident, $holder_type:ident, $addref: ident, $release: ident) => ( // with the NS_DECL_(HOLDER|THREADSAFE)_FFI_REFCOUNTING-defined types and
// functions in Gecko.
macro_rules! define_arc {
($arc_type:ident, $name:ident, $gecko_type:ident, $addref: ident, $release: ident) => (
#[derive(PartialEq)] #[derive(PartialEq)]
pub struct $arc_type { pub struct $arc_type {
ptr: *mut $holder_type, ptr: *mut $gecko_type,
} }
impl $arc_type { impl $arc_type {
pub fn new(data: *mut $holder_type) -> $arc_type { pub fn new(data: *mut $gecko_type) -> $arc_type {
debug_assert!(!data.is_null()); debug_assert!(!data.is_null());
unsafe { $addref(data); } unsafe { $addref(data); }
$arc_type { $arc_type {
@ -25,7 +28,7 @@ macro_rules! define_holder_arc {
} }
} }
pub fn as_raw(&self) -> *mut $holder_type { self.ptr } pub fn as_raw(&self) -> *mut $gecko_type { self.ptr }
} }
unsafe impl Send for $arc_type {} unsafe impl Send for $arc_type {}
@ -55,7 +58,7 @@ macro_rules! define_holder_arc {
) )
} }
define_holder_arc!(GeckoArcPrincipal, Principal, ThreadSafePrincipalHolder, define_arc!(GeckoArcPrincipal, Principal, ThreadSafePrincipalHolder,
Gecko_AddRefPrincipalArbitraryThread, Gecko_ReleasePrincipalArbitraryThread); Gecko_AddRefPrincipalArbitraryThread, Gecko_ReleasePrincipalArbitraryThread);
define_holder_arc!(GeckoArcURI, URI, ThreadSafeURIHolder, define_arc!(GeckoArcURI, URI, ThreadSafeURIHolder,
Gecko_AddRefURIArbitraryThread, Gecko_ReleaseURIArbitraryThread); Gecko_AddRefURIArbitraryThread, Gecko_ReleaseURIArbitraryThread);