~malept/ubuntu/lucid/python2.6/dev-dependency-fix

« back to all changes in this revision

Viewing changes to Tools/bgen/bgen/bgenHeapBuffer.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-02-13 12:51:00 UTC
  • Revision ID: james.westby@ubuntu.com-20090213125100-uufgcb9yeqzujpqw
Tags: upstream-2.6.1
ImportĀ upstreamĀ versionĀ 2.6.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Buffers allocated on the heap
 
2
 
 
3
from bgenOutput import *
 
4
from bgenType import OutputOnlyMixIn
 
5
from bgenBuffer import FixedInputOutputBufferType
 
6
 
 
7
 
 
8
class HeapInputOutputBufferType(FixedInputOutputBufferType):
 
9
 
 
10
    """Input-output buffer allocated on the heap -- passed as (inbuffer, outbuffer, size).
 
11
 
 
12
    Instantiate without parameters.
 
13
    Call from Python with input buffer.
 
14
    """
 
15
 
 
16
    def __init__(self, datatype = 'char', sizetype = 'int', sizeformat = None):
 
17
        FixedInputOutputBufferType.__init__(self, "0", datatype, sizetype, sizeformat)
 
18
 
 
19
    def getOutputBufferDeclarations(self, name, constmode=False, outmode=False):
 
20
        if constmode:
 
21
            raise RuntimeError, "Cannot use const output buffer"
 
22
        if outmode:
 
23
            out = "*"
 
24
        else:
 
25
            out = ""
 
26
        return ["%s%s *%s__out__" % (self.datatype, out, name)]
 
27
 
 
28
    def getargsCheck(self, name):
 
29
        Output("if ((%s__out__ = malloc(%s__in_len__)) == NULL)", name, name)
 
30
        OutLbrace()
 
31
        Output('PyErr_NoMemory();')
 
32
        Output("goto %s__error__;", name)
 
33
        self.label_needed = 1
 
34
        OutRbrace()
 
35
        Output("%s__len__ = %s__in_len__;", name, name)
 
36
 
 
37
    def passOutput(self, name):
 
38
        return "%s__in__, %s__out__, (%s)%s__len__" % \
 
39
            (name, name, self.sizetype, name)
 
40
 
 
41
    def mkvalueArgs(self, name):
 
42
        return "%s__out__, (int)%s__len__" % (name, name)
 
43
 
 
44
    def cleanup(self, name):
 
45
        Output("free(%s__out__);", name)
 
46
        FixedInputOutputBufferType.cleanup(self, name)
 
47
 
 
48
 
 
49
class VarHeapInputOutputBufferType(HeapInputOutputBufferType):
 
50
 
 
51
    """same as base class, but passed as (inbuffer, outbuffer, &size)"""
 
52
 
 
53
    def passOutput(self, name):
 
54
        return "%s__in__, %s__out__, &%s__len__" % (name, name, name)
 
55
 
 
56
 
 
57
class HeapCombinedInputOutputBufferType(HeapInputOutputBufferType):
 
58
 
 
59
    """same as base class, but passed as (inoutbuffer, size)"""
 
60
 
 
61
    def passOutput(self, name):
 
62
        return "(%s *)memcpy(%s__out__, %s__in__, %s__len__)" % \
 
63
            (self.datatype, name,   name,     name)
 
64
 
 
65
 
 
66
class VarHeapCombinedInputOutputBufferType(HeapInputOutputBufferType):
 
67
 
 
68
    """same as base class, but passed as (inoutbuffer, &size)"""
 
69
 
 
70
    def passOutput(self, name):
 
71
        return "(%s *)memcpy(%s__out__, %s__in__, &%s__len__)" % \
 
72
            (self.datatype, name,   name,      name)
 
73
 
 
74
 
 
75
class HeapOutputBufferType(OutputOnlyMixIn, HeapInputOutputBufferType):
 
76
 
 
77
    """Output buffer allocated on the heap -- passed as (buffer, size).
 
78
 
 
79
    Instantiate without parameters.
 
80
    Call from Python with buffer size.
 
81
    """
 
82
 
 
83
    def getInputBufferDeclarations(self, name, constmode=False):
 
84
        return []
 
85
 
 
86
    def getargsFormat(self):
 
87
        return "i"
 
88
 
 
89
    def getargsArgs(self, name):
 
90
        return "&%s__in_len__" % name
 
91
 
 
92
    def passOutput(self, name):
 
93
        return "%s__out__, %s__len__" % (name, name)
 
94
 
 
95
 
 
96
class VarHeapOutputBufferType(HeapOutputBufferType):
 
97
 
 
98
    """Output buffer allocated on the heap -- passed as (buffer, &size).
 
99
 
 
100
    Instantiate without parameters.
 
101
    Call from Python with buffer size.
 
102
    """
 
103
 
 
104
    def passOutput(self, name):
 
105
        return "%s__out__, &%s__len__" % (name, name)
 
106
 
 
107
 
 
108
class VarVarHeapOutputBufferType(VarHeapOutputBufferType):
 
109
 
 
110
    """Output buffer allocated on the heap -- passed as (buffer, size, &size).
 
111
 
 
112
    Instantiate without parameters.
 
113
    Call from Python with buffer size.
 
114
    """
 
115
 
 
116
    def passOutput(self, name):
 
117
        return "%s__out__, %s__len__, &%s__len__" % (name, name, name)
 
118
 
 
119
class MallocHeapOutputBufferType(HeapOutputBufferType):
 
120
    """Output buffer allocated by the called function -- passed as (&buffer, &size).
 
121
 
 
122
    Instantiate without parameters.
 
123
    Call from Python without parameters.
 
124
    """
 
125
 
 
126
    def getargsCheck(self, name):
 
127
        Output("%s__out__ = NULL;", name)
 
128
 
 
129
    def getAuxDeclarations(self, name):
 
130
        return []
 
131
 
 
132
    def passOutput(self, name):
 
133
        return "&%s__out__, &%s__len__" % (name, name)
 
134
 
 
135
    def getargsFormat(self):
 
136
        return ""
 
137
 
 
138
    def getargsArgs(self, name):
 
139
        return None
 
140
 
 
141
    def mkvalueFormat(self):
 
142
        return "z#"
 
143
 
 
144
    def cleanup(self, name):
 
145
        Output("if( %s__out__ ) free(%s__out__);", name, name)