diff options
Diffstat (limited to 'third_party/rust/core-foundation/src/set.rs')
-rw-r--r-- | third_party/rust/core-foundation/src/set.rs | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/third_party/rust/core-foundation/src/set.rs b/third_party/rust/core-foundation/src/set.rs index eb1d357a03..641202de8d 100644 --- a/third_party/rust/core-foundation/src/set.rs +++ b/third_party/rust/core-foundation/src/set.rs @@ -9,13 +9,13 @@ //! An immutable bag of elements. +use core_foundation_sys::base::{kCFAllocatorDefault, CFRelease, CFTypeRef}; pub use core_foundation_sys::set::*; -use core_foundation_sys::base::{CFTypeRef, CFRelease, kCFAllocatorDefault}; -use base::{CFIndexConvertible, TCFType}; +use crate::base::{CFIndexConvertible, TCFType}; -use std::os::raw::c_void; use std::marker::PhantomData; +use std::os::raw::c_void; /// An immutable bag of elements. pub struct CFSet<T = *const c_void>(CFSetRef, PhantomData<T>); @@ -31,23 +31,31 @@ impl_CFTypeDescription!(CFSet); impl CFSet { /// Creates a new set from a list of `CFType` instances. - pub fn from_slice<T>(elems: &[T]) -> CFSet<T> where T: TCFType { + pub fn from_slice<T>(elems: &[T]) -> CFSet<T> + where + T: TCFType, + { unsafe { let elems: Vec<CFTypeRef> = elems.iter().map(|elem| elem.as_CFTypeRef()).collect(); - let set_ref = CFSetCreate(kCFAllocatorDefault, - elems.as_ptr(), - elems.len().to_CFIndex(), - &kCFTypeSetCallBacks); + let set_ref = CFSetCreate( + kCFAllocatorDefault, + elems.as_ptr(), + elems.len().to_CFIndex(), + &kCFTypeSetCallBacks, + ); TCFType::wrap_under_create_rule(set_ref) } } } impl<T> CFSet<T> { - /// Get the number of elements in the CFSet + /// Get the number of elements in the `CFSet`. pub fn len(&self) -> usize { - unsafe { - CFSetGetCount(self.0) as usize - } + unsafe { CFSetGetCount(self.0) as usize } + } + + /// Returns `true` if the set contains no elements. + pub fn is_empty(&self) -> bool { + self.len() == 0 } } |