]> granicus.if.org Git - python/commitdiff
For overriding C++ methods we also need to know whether a parameter
authorJack Jansen <jack.jansen@cwi.nl>
Fri, 10 Feb 2006 16:17:24 +0000 (16:17 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Fri, 10 Feb 2006 16:17:24 +0000 (16:17 +0000)
is an output parameter or not. Added support for that.

Tools/bgen/bgen/bgenBuffer.py
Tools/bgen/bgen/bgenHeapBuffer.py
Tools/bgen/bgen/bgenType.py
Tools/bgen/bgen/bgenVariable.py

index 2d3209e3726c694e5c2153fa3410f7c069bb31ad..d7a7cbbe7a549eb2d78cfaae299a90e9b8bf7f9a 100644 (file)
@@ -38,15 +38,15 @@ class FixedInputOutputBufferType(InputOnlyType):
         self.sizeformat = sizeformat or type2format[sizetype]
         self.label_needed = 0
 
-    def getArgDeclarations(self, name, reference=False, constmode=False):
+    def getArgDeclarations(self, name, reference=False, constmode=False, outmode=False):
         if reference:
             raise RuntimeError, "Cannot pass buffer types by reference"
         return (self.getBufferDeclarations(name, constmode) +
-                self.getSizeDeclarations(name))
+                self.getSizeDeclarations(name, outmode))
 
-    def getBufferDeclarations(self, name, constmode=False):
+    def getBufferDeclarations(self, name, constmode=False, outmode=False):
         return self.getInputBufferDeclarations(name, constmode) + \
-                self.getOutputBufferDeclarations(name, constmode)
+                self.getOutputBufferDeclarations(name, constmode, outmode)
 
     def getInputBufferDeclarations(self, name, constmode=False):
         if constmode:
@@ -55,13 +55,21 @@ class FixedInputOutputBufferType(InputOnlyType):
             const = ""
         return ["%s%s *%s__in__" % (const, self.datatype, name)]
 
-    def getOutputBufferDeclarations(self, name, constmode=False):
+    def getOutputBufferDeclarations(self, name, constmode=False, outmode=False):
         if constmode:
             raise RuntimeError, "Cannot use const output buffer"
-        return ["%s %s__out__[%s]" % (self.datatype, name, self.size)]
+        if outmode:
+            out = "*"
+        else:
+            out = ""
+        return ["%s%s %s__out__[%s]" % (self.datatype, out, name, self.size)]
 
-    def getSizeDeclarations(self, name):
-        return ["%s %s__len__" %(self.sizetype, name)]
+    def getSizeDeclarations(self, name, outmode=False):
+        if outmode:
+            out = "*"
+        else:
+            out = ""
+        return ["%s%s %s__len__" %(self.sizetype, out, name)]
 
     def getAuxDeclarations(self, name):
         return ["int %s__in_len__" %(name)]
@@ -112,7 +120,7 @@ class FixedCombinedInputOutputBufferType(FixedInputOutputBufferType):
 
 class InputOnlyBufferMixIn(InputOnlyMixIn):
 
-    def getOutputBufferDeclarations(self, name, constmode=False):
+    def getOutputBufferDeclarations(self, name, constmode=False, outmode=False):
         return []
 
 
@@ -200,16 +208,20 @@ class StructInputOutputBufferType(FixedInputOutputBufferType):
             const = ""
         return ["%s%s *%s__in__" % (const, self.type, name)]
 
-    def getSizeDeclarations(self, name):
+    def getSizeDeclarations(self, name, outmode=False):
         return []
 
     def getAuxDeclarations(self, name):
         return ["int %s__in_len__" % (name)]
 
-    def getOutputBufferDeclarations(self, name, constmode=False):
+    def getOutputBufferDeclarations(self, name, constmode=False, outmode=False):
         if constmode:
             raise RuntimeError, "Cannot use const output buffer"
-        return ["%s %s__out__" % (self.type, name)]
+        if outmode:
+            out = "*"
+        else:
+            out = ""
+        return ["%s%s %s__out__" % (self.type, out, name)]
 
     def getargsArgs(self, name):
         return "(char **)&%s__in__, &%s__in_len__" % (name, name)
@@ -262,7 +274,7 @@ class StructOutputBufferType(OutputOnlyBufferMixIn, StructInputOutputBufferType)
     Instantiate with the struct type as parameter.
     """
 
-    def getSizeDeclarations(self, name):
+    def getSizeDeclarations(self, name, outmode=False):
         return []
 
     def getAuxDeclarations(self, name):
@@ -279,7 +291,7 @@ class ArrayOutputBufferType(OutputOnlyBufferMixIn, StructInputOutputBufferType):
     Instantiate with the struct type as parameter.
     """
 
-    def getSizeDeclarations(self, name):
+    def getSizeDeclarations(self, name, outmode=False):
         return []
 
     def getAuxDeclarations(self, name):
index 3d440e625f9df4231dd5be761fbd13a82207f320..930bb7e5fd1f06e7db5a80d6d59590ccfe3f956e 100644 (file)
@@ -16,10 +16,14 @@ class HeapInputOutputBufferType(FixedInputOutputBufferType):
     def __init__(self, datatype = 'char', sizetype = 'int', sizeformat = None):
         FixedInputOutputBufferType.__init__(self, "0", datatype, sizetype, sizeformat)
 
-    def getOutputBufferDeclarations(self, name, constmode=False):
+    def getOutputBufferDeclarations(self, name, constmode=False, outmode=False):
         if constmode:
             raise RuntimeError, "Cannot use const output buffer"
-        return ["%s *%s__out__" % (self.datatype, name)]
+        if outmode:
+            out = "*"
+        else:
+            out = ""
+        return ["%s%s *%s__out__" % (self.datatype, out, name)]
 
     def getargsCheck(self, name):
         Output("if ((%s__out__ = malloc(%s__in_len__)) == NULL)", name, name)
index f47d8ce9cce0b0894e24ae4d825072a2f082f5df..c988700cbff7a5e012849d621f3848cf3e5a5774 100644 (file)
@@ -29,7 +29,7 @@ class Type:
         for decl in self.getAuxDeclarations(name):
             Output("%s;", decl)
 
-    def getArgDeclarations(self, name, reference=False, constmode=False):
+    def getArgDeclarations(self, name, reference=False, constmode=False, outmode=False):
         """Return the main part of the declarations for this type: the items
         that will be passed as arguments in the C/C++ function call."""
         if reference:
@@ -40,7 +40,11 @@ class Type:
             const = "const "
         else:
             const = ""
-        return ["%s%s%s %s" % (const, self.typeName, ref, name)]
+        if outmode:
+            out = "*"
+        else:
+            out = ""
+        return ["%s%s%s%s %s" % (const, self.typeName, ref, out, name)]
 
     def getAuxDeclarations(self, name):
         """Return any auxiliary declarations needed for implementing this
@@ -213,7 +217,7 @@ class FakeType(InputOnlyType):
         self.substitute = substitute
         self.typeName = None    # Don't show this argument in __doc__ string
 
-    def getArgDeclarations(self, name, reference=False, constmode=False):
+    def getArgDeclarations(self, name, reference=False, constmode=False, outmode=False):
         return []
 
     def getAuxDeclarations(self, name, reference=False):
index 07679f8c9c96fdc953194866cc5a11061dc33884..0ad24b346f9093e6f798fffbd5da05a18c5227dc 100644 (file)
@@ -45,12 +45,15 @@ class Variable:
         elif self.flags != SelfMode:
             self.type.declare(self.name)
 
-    def getArgDeclarations(self, constmode=False):
+    def getArgDeclarations(self, fullmodes=False):
         refmode = (self.flags & RefMode)
-        if constmode:
+        constmode = False
+        outmode = False
+        if fullmodes:
             constmode = (self.flags & ConstMode)
+            outmode = (self.flags & OutMode)
         return self.type.getArgDeclarations(self.name,
-                reference=refmode, constmode=constmode)
+                reference=refmode, constmode=constmode, outmode=outmode)
 
     def getAuxDeclarations(self):
         return self.type.getAuxDeclarations(self.name)