self.sizeformat = sizeformat or type2format[sizetype]
self.label_needed = 0
- def declare(self, name):
- self.declareBuffer(name)
- self.declareSize(name)
+ def getDeclarations(self, name, reference=False):
+ if reference:
+ raise RuntimeError, "Cannot pass buffer types by reference"
+ return self.getBufferDeclarations(name) + self.getSizeDeclarations(name)
- def declareBuffer(self, name):
- self.declareInputBuffer(name)
- self.declareOutputBuffer(name)
+ def getBufferDeclarations(self, name):
+ return self.getInputBufferDeclarations(name) + self.getOutputBufferDeclarations(name)
- def declareInputBuffer(self, name):
- Output("%s *%s__in__;", self.datatype, name)
+ def getInputBufferDeclarations(self, name):
+ return ["%s *%s__in__" % (self.datatype, name)]
- def declareOutputBuffer(self, name):
- Output("%s %s__out__[%s];", self.datatype, name, self.size)
+ def getOutputBufferDeclarations(self, name):
+ return ["%s %s__out__[%s]" % (self.datatype, name, self.size)]
- def declareSize(self, name):
- Output("%s %s__len__;", self.sizetype, name)
- Output("int %s__in_len__;", name)
+ def getSizeDeclarations(self, name):
+ return [
+ "%s %s__len__" %(self.sizetype, name),
+ "int %s__in_len__" %(name)
+ ]
def getargsFormat(self):
return "s#"
class InputOnlyBufferMixIn(InputOnlyMixIn):
- def declareOutputBuffer(self, name):
- pass
+ def getOutputBufferDeclarations(self, name):
+ return []
class OutputOnlyBufferMixIn(OutputOnlyMixIn):
- def declareInputBuffer(self, name):
- pass
+ def getInputBufferDeclarations(self, name):
+ return []
class OptionalInputBufferMixIn:
FixedInputOutputBufferType.__init__(self, "sizeof(%s)" % type)
self.typeName = self.type = type
- def declareInputBuffer(self, name):
- Output("%s *%s__in__;", self.type, name)
+ def getInputBufferDeclarations(self, name):
+ return ["%s *%s__in__" % (self.type, name)]
- def declareSize(self, name):
- Output("int %s__in_len__;", name)
+ def getSizeDeclarations(self, name):
+ return ["int %s__in_len__" % (name)]
- def declareOutputBuffer(self, name):
- Output("%s %s__out__;", self.type, name)
+ def getOutputBufferDeclarations(self, name):
+ return ["%s %s__out__" % (self.type, name)]
def getargsArgs(self, name):
return "(char **)&%s__in__, &%s__in_len__" % (name, name)
Instantiate with the struct type as parameter.
"""
- def declareSize(self, name):
- pass
+ def getSizeDeclarations(self, name):
+ return []
def passOutput(self, name):
return "&%s__out__" % name
Instantiate with the struct type as parameter.
"""
- def declareSize(self, name):
- pass
+ def getSizeDeclarations(self, name):
+ return []
def passOutput(self, name):
return "%s__out__" % name
def __init__(self, datatype = 'char', sizetype = 'int', sizeformat = None):
FixedInputOutputBufferType.__init__(self, "0", datatype, sizetype, sizeformat)
- def declareOutputBuffer(self, name):
- Output("%s *%s__out__;", self.datatype, name)
+ def getOutputBufferDeclarations(self, name):
+ return ["%s *%s__out__" % (self.datatype, name)]
def getargsCheck(self, name):
Output("if ((%s__out__ = malloc(%s__in_len__)) == NULL)", name, name)
Call from Python with buffer size.
"""
- def declareInputBuffer(self, name):
- pass
+ def getInputBufferDeclarations(self, name):
+ return []
def getargsFormat(self):
return "i"
Example: int.declare('spam') prints "int spam;"
"""
- Output("%s;", self.getDeclaration(name, reference))
+ for decl in self.getDeclarations(name, reference):
+ Output("%s;", decl)
- def getDeclaration(self, name, reference=False):
+ def getDeclarations(self, name, reference=False):
"""Return a string declaring a variable or argument, without
any syntactic adornment"""
if reference:
- return "%s& %s" % (self.typeName, name)
+ return ["%s& %s" % (self.typeName, name)]
else:
- return "%s %s" % (self.typeName, name)
+ return ["%s %s" % (self.typeName, name)]
def getargs(self):
return self.getargsFormat(), self.getargsArgs()
def __init__(self, substitute):
self.substitute = substitute
self.typeName = None # Don't show this argument in __doc__ string
-
- def declare(self, name, reference=False):
- pass
+
+ def getDeclarations(self, name, reference=False):
+ return []
def getargsFormat(self):
return ""