Without look at the details of everything, I think I understand (and may agree) with what Dimitry is saying.
getOffset / getNullOffset are very util to get offsets described by the engine. But when the user is passing them to the engine, it's a duplicated information that should be in sync with the offsets calculated internally, and currently is not even validated. A possible solution may be to separate offset calculation from IMessageMetadata. Something like: IMessageMetadata* mm = ... unsigned offsets[5], nullOffsets[5]; IUtil* util = dispatcher->getUtil(); util->getOffsets(mm, offsets, nullOffsets, 5); // walk message by types/lengths and calculate That is, decouple offset calculation (to get them when engine describe a message) or to let the engine calculate them internally. Again, I'm not looking in details, for example, message macros, external routines and every thing. Adriano ------------------------------------------------------------------------------ Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. Written by three acclaimed leaders in the field, this first edition is now available. Download your free book today! http://p.sf.net/sfu/13534_NeoTech Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel