ref: 8f1eb1ac77640d9cd189c49fe48af8cde65eceb1
dir: /sys/src/cmd/python/Tools/bgen/bgen/bgenStringBuffer.py/
"""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 getSizeDeclarations(self, name): return [] def getAuxDeclarations(self, name): return [] 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. """