[Spice-devel] [PATCH v3 13/51] Add new_ett function to be able to create new trees
Christophe Fergeau
cfergeau at redhat.com
Thu Jul 23 06:12:56 PDT 2015
On Tue, Jul 21, 2015 at 05:45:43PM +0100, Frediano Ziglio wrote:
> Use an array to declare tree items instead of allocating it statically.
> This save a bit of memory and it also generate smaller code to read.
'generates'
> A tree in wireshark represent an item which could be expanded.
'represents'
> Possibly wireshark is using these registrations to save expansion
> state in the user interface.
(I can adjust the logs before pushing actually if that's more convenient
for you).
Christophe
>
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> codegen/dissector_test.c | 13 +++++++++++++
> python_modules/dissector.py | 28 ++++++++++++++++++++++++++++
> 2 files changed, 41 insertions(+)
>
> diff --git a/codegen/dissector_test.c b/codegen/dissector_test.c
> index 6189da0..3212655 100644
> --- a/codegen/dissector_test.c
> +++ b/codegen/dissector_test.c
> @@ -13,9 +13,11 @@
> enum {
> first_hf_registered = 0x10000,
> first_ei_registered = 0x20000,
> + first_tree_registered = 0x30000,
> };
> static int last_hf_registered = first_hf_registered - 1;
> static int last_ei_registered = first_ei_registered - 1;
> +static int last_tree_registered = first_tree_registered - 1;
>
> WS_DLL_PUBLIC void
> proto_register_field_array(const int parent, hf_register_info *hf, const int num_records)
> @@ -31,6 +33,17 @@ proto_register_field_array(const int parent, hf_register_info *hf, const int num
> }
>
> WS_DLL_PUBLIC void
> +proto_register_subtree_array(gint *const *indices, const int num_indices)
> +{
> + int i;
> + assert(num_indices >= 0);
> + for (i = 0; i < num_indices; ++i) {
> + assert(indices && *indices[i] == -1);
> + *indices[i] = ++last_tree_registered;
> + }
> +}
> +
> +WS_DLL_PUBLIC void
> expert_register_field_array(expert_module_t* module, ei_register_info *ei, const int num_records)
> {
> int i;
> diff --git a/python_modules/dissector.py b/python_modules/dissector.py
> index 45f8737..52234fc 100644
> --- a/python_modules/dissector.py
> +++ b/python_modules/dissector.py
> @@ -2,6 +2,22 @@
> from . import codegen
> import re
>
> +
> +# generate a new tree identifier
> +ett_writer = None
> +ett_num = 0
> +def new_ett(writer):
> + global ett_writer
> + global ett_num
> +
> + if ett_num and ett_num % 16 == 0:
> + ett_writer.newline()
> + name = 'etts[%u]' % ett_num
> + ett_num = ett_num + 1
> + ett_writer.write('-1, ')
> + return name
> +
> +
> hf_writer = None
> hf_defs = None
>
> @@ -54,6 +70,10 @@ def write_protocol_definitions(writer):
> writer.newline()
> writer.function('spice_register_fields', 'void', 'int proto, expert_module_t* expert_proto')
>
> + writer.variable_def('guint', 'n');
> + writer.variable_def('gint *', 'ett[array_length(etts)]')
> + writer.newline()
> +
> writer.write("static hf_register_info hf[] = ")
> writer.begin_block()
> hf_defs = writer.get_subwriter()
> @@ -66,17 +86,25 @@ def write_protocol_definitions(writer):
> writer.end_block(semicolon = True)
> writer.newline()
>
> + with writer.for_loop('n', 'array_length(etts)'):
> + writer.assign('ett[n]', '&etts[n]')
> +
> writer.statement('proto_register_field_array(proto, hf, array_length(hf))')
> + writer.statement('proto_register_subtree_array(ett, array_length(etts))')
> writer.statement('expert_register_field_array(expert_proto, ei, array_length(ei))')
> writer.end_block()
>
>
> def write_protocol_parser(writer, proto):
> global hf_writer
> + global ett_writer
>
> write_parser_helpers(writer)
>
> # put fields declaration first
> + with writer.block('static gint etts[] =', semicolon=True) as scope:
> + ett_writer = scope
> + writer.newline()
> hf_writer = writer.get_subwriter()
>
> # put fields definition at last
> --
> 2.1.0
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150723/601ef41f/attachment.sig>
More information about the Spice-devel
mailing list