mirror of https://github.com/python/cpython
65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
|
"""Buffers used to hold null-terminated strings."""
|
||
|
|
||
|
|
||
|
from bgenBuffer import FixedOutputBufferType
|
||
|
from bgenStackBuffer import StackOutputBufferType
|
||
|
from bgenHeapBuffer import HeapOutputBufferType
|
||
|
|
||
|
|
||
|
class StringBufferMixIn:
|
||
|
|
||
|
"""Mix-in class to create various string buffer types.
|
||
|
|
||
|
Strings are character arrays terminated by a null byte.
|
||
|
(For input, this is also covered by stringptr.)
|
||
|
For output, there are again three variants:
|
||
|
- Fixed: size is a constant given in the documentation; or
|
||
|
- Stack: size is passed to the C function but we decide on a size at
|
||
|
code generation time so we can still allocate on the heap); or
|
||
|
- Heap: size is passed to the C function and we let the Python caller
|
||
|
pass a size.
|
||
|
(Note that this doesn't cover output parameters in which a string
|
||
|
pointer is returned. These are actually easier (no allocation) but far
|
||
|
less common. I'll write the classes when there is demand.)
|
||
|
"""
|
||
|
|
||
|
def declareSize(self, name):
|
||
|
pass
|
||
|
|
||
|
def getargsFormat(self):
|
||
|
return "s"
|
||
|
|
||
|
def getargsArgs(self, name):
|
||
|
return "&%s__in__" % name
|
||
|
|
||
|
def mkvalueFormat(self):
|
||
|
return "s"
|
||
|
|
||
|
def mkvalueArgs(self, name):
|
||
|
return "%s__out__" % name
|
||
|
|
||
|
|
||
|
class FixedOutputStringType(StringBufferMixIn, FixedOutputBufferType):
|
||
|
|
||
|
"""Null-terminated output string -- passed without size.
|
||
|
|
||
|
Instantiate with buffer size as parameter.
|
||
|
"""
|
||
|
|
||
|
|
||
|
class StackOutputStringType(StringBufferMixIn, StackOutputBufferType):
|
||
|
|
||
|
"""Null-terminated output string -- passed as (buffer, size).
|
||
|
|
||
|
Instantiate with buffer size as parameter.
|
||
|
"""
|
||
|
|
||
|
|
||
|
class HeapOutputStringType(StringBufferMixIn, HeapOutputBufferType):
|
||
|
|
||
|
"""Null-terminated output string -- passed as (buffer, size).
|
||
|
|
||
|
Instantiate without parameters.
|
||
|
Call from Python with buffer size.
|
||
|
"""
|