Ping then, for 1.7 :) (Don't stone me, I don't have the slightest clue about the 1.7 backlog. I'm fine with this being tacked to the end, just don't let it fall through the cracks.)
Thanks Laszlo On 07/22/13 23:07, Laszlo Ersek wrote: > rfc->v1: > - addressed Paolo's comments for patches 1 and 2, > - patches 7 and 8 are new (unit tests), > - updated the cover letter to take native lists into account, plus > cleaned it up. > > Consider the following QAPI schema fragment, for the purpose of command > line parsing with OptsVisitor: > > { 'union': 'NumaOptions', > 'data': { > 'node': 'NumaNodeOptions', > 'mem' : 'NumaMemOptions' }} > > { 'type': 'NumaNodeOptions', > 'data': { > '*nodeid': 'int', > '*cpus' : ['uint16'] }} > > { 'type': 'NumaMemOptions', > 'data': { > '*nodeid': 'int', > '*size' : 'size' }} > > (Commit eb7ee2cb ("qapi: introduce OptsVisitor") had originally > documented OptsVisitor's general schema requirements for parsing > repeated options such that the list element type had to be a struct with > one mandatory scalar field. Accordingly, the RFC version of this series > required for interval flattening that this underlying scalar type be an > integer type. However, since commit a678e26c ("qapi: pad GenericList > value fields to 64 bits") we've had reliable native lists; OptsVisitor > turns out to support them automatically.) > > OptsVisitor already accepts the following command line with the above > schema: > > -numa node,nodeid=3,cpus=0,cpus=1,cpus=2,cpus=6,cpus=7,cpus=8 > > Paolo suggested in > <http://thread.gmane.org/gmane.comp.emulators.qemu/222589/focus=222732> > that OptsVisitor should allow the following shortcut: > > -numa node,nodeid=3,cpus=0-2,cpus=6-8 > > and that the code processing the "cpus" list should encounter all six > elements (0, 1, 2, 6, 7, 8) individually. > > The series implements this feature. Both signed and unsigned values and > intervals are supported in general: > > * 0 (zero) > * 1-5 (one to five) > * 4-4 (four to four, range with one element) > * -2 (minus two) > * -5-8 (minus five to plus eight) > * -9--6 (minus nine to minus six) > > The restrictions imposed by the native list element's signedness and > size (in the above schema example, 'uint16') are enforced element-wise > as usual. That is, for 'uint16', the command line option > > -numa node,nodeid=3,cpus=65534-65537 > > is equivalent to > > -numa node,nodeid=3,cpus=65534,cpus=65535,cpus=65536,cpus=65537 > > and visit_type_uint16() [qapi/qapi-visit-core.c] will catch the first > element (= 65536) that has been parsed by opts_type_int() but cannot be > represented as 'uint16'. > > Laszlo Ersek (8): > OptsVisitor: introduce basic list modes > OptsVisitor: introduce list modes for interval flattening > OptsVisitor: opts_type_int(): recognize intervals when LM_IN_PROGRESS > OptsVisitor: rebase opts_type_uint64() to parse_uint_full() > OptsVisitor: opts_type_uint64(): recognize intervals when > LM_IN_PROGRESS > OptsVisitor: don't try to flatten overlong integer ranges > add "test-int128" to .gitignore > OptsVisitor: introduce unit tests, with test cases for range > flattening > > tests/Makefile | 6 +- > qapi-schema-test.json | 15 +++ > include/qapi/opts-visitor.h | 6 + > qapi/opts-visitor.c | 184 ++++++++++++++++++++++++----- > tests/test-opts-visitor.c | 275 > +++++++++++++++++++++++++++++++++++++++++++ > .gitignore | 2 + > 6 files changed, 456 insertions(+), 32 deletions(-) > create mode 100644 tests/test-opts-visitor.c > >