python api - vla - allow the user to pass in a normal python list 33/3233/2
authorGabriel Ganne <gabriel.ganne@qosmos.com>
Thu, 22 Sep 2016 19:00:17 +0000 (21:00 +0200)
committerOle Trøan <otroan@employees.org>
Wed, 26 Oct 2016 13:02:41 +0000 (13:02 +0000)
Only add support for named variable-length-arrays as some api fo not
follow the expected order of length preceding the value.

Change-Id: I4c22c9b3c05f23edb3edc1cbc445be87b0a69162
Signed-off-by: Gabriel Ganne <gabriel.ganne@qosmos.com>
vppapigen/pyvppapigen.py

index 75d6a14..675712a 100755 (executable)
@@ -150,11 +150,20 @@ def encode_print(name, id, t):
     # first, deal with all the other fields
     pack = '>' + ''.join([get_pack(f)[0] for f in t[:-1]])
 
-    # now see if the last field is a vla
-    if len(t[-1]) >= 3 and t[-1][2] == '0':
+    # named variable-length-array
+    if len(t[-1]) == 4 and t[-1][2] == '0' and t[-1][3] == t[-2][1]:
+        print(u"    vpp_api.write(pack('" + pack + "', base + "
+              + id + ", 0, context, " + ', '.join(args[3:-2] + ["len(" + args[-1] + ")"])
+              + ") + " + args[-1] + ")")
+
+    # unnamed variable-length-array
+    elif len(t[-1]) >= 3 and t[-1][2] == '0':
         print(u"    vpp_api.write(pack('" + pack + "', base + " +
               id + ", 0, context, " + ', '.join(args[3:-1]) + ") + "
               + args[-1] + ")")
+
+
+    # not a variable-length-array
     else:
         pack += get_pack(t[-1])[0]
         print(u"    vpp_api.write(pack('" + pack + "', base + " + id +