New class REF-COUNTED-OBJECT
authorespen <espen>
Fri, 12 Jan 2007 10:26:44 +0000 (10:26 +0000)
committerespen <espen>
Fri, 12 Jan 2007 10:26:44 +0000 (10:26 +0000)
gffi/defpackage.lisp
gffi/proxy.lisp

index 439dbee..90132fb 100644 (file)
@@ -20,7 +20,7 @@
 ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-;; $Id: defpackage.lisp,v 1.8 2007-01-02 16:03:22 espen Exp $
+;; $Id: defpackage.lisp,v 1.9 2007-01-12 10:26:44 espen Exp $
 
 (defpackage "GFFI"
   (:use "COMMON-LISP" "AUTOEXPORT" "PKG-CONFIG" "CLG-UTILS")
@@ -91,6 +91,6 @@
           "EFFECTIVE-ALIEN-SLOT-DEFINITION" 
           "DIRECT-VIRTUAL-ALIEN-SLOT-DEFINITION"
           "EFFECTIVE-VIRTUAL-ALIEN-SLOT-DEFINITION"
-          "FOREIGN-SIZE" "REF" "UNREF"
+          "FOREIGN-SIZE" "REF" "UNREF" "REF-COUNTED-OBJECT"
           "ENSURE-PROXY-INSTANCE" "MAKE-PROXY-INSTANCE"  "STRUCT" 
           "STRUCT-CLASS" "STATIC-STRUCT-CLASS" "INLINED" "ADJUST-OFFSET"))
index 041670a..4173a1c 100644 (file)
@@ -20,7 +20,7 @@
 ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-;; $Id: proxy.lisp,v 1.5 2006-09-29 13:14:19 espen Exp $
+;; $Id: proxy.lisp,v 1.6 2007-01-12 10:26:44 espen Exp $
 
 (in-package "GFFI")
 
@@ -499,6 +499,20 @@ object at the give location."))
     (cache-instance instance)
     instance))
 
+;;;; Superclass for ref-counted objects
+
+(defclass ref-counted-object (proxy)
+  ()
+  (:metaclass proxy-class))
+
+(define-type-method from-alien-form ((type ref-counted-object) form 
+                                    &key (ref :copy))
+  (call-next-method type form :ref ref))
+
+(define-type-method from-alien-function ((type ref-counted-object) 
+                                        &key (ref :copy))
+  (call-next-method type :ref ref))
+
 
 ;;;; Superclasses for wrapping of C structures