lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On 4/15/2010 10:44 AM, Jerome Vuarand wrote:

I've written such a high level library : http://lunary.luaforge.net/

You can describe structures with named fields with several methods.
Your Pascal string example though has its own built-in type
(sizedbuffer). Here is a short example for a structure with a few
fields :

local str = file:read("*a")
local position = serial.read.struct(serial.buffer(str), {
     {'x', 'float', 'le'},
     {'y', 'float', 'le'},
     {'angle', 'uint16', 'le'},
})

The call to serial.buffer is to embed the string into a "stream"
object (I guess I could make that embedding automatic in a future
version).

That looks good. Though it's still stream oriented and I was thinking of late parsing where the data object keeps the string intact and only unpacks the necessary bytes when indexed. At least for structs with known sizes. Throw in a variable-length field and you're back to stream parsing.

You have 64-bit integers on the to-do list. Feel free to copy the implementation I used in larc. (And if you think something like "64bit integer" or "integer.64" would be better, I'm willing to change.)

Anyway, I made a list of the struct-like libraries I knew of and added it to http://lua-users.org/wiki/ReadWriteFormat including the sample code from the recent questions about reading floats. Any other packing/unpacking tips can go there.

--
- tom
telliamed@whoopdedo.org