X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/clg/blobdiff_plain/4c32c9363ce60110e1731632ebed48cd3750a114..b0e796e957e197eebeb51e4776b2638d34a957e3:/glib/gparam.lisp?ds=sidebyside diff --git a/glib/gparam.lisp b/glib/gparam.lisp index 9e7b91c..10bdc7e 100644 --- a/glib/gparam.lisp +++ b/glib/gparam.lisp @@ -15,30 +15,39 @@ ;; License along with this library; if not, write to the Free Software ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -;; $Id: gparam.lisp,v 1.6 2002-03-19 17:01:42 espen Exp $ +;; $Id: gparam.lisp,v 1.8 2004-10-28 09:33:56 espen Exp $ (in-package "GLIB") (deftype gvalue () 'pointer) +(eval-when (:compile-toplevel :load-toplevel :execute) + (defbinding (size-of-gvalue "size_of_gvalue") () unsigned-int)) + (defconstant +gvalue-size+ (+ (size-of 'type-number) (* 2 (size-of 'double-float)))) +(defconstant +gvalue-size+ #.(size-of-gvalue)) + (defconstant +gvalue-value-offset+ (size-of 'type-number)) (defbinding (gvalue-init "g_value_init") () nil + (value gvalue) (type type-number)) -(defun gvalue-new (type) +(defbinding (gvalue-unset "g_value_unset") () nil + (value gvalue)) + + +(defun gvalue-new (type &optional (value nil value-p)) (let ((gvalue (allocate-memory +gvalue-size+))) - (setf (system:sap-ref-32 gvalue 0) type) -; (gvalue-init (type-number-of type)) + (gvalue-init gvalue (find-type-number type)) + (when value-p + (gvalue-set gvalue value)) gvalue)) -(defun gvalue-free (gvalue free-content) +(defun gvalue-free (gvalue &optional unset-p) (unless (null-pointer-p gvalue) - (when free-content - (funcall - (intern-destroy-function (gvalue-type gvalue)) - gvalue +gvalue-value-offset+)) + (when unset-p + (gvalue-unset gvalue)) (deallocate-memory gvalue))) (defun gvalue-type (gvalue) @@ -56,6 +65,11 @@ (defun gvalue-set (gvalue value) value) +(deftype-method unreference-alien gvalue (type-spec location) + `(gvalue-free ,location nil)) + + + (deftype param-flag-type () '(flags (:readable 1) @@ -65,7 +79,8 @@ (deftype param-flag-type () (:lax-validation 16) (:private 32))) -(eval-when (:compile-toplevel :load-toplevel :execute) +;(eval-when (:compile-toplevel :load-toplevel :execute) +;; TODO: rename to param-spec (defclass param (ginstance) ((name :allocation :alien @@ -95,7 +110,7 @@ (defclass param (ginstance) :type string)) (:metaclass ginstance-class) (:ref "g_param_spec_ref") - (:unref "g_param_spec_unref"))) + (:unref "g_param_spec_unref"));) (defclass param-char (param) @@ -303,6 +318,3 @@ (defclass param-value-array (param) (defclass param-object (param) () (:metaclass ginstance-class)) - - -