- dst += '\\%03o' % ord(c)
- else:
- dst += c
- return dst
-
-class BaseType:
- def __init__(self, type, refTable=None, minInteger=None, maxInteger=None,
- minReal=None, maxReal=None, reMatch=None, reComment=None,
- minLength=None, maxLength=None):
- self.type = type
- self.refTable = refTable
- self.minInteger = minInteger
- self.maxInteger = maxInteger
- self.minReal = minReal
- self.maxReal = maxReal
- self.reMatch = reMatch
- self.reComment = reComment
- self.minLength = minLength
- self.maxLength = maxLength
-
- @staticmethod
- def fromJson(json, description):
- if type(json) == unicode:
- return BaseType(json)
- else:
- atomicType = mustGetMember(json, 'type', [unicode], description)
- refTable = getMember(json, 'refTable', [unicode], description)
- 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)
- reMatch = getMember(json, 'reMatch', [unicode], description)
- reComment = getMember(json, 'reComment', [unicode], description)
- minLength = getMember(json, 'minLength', [int], description)
- maxLength = getMember(json, 'minLength', [int], description)
- return BaseType(atomicType, refTable, minInteger, maxInteger, minReal, maxReal, reMatch, reComment, minLength, maxLength)
-
- def toEnglish(self):
- if self.type == 'uuid' and self.refTable:
- return self.refTable
- else:
- return self.type
-
- def toCType(self, prefix):
- if self.refTable:
- return "struct %s%s *" % (prefix, self.refTable.lower())
- else:
- return {'integer': 'int64_t ',
- 'real': 'double ',
- 'uuid': 'struct uuid ',
- 'boolean': 'bool ',
- 'string': 'char *'}[self.type]
-
- def copyCValue(self, dst, src):
- args = {'dst': dst, 'src': src}
- if self.refTable:
- return ("%(dst)s = %(src)s->header_.uuid;") % args
- elif self.type == 'string':
- return "%(dst)s = xstrdup(%(src)s);" % args