qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 5/9] qapi_sized_buffer


From: Stefan Berger
Subject: Re: [Qemu-devel] [PATCH 5/9] qapi_sized_buffer
Date: Wed, 13 Mar 2013 21:48:11 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120911 Thunderbird/15.0.1

On 03/13/2013 07:18 PM, mdroth wrote:
On Wed, Mar 13, 2013 at 06:00:24PM -0400, Stefan Berger wrote:
On 03/13/2013 04:52 PM, mdroth wrote:

Visitors don't have any knowledge of the data structures they're visiting
outside of what we tell them via the visit_*() API.

[...]

For example, a visitor for a 16-element array of:

typedef struct ComplexType {
     int32_t foo;
     char *bar;
} ComplexType;

would look something like:

visit_start_carray(v, ...); // instruct visitor how to calculate offsets
for (i = 0; i < 16; i++) {
     visit_type_ComplexType(v, ...) // instruct visitor how to handle elem
     visit_next_carray(v, ...); // instruct visitor to move to next offset
}
visit_end_carray(v, ...); // instruct visitor to finalize array

Given this example above, I think we will need the sized buffer. The sized buffer targets binary arrays and their encoding. If I was to encode an 'unsigned char[n]' (e.g., n=200) using n, or n/2 or n/4 loops like above breaking it apart in u8, u16 or u32 respectively I think this would 'not bed good' also considering the 2 bytes for tag and length being added by ASN.1 for every such datatype (u8,u16,u32). The sized buffer allows you to for example take a memory page and write it out in one chunk adding a few bytes of ASN.1 'decoration' around the actual data.

   Stefan




reply via email to

[Prev in Thread] Current Thread [Next in Thread]