[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Exposing C data via userdata and tables
- From: Peter Colson <pcolson@...>
- Date: Wed, 23 Mar 2005 12:17:55 +1100
On 22/03/2005, at 6:02 PM, Wim Couwenberg wrote:
1). Whether there is any problem using user data objects in a table
like this (if there is then I guess I need the spooled file list user
data object of option a),
No problem at all. As long as the lifetime of your userdata (i.e. its
__gc behaviour) is correct, go right ahead! I'd prefer this over a
C/C++ implementation any day.
Good, didn't imagine there'd be a problem here.
2). For option b), whether I have to instantiate and manage the Lua
table internally in the package library to allow the OO-style access
above (SpooledFileList:getfile, etc.) or whether I could use a basic
Lua table from within Lua and tack on the SpooledFileList methods to
that Lua-based table? (My feeling is I don't imagine I could do this
in a clean encapsulated way using just a Lua table from within Lua
really, it needs to be managed in the package...)
My "style" in packaging C/C++ libs is to keep *as much* of the binding
in Lua itself. It is far easier to set-up and tweak a bunch of Lua
scripts than their C/C++ alternatives and just as powerful. I usually
put the C/C++ part as a "private" (light) userdata member in a Lua
object (i.e. a table). Then you can use plain Lua tables, metatables,
functions etc. to decorate your Lua object system. Moreover, the (now
considered private) userdata methods can be very low-level (just
export some existing API calls more or less 1-on-1) and make them
scripting friendly in the Lua object wrapper.
Yes, I get your point here. Whatever I was thinking of implementing in
C table-wise, OO-wise, can be done just as easily in Lua. So keep as
much as possible in the Lua scripts for ease of use. I guess coming
from the C/C++ side I was tending to think I needed to keep some things
on that side for overall consistency once I'd created/exposed the
SpooledFIle userdata objects from C. As it is it's really just the
SpooledFile userdata obects themselves that need be provided from C.
Regards,
Peter Colson.