mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			126 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Generate the skeleton for cStringIO as an example of framer."""
 | 
						|
 | 
						|
from framer.bases import Module, Type
 | 
						|
from framer.member import member
 | 
						|
 | 
						|
class cStringIO(Module):
 | 
						|
    """A simple fast partial StringIO replacement.
 | 
						|
 | 
						|
    This module provides a simple useful replacement for the StringIO
 | 
						|
    module that is written in C.  It does not provide the full
 | 
						|
    generality of StringIO, but it provides enough for most
 | 
						|
    applications and is especially useful in conjunction with the
 | 
						|
    pickle module.
 | 
						|
 | 
						|
    Usage:
 | 
						|
 | 
						|
    from cStringIO import StringIO
 | 
						|
 | 
						|
    an_output_stream = StringIO()
 | 
						|
    an_output_stream.write(some_stuff)
 | 
						|
    ...
 | 
						|
    value = an_output_stream.getvalue()
 | 
						|
 | 
						|
    an_input_stream = StringIO(a_string)
 | 
						|
    spam = an_input_stream.readline()
 | 
						|
    spam = an_input_stream.read(5)
 | 
						|
    an_input_stream.seek(0)             # OK, start over
 | 
						|
    spam = an_input_stream.read()       # and read it all
 | 
						|
    """
 | 
						|
 | 
						|
    __file__ = "cStringIO.c"
 | 
						|
 | 
						|
    def StringIO(o):
 | 
						|
        """Return a StringIO-like stream for reading or writing"""
 | 
						|
    StringIO.pyarg = "|O"
 | 
						|
 | 
						|
    class InputType(Type):
 | 
						|
        "Simple type for treating strings as input file streams"
 | 
						|
 | 
						|
        abbrev = "input"
 | 
						|
 | 
						|
        struct = """\
 | 
						|
        typedef struct {
 | 
						|
                PyObject_HEAD
 | 
						|
                char *buf;
 | 
						|
                int pos;
 | 
						|
                int size;
 | 
						|
                PyObject *pbuf;
 | 
						|
        } InputObject;
 | 
						|
        """
 | 
						|
 | 
						|
        def flush(self):
 | 
						|
            """Does nothing"""
 | 
						|
 | 
						|
        def getvalue(self):
 | 
						|
            """Get the string value.
 | 
						|
 | 
						|
            If use_pos is specified and is a true value, then the
 | 
						|
            string returned will include only the text up to the
 | 
						|
            current file position.
 | 
						|
            """
 | 
						|
 | 
						|
        def isatty(self):
 | 
						|
            """Always returns False"""
 | 
						|
 | 
						|
        def read(self, s):
 | 
						|
            """Return s characters or the rest of the string."""
 | 
						|
        read.pyarg = "|i"
 | 
						|
 | 
						|
        def readline(self):
 | 
						|
            """Read one line."""
 | 
						|
 | 
						|
        def readlines(self, hint):
 | 
						|
            """Read all lines."""
 | 
						|
        readlines.pyarg = "|i"
 | 
						|
 | 
						|
        def reset(self):
 | 
						|
            """Reset the file position to the beginning."""
 | 
						|
 | 
						|
        def tell(self):
 | 
						|
            """Get the current position."""
 | 
						|
 | 
						|
        def truncate(self, pos):
 | 
						|
            """Truncate the file at the current position."""
 | 
						|
        truncate.pyarg = "|i"
 | 
						|
 | 
						|
        def seek(self, position, mode=0):
 | 
						|
            """Set the current position.
 | 
						|
 | 
						|
            The optional mode argument can be 0 for absolute, 1 for relative,
 | 
						|
            and 2 for relative to EOF.  The default is absolute.
 | 
						|
            """
 | 
						|
        seek.pyarg = "i|i"
 | 
						|
 | 
						|
        def close(self):
 | 
						|
            pass
 | 
						|
 | 
						|
    class OutputType(InputType):
 | 
						|
        "Simple type for output strings."
 | 
						|
 | 
						|
        abbrev = "output"
 | 
						|
 | 
						|
        struct = """\
 | 
						|
        typedef struct {
 | 
						|
                PyObject_HEAD
 | 
						|
                char *buf;
 | 
						|
                int pos;
 | 
						|
                int size;
 | 
						|
                int softspace;
 | 
						|
        } OutputObject;
 | 
						|
        """
 | 
						|
 | 
						|
        softspace = member()
 | 
						|
 | 
						|
        def close(self):
 | 
						|
            """Explicitly release resources."""
 | 
						|
 | 
						|
        def write(self, s):
 | 
						|
            """Write a string to the file."""
 | 
						|
            # XXX Hack: writing None resets the buffer
 | 
						|
 | 
						|
        def writelines(self, lines):
 | 
						|
            """Write each string in lines."""
 | 
						|
 | 
						|
 | 
						|
cStringIO.gen()
 |