blob: 683bc0fa46bc869c4a3e296cfb4f241b95437db3 [file] [log] [blame]
Guido van Rossum01f5a811995-01-25 22:59:21 +00001"""Buffers used to hold null-terminated strings."""
2
3
4from bgenBuffer import FixedOutputBufferType
5from bgenStackBuffer import StackOutputBufferType
6from bgenHeapBuffer import HeapOutputBufferType
7
8
9class StringBufferMixIn:
10
Jack Jansen2cf08ab2003-01-19 21:53:57 +000011 """Mix-in class to create various string buffer types.
Guido van Rossum01f5a811995-01-25 22:59:21 +000012
Jack Jansen2cf08ab2003-01-19 21:53:57 +000013 Strings are character arrays terminated by a null byte.
14 (For input, this is also covered by stringptr.)
15 For output, there are again three variants:
16 - Fixed: size is a constant given in the documentation; or
17 - Stack: size is passed to the C function but we decide on a size at
18 code generation time so we can still allocate on the heap); or
19 - Heap: size is passed to the C function and we let the Python caller
20 pass a size.
21 (Note that this doesn't cover output parameters in which a string
22 pointer is returned. These are actually easier (no allocation) but far
23 less common. I'll write the classes when there is demand.)
24 """
Tim Peters182b5ac2004-07-18 06:16:08 +000025
Jack Jansen2cf08ab2003-01-19 21:53:57 +000026 def declareSize(self, name):
27 pass
Tim Peters182b5ac2004-07-18 06:16:08 +000028
Jack Jansen2cf08ab2003-01-19 21:53:57 +000029 def getargsFormat(self):
30 return "s"
Tim Peters182b5ac2004-07-18 06:16:08 +000031
Jack Jansen2cf08ab2003-01-19 21:53:57 +000032 def getargsArgs(self, name):
33 return "&%s__in__" % name
Guido van Rossum01f5a811995-01-25 22:59:21 +000034
Jack Jansen2cf08ab2003-01-19 21:53:57 +000035 def mkvalueFormat(self):
36 return "s"
Guido van Rossum01f5a811995-01-25 22:59:21 +000037
Jack Jansen2cf08ab2003-01-19 21:53:57 +000038 def mkvalueArgs(self, name):
39 return "%s__out__" % name
Guido van Rossum01f5a811995-01-25 22:59:21 +000040
41
42class FixedOutputStringType(StringBufferMixIn, FixedOutputBufferType):
43
Jack Jansen2cf08ab2003-01-19 21:53:57 +000044 """Null-terminated output string -- passed without size.
Guido van Rossum01f5a811995-01-25 22:59:21 +000045
Jack Jansen2cf08ab2003-01-19 21:53:57 +000046 Instantiate with buffer size as parameter.
47 """
Guido van Rossum01f5a811995-01-25 22:59:21 +000048
49
50class StackOutputStringType(StringBufferMixIn, StackOutputBufferType):
51
Jack Jansen2cf08ab2003-01-19 21:53:57 +000052 """Null-terminated output string -- passed as (buffer, size).
Guido van Rossum01f5a811995-01-25 22:59:21 +000053
Jack Jansen2cf08ab2003-01-19 21:53:57 +000054 Instantiate with buffer size as parameter.
55 """
Guido van Rossum01f5a811995-01-25 22:59:21 +000056
57
58class HeapOutputStringType(StringBufferMixIn, HeapOutputBufferType):
59
Jack Jansen2cf08ab2003-01-19 21:53:57 +000060 """Null-terminated output string -- passed as (buffer, size).
Guido van Rossum01f5a811995-01-25 22:59:21 +000061
Jack Jansen2cf08ab2003-01-19 21:53:57 +000062 Instantiate without parameters.
63 Call from Python with buffer size.
64 """