Construct 1.10 released
tomerfiliba at gmail.com
tomerfiliba at gmail.com
Sat Apr 1 16:39:07 CEST 2006
what's Construct
----------------------------
a library for parsing and building of data structures, at the
bit-level, in a declarative manner (no procedural code needed).
site
----------------------------
get it at http://pyconstruct.sourceforge.net
what' news
----------------------------
* two bug fixes: forgot to define two exception classes
* new builtins:
- Pass - a "do nothing" construct, useful for the default arguments
to Switch, etc.
- If - a conditional construct, that executes the sub-construct
only if some meta-condition is satisfied
- Embed - embeds a Struct into another Struct. see example below.
- LazyBind - lazy-binds a construct, so you can be define recursive
constructs. see example.
- Float - IEEE754 floating point implementation. this release only
supports parsing of floats, not building them, but i thought its useful
enough by itself. a later release will address the building problem.
* improved the LV construct
* removed the TLV construct (it's pointless to have it as a builtin)
* added get_size() which returns the size of a 'normal' (non-meta)
construct,
example
----------------------------
to_embed = Struct("blah",
UInt8("a"),
UInt8("b"),
UInt8("c"),
)
struct1 = Struct("struct1",
to_embed,
UInt8("x"),
)
struct2 = Struct("struct2",
Embed(to_embed),
UInt8("x"),
)
#>>> print struct1.parse("xabc")
#Container:
# blah = Container:
# a = 120
# b = 97
# c = 98
# x = 99
#>>> print struct2.parse("xabc")
#Container:
# a = 120
# b = 97
# c = 98
# x = 99
#>>> print struct1.get_size()
#32
#>>> print struct2.get_size()
#32
my_linked_list = Struct("linked_list",
UInt8("data"),
UInt8("has_next"),
If("_.has_next",
LazyBind("next", "my_linked_list", globals())
)
)
#>>> print my_linked_list.parse("A\x01B\x01C\x01D\x00")
#Container:
# data = 65
# has_next = 1
# next = Container:
# data = 66
# has_next = 1
# next = Container:
# data = 67
# has_next = 1
# next = Container:
# data = 68
# has_next = 0
# next = None
-tomer
More information about the Python-announce-list
mailing list