From afaadb32a7fa732e8f0d86357d424b98d1e48883 Mon Sep 17 00:00:00 2001 From: "Brian J. Burg" Date: Thu, 15 Nov 2012 18:27:38 -0800 Subject: [PATCH] Rewrite the Core Foundation wrapper system. --- data_provider.rs | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/data_provider.rs b/data_provider.rs index a38fd45..9013020 100644 --- a/data_provider.rs +++ b/data_provider.rs @@ -1,11 +1,10 @@ use cf = core_foundation; use cf::base::{ - AbstractCFType, AbstractCFTypeRef, CFIndex, - CFRelease, CFTypeID, CFTypeRef, + CFWrapper, }; use libc::{c_void, c_char, size_t}; @@ -29,37 +28,21 @@ pub impl CGDataProviderRef : AbstractCFTypeRef { pure fn as_type_ref(&self) -> CFTypeRef { *self as CFTypeRef } } -pub struct CGDataProvider { - obj: CGDataProviderRef, +pub type CGDataProvider = CFWrapper; - drop { - unsafe { - CFRelease(cast::transmute(self.obj)) - } - } +pub trait CGDataProviderMethods { + static fn new_from_buffer(buf: *u8, len: uint) -> CGDataProvider; } -pub impl CGDataProvider : AbstractCFType { - pure fn get_ref() -> CGDataProviderRef { self.obj } - - static fn wrap(obj: CGDataProviderRef) -> CGDataProvider { - CGDataProvider { obj: obj } - } - - static fn unwrap(wrapper: CGDataProvider) -> CGDataProviderRef { - wrapper.obj - } -} - -pub impl CGDataProvider { +pub impl CGDataProvider : CGDataProviderMethods { static fn new_from_buffer(buf: *u8, len: uint) -> CGDataProvider unsafe { - let obj = CGDataProviderCreateWithData( + let result = CGDataProviderCreateWithData( ptr::null(), cast::transmute(buf), len as size_t, ptr::null()); - return cf::base::wrap(obj); + CFWrapper::wrap_owned(result) } }