mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			128 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			128 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() | ||
|  | 
 |