* Arc Riley wrote, On 24/06/09 17:55:
> While don't you write an example of what your proposal would look like
> to the list?  I honestly don't understand how your proposed solution
> would work for non-gobject bindings.
Off my head, with possibly wrong syntax, possibly abuse of abstract in
interfaces:

*/* somewhere in the bowels of vala */*
*interface* IManagedMemory {
  *abstract* void ref_function();
  *abstract* void unref_function();
  *abstract static *void* alloc_function(int size);
  *abstract* void free_function();
}

*/* in the vapi for my python-ish object */*
*interface* IPythonManagedMemory : IManagedMemory {
  void ref_function() { Py_IncRef(this); }
  void unref_function() { Py_DecRef(this); }
  void* alloc_function(int size) { return PyObject_Malloc(size) }
  void free_function() { PyObject_Free(this); }
}

  [Compact]
  [CCode (lower_case_cprefix = "PyObject_"]
  public class Object : IPythonManagedMemory {
..

When the code generator wants to do any memory management operations, it
casts to IManagedMemory (if it can) and then goes with that. Shame there
is no IInterface to be involved as a cast helper, as with Microsofts
interface model, but a way around this deficiency is to have an
implementation if IManagedMemory which makes calls to the memory
management library I referred to which tracks the allocating module
based on the pointer value, so that the right referencer/de-referencer
can be called.

That way python could create a bitmap, or libgd could create a bitmap
and as long as they both used the memory management mallocer, it would
always know based on pointer value who it belonged to.

Sam
>
>
> On Wed, Jun 24, 2009 at 12:38 PM, Sam Liddicott <s...@liddicott.com
> <mailto:s...@liddicott.com>> wrote:
>
>     Yes, but it is much cleaner and nicer to express it as an
>     interface than a bunch of ccode attributes.
>
>     And not all structs of the same type are allocated by the same
>     subsystem or want freeing with the same free function.
>

_______________________________________________
Vala-list mailing list
Vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to