(in-package :gobject)
-(defgeneric release (object))
+(defgeneric release (object)
+ (:documentation "Manually frees the Lisp reference to the @code{object}. Probably should not be called.
+
+@arg[object]{an instance of @class{g-object}}"))
(defmethod release ((object null)))
(defun release* (&rest objects)
+ "Calls @fun{release} on all objects in @code{objects}
+
+@arg[objects]{a list of instances of @class{g-object}}"
(declare (dynamic-extent objects))
(loop
for object in objects
(defmacro using* ((&rest bindings) &body body)
(using-expand bindings body))
-
-(defvar *registered-stable-pointers* (make-array 0 :adjustable t :fill-pointer t))
-
-(defun allocate-stable-pointer (thing)
- (let ((id (find-fresh-id)))
- (setf (aref *registered-stable-pointers* id) thing)
- (make-pointer id)))
-
-(defun free-stable-pointer (stable-pointer)
- (setf (aref *registered-stable-pointers* (pointer-address stable-pointer)) nil))
-
-(defun get-stable-pointer-value (stable-pointer)
- (when (<= 0 (pointer-address stable-pointer) (length *registered-stable-pointers*))
- (aref *registered-stable-pointers* (pointer-address stable-pointer))))
-
-(defun find-fresh-id ()
- (or (position nil *registered-stable-pointers*)
- (progn (vector-push-extend nil *registered-stable-pointers*)
- (1- (length *registered-stable-pointers*)))))
-
-(defmacro with-stable-pointer ((ptr expr) &body body)
- `(let ((,ptr (allocate-stable-pointer ,expr)))
- (unwind-protect
- (progn ,@body)
- (free-stable-pointer ,ptr))))
\ No newline at end of file