[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: Light User Data
- From: "Jeff Petkau" <jeffp@...>
- Date: Fri, 6 Sep 2002 11:40:24 -0700
Benoit Germain's clever idea:
> I keep in the registry a unicity table where a key is a light
> userdata with the pointer value, and the value is the 'heavy'
> userdata with the same pointer. Each time I need to provide a
> LUA script with a 'heavy' userdata (so that the variable has
> a metatable and its methods can be accessed), I lookup the
> light pointer value in the registry and fetch the corresponding
> 'heavy' userdata. If I don't find it I add it. That way, for
> each resource instance the library can provide there is always
> exactly one 'heavy' userdata that references it.
...
> Of course, this reference in the unicity table means that this
> 'heavy' userdata can never be garbage collected unless some
> destroy mechanism is explicitly invoked by the script, in which
> case the unicity table entry is cleared.
If you want to allow the heavy userdatas to be garbage
collected, you could just give your registry a metatable
with weakmode="v".
--Jeff