blob: a232f83d2ace8cebe4d7dcabf1e2fe89a7d93565 [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 Jansenab16c352005-06-22 20:35:23 +000026 def getSizeDeclarations(self, name):
27 return []
Tim Peters182b5ac2004-07-18 06:16:08 +000028
Jack Jansenb6216dd2005-06-28 15:14:35 +000029 def getAuxDeclarations(self, name):
30 return []
31
Jack Jansen2cf08ab2003-01-19 21:53:57 +000032 def getargsFormat(self):
33 return "s"
Tim Peters182b5ac2004-07-18 06:16:08 +000034
Jack Jansen2cf08ab2003-01-19 21:53:57 +000035 def getargsArgs(self, name):
36 return "&%s__in__" % name
Guido van Rossum01f5a811995-01-25 22:59:21 +000037
Jack Jansen2cf08ab2003-01-19 21:53:57 +000038 def mkvalueFormat(self):
39 return "s"
Guido van Rossum01f5a811995-01-25 22:59:21 +000040
Jack Jansen2cf08ab2003-01-19 21:53:57 +000041 def mkvalueArgs(self, name):
42 return "%s__out__" % name
Guido van Rossum01f5a811995-01-25 22:59:21 +000043
44
45class FixedOutputStringType(StringBufferMixIn, FixedOutputBufferType):
46
Jack Jansen2cf08ab2003-01-19 21:53:57 +000047 """Null-terminated output string -- passed without size.
Guido van Rossum01f5a811995-01-25 22:59:21 +000048
Jack Jansen2cf08ab2003-01-19 21:53:57 +000049 Instantiate with buffer size as parameter.
50 """
Guido van Rossum01f5a811995-01-25 22:59:21 +000051
52
53class StackOutputStringType(StringBufferMixIn, StackOutputBufferType):
54
Jack Jansen2cf08ab2003-01-19 21:53:57 +000055 """Null-terminated output string -- passed as (buffer, size).
Guido van Rossum01f5a811995-01-25 22:59:21 +000056
Jack Jansen2cf08ab2003-01-19 21:53:57 +000057 Instantiate with buffer size as parameter.
58 """
Guido van Rossum01f5a811995-01-25 22:59:21 +000059
60
61class HeapOutputStringType(StringBufferMixIn, HeapOutputBufferType):
62
Jack Jansen2cf08ab2003-01-19 21:53:57 +000063 """Null-terminated output string -- passed as (buffer, size).
Guido van Rossum01f5a811995-01-25 22:59:21 +000064
Jack Jansen2cf08ab2003-01-19 21:53:57 +000065 Instantiate without parameters.
66 Call from Python with buffer size.
67 """