elif self.type == 'uuid':
return self.value.value
+# Returns integer x formatted in decimal with thousands set off by commas.
+def commafy(x):
+ return _commafy("%d" % x)
+def _commafy(s):
+ if s.startswith('-'):
+ return '-' + _commafy(s[1:])
+ elif len(s) <= 3:
+ return s
+ else:
+ return _commafy(s[:-3]) + ',' + _commafy(s[-3:])
+
class BaseType:
def __init__(self, type,
enum=None,
- refTable=None,
+ refTable=None, refType="strong",
minInteger=None, maxInteger=None,
minReal=None, maxReal=None,
minLength=None, maxLength=None):
self.type = type
self.enum = enum
self.refTable = refTable
+ self.refType = refType
self.minInteger = minInteger
self.maxInteger = maxInteger
self.minReal = minReal
enumType = Type(atomicType, None, 0, 'unlimited')
enum = Datum.fromJson(enumType, enum)
refTable = getMember(json, 'refTable', [unicode], description)
+ refType = getMember(json, 'refType', [unicode], description)
+ if refType == None:
+ refType = "strong"
minInteger = getMember(json, 'minInteger', [int, long], description)
maxInteger = getMember(json, 'maxInteger', [int, long], description)
minReal = getMember(json, 'minReal', [int, long, float], description)
maxReal = getMember(json, 'maxReal', [int, long, float], description)
minLength = getMember(json, 'minLength', [int], description)
maxLength = getMember(json, 'minLength', [int], description)
- return BaseType(atomicType, enum, refTable, minInteger, maxInteger, minReal, maxReal, minLength, maxLength)
+ return BaseType(atomicType, enum, refTable, refType, minInteger, maxInteger, minReal, maxReal, minLength, maxLength)
def toEnglish(self, escapeLiteral=returnUnchanged):
if self.type == 'uuid' and self.refTable:
- return escapeLiteral(self.refTable)
+ s = escapeLiteral(self.refTable)
+ if self.refType == 'weak':
+ s = "weak reference to " + s
+ return s
else:
return self.type
', '.join(literals[1:-1]),
literals[-1])
elif self.minInteger != None and self.maxInteger != None:
- return 'in range [%d,%d]' % (self.minInteger, self.maxInteger)
+ return 'in range %s to %s' % (commafy(self.minInteger),
+ commafy(self.maxInteger))
elif self.minInteger != None:
- return 'at least %d' % self.minInteger
+ return 'at least %s' % commafy(self.minInteger)
elif self.maxInteger != None:
- return 'at most %d' % self.maxInteger
+ return 'at most %s' % commafy(self.maxInteger)
elif self.minReal != None and self.maxReal != None:
- return 'in range [%g, %g]' % (self.minReal, self.maxReal)
+ return 'in range %g to %g' % (self.minReal, self.maxReal)
elif self.minReal != None:
return 'at least %g' % self.minReal
elif self.maxReal != None:
'boolean': 'bool ',
'string': 'char *'}[self.type]
+ def toAtomicType(self):
+ return "OVSDB_TYPE_%s" % self.type.upper()
+
def copyCValue(self, dst, src):
args = {'dst': dst, 'src': src}
if self.refTable:
stmts += self.enum.cInitDatum("%s.enum_" % var)
if self.type == 'integer':
if self.minInteger != None:
- stmts.append('%s.u.integer.min = %d;' % (var, self.minInteger))
+ stmts.append('%s.u.integer.min = INT64_C(%d);' % (var, self.minInteger))
if self.maxInteger != None:
- stmts.append('%s.u.integer.max = %d;' % (var, self.maxInteger))
+ stmts.append('%s.u.integer.max = INT64_C(%d);' % (var, self.maxInteger))
elif self.type == 'real':
if self.minReal != None:
stmts.append('%s.u.real.min = %d;' % (var, self.minReal))