• Daniel P. Berrange's avatar
    qdict: implement a qdict_crumple method for un-flattening a dict · 603476c2
    Daniel P. Berrange authored
    The qdict_flatten() method will take a dict whose elements are
    further nested dicts/lists and flatten them by concatenating
    keys.
    
    The qdict_crumple() method aims to do the reverse, taking a flat
    qdict, and turning it into a set of nested dicts/lists. It will
    apply nesting based on the key name, with a '.' indicating a
    new level in the hierarchy. If the keys in the nested structure
    are all numeric, it will create a list, otherwise it will create
    a dict.
    
    If the keys are a mixture of numeric and non-numeric, or the
    numeric keys are not in strictly ascending order, an error will
    be reported.
    
    As an example, a flat dict containing
    
     {
       'foo.0.bar': 'one',
       'foo.0.wizz': '1',
       'foo.1.bar': 'two',
       'foo.1.wizz': '2'
     }
    
    will get turned into a dict with one element 'foo' whose
    value is a list. The list elements will each in turn be
    dicts.
    
     {
       'foo': [
         { 'bar': 'one', 'wizz': '1' },
         { 'bar': 'two', 'wizz': '2' }
       ],
     }
    
    If the key is intended to contain a literal '.', then it must
    be escaped as '..'. ie a flat dict
    
      {
         'foo..bar': 'wizz',
         'bar.foo..bar': 'eek',
         'bar.hello': 'world'
      }
    
    Will end up as
    
      {
         'foo.bar': 'wizz',
         'bar': {
            'foo.bar': 'eek',
            'hello': 'world'
         }
      }
    
    The intent of this function is that it allows a set of QemuOpts
    to be turned into a nested data structure that mirrors the nesting
    used when the same object is defined over QMP.
    Reviewed-by: 's avatarEric Blake <eblake@redhat.com>
    Reviewed-by: 's avatarKevin Wolf <kwolf@redhat.com>
    Reviewed-by: 's avatarMarc-André Lureau <marcandre.lureau@redhat.com>
    Signed-off-by: 's avatarDaniel P. Berrange <berrange@redhat.com>
    Message-Id: <1475246744-29302-3-git-send-email-berrange@redhat.com>
    Reviewed-by: 's avatarMarkus Armbruster <armbru@redhat.com>
    [Parameter recursive dropped along with its tests; whitespace style
    touched up]
    Signed-off-by: 's avatarMarkus Armbruster <armbru@redhat.com>
    603476c2
Name
Last commit
Last update
..
Makefile.objs Loading commit data...
json-lexer.c Loading commit data...
json-parser.c Loading commit data...
json-streamer.c Loading commit data...
qbool.c Loading commit data...
qdict.c Loading commit data...
qfloat.c Loading commit data...
qint.c Loading commit data...
qjson.c Loading commit data...
qlist.c Loading commit data...
qnull.c Loading commit data...
qobject.c Loading commit data...
qstring.c Loading commit data...