;; 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")
"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"))
;; 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")
(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