| 1 | """Generate the skeleton for cStringIO as an example of framer.""" | 
|---|
| 2 |  | 
|---|
| 3 | from framer.bases import Module, Type | 
|---|
| 4 | from framer.member import member | 
|---|
| 5 |  | 
|---|
| 6 | class cStringIO(Module): | 
|---|
| 7 | """A simple fast partial StringIO replacement. | 
|---|
| 8 |  | 
|---|
| 9 | This module provides a simple useful replacement for the StringIO | 
|---|
| 10 | module that is written in C.  It does not provide the full | 
|---|
| 11 | generality of StringIO, but it provides enough for most | 
|---|
| 12 | applications and is especially useful in conjunction with the | 
|---|
| 13 | pickle module. | 
|---|
| 14 |  | 
|---|
| 15 | Usage: | 
|---|
| 16 |  | 
|---|
| 17 | from cStringIO import StringIO | 
|---|
| 18 |  | 
|---|
| 19 | an_output_stream = StringIO() | 
|---|
| 20 | an_output_stream.write(some_stuff) | 
|---|
| 21 | ... | 
|---|
| 22 | value = an_output_stream.getvalue() | 
|---|
| 23 |  | 
|---|
| 24 | an_input_stream = StringIO(a_string) | 
|---|
| 25 | spam = an_input_stream.readline() | 
|---|
| 26 | spam = an_input_stream.read(5) | 
|---|
| 27 | an_input_stream.seek(0)             # OK, start over | 
|---|
| 28 | spam = an_input_stream.read()       # and read it all | 
|---|
| 29 | """ | 
|---|
| 30 |  | 
|---|
| 31 | __file__ = "cStringIO.c" | 
|---|
| 32 |  | 
|---|
| 33 | def StringIO(o): | 
|---|
| 34 | """Return a StringIO-like stream for reading or writing""" | 
|---|
| 35 | StringIO.pyarg = "|O" | 
|---|
| 36 |  | 
|---|
| 37 | class InputType(Type): | 
|---|
| 38 | "Simple type for treating strings as input file streams" | 
|---|
| 39 |  | 
|---|
| 40 | abbrev = "input" | 
|---|
| 41 |  | 
|---|
| 42 | struct = """\ | 
|---|
| 43 | typedef struct { | 
|---|
| 44 | PyObject_HEAD | 
|---|
| 45 | char *buf; | 
|---|
| 46 | int pos; | 
|---|
| 47 | int size; | 
|---|
| 48 | PyObject *pbuf; | 
|---|
| 49 | } InputObject; | 
|---|
| 50 | """ | 
|---|
| 51 |  | 
|---|
| 52 | def flush(self): | 
|---|
| 53 | """Does nothing""" | 
|---|
| 54 |  | 
|---|
| 55 | def getvalue(self): | 
|---|
| 56 | """Get the string value. | 
|---|
| 57 |  | 
|---|
| 58 | If use_pos is specified and is a true value, then the | 
|---|
| 59 | string returned will include only the text up to the | 
|---|
| 60 | current file position. | 
|---|
| 61 | """ | 
|---|
| 62 |  | 
|---|
| 63 | def isatty(self): | 
|---|
| 64 | """Always returns False""" | 
|---|
| 65 |  | 
|---|
| 66 | def read(self, s): | 
|---|
| 67 | """Return s characters or the rest of the string.""" | 
|---|
| 68 | read.pyarg = "|i" | 
|---|
| 69 |  | 
|---|
| 70 | def readline(self): | 
|---|
| 71 | """Read one line.""" | 
|---|
| 72 |  | 
|---|
| 73 | def readlines(self, hint): | 
|---|
| 74 | """Read all lines.""" | 
|---|
| 75 | readlines.pyarg = "|i" | 
|---|
| 76 |  | 
|---|
| 77 | def reset(self): | 
|---|
| 78 | """Reset the file position to the beginning.""" | 
|---|
| 79 |  | 
|---|
| 80 | def tell(self): | 
|---|
| 81 | """Get the current position.""" | 
|---|
| 82 |  | 
|---|
| 83 | def truncate(self, pos): | 
|---|
| 84 | """Truncate the file at the current position.""" | 
|---|
| 85 | truncate.pyarg = "|i" | 
|---|
| 86 |  | 
|---|
| 87 | def seek(self, position, mode=0): | 
|---|
| 88 | """Set the current position. | 
|---|
| 89 |  | 
|---|
| 90 | The optional mode argument can be 0 for absolute, 1 for relative, | 
|---|
| 91 | and 2 for relative to EOF.  The default is absolute. | 
|---|
| 92 | """ | 
|---|
| 93 | seek.pyarg = "i|i" | 
|---|
| 94 |  | 
|---|
| 95 | def close(self): | 
|---|
| 96 | pass | 
|---|
| 97 |  | 
|---|
| 98 | class OutputType(InputType): | 
|---|
| 99 | "Simple type for output strings." | 
|---|
| 100 |  | 
|---|
| 101 | abbrev = "output" | 
|---|
| 102 |  | 
|---|
| 103 | struct = """\ | 
|---|
| 104 | typedef struct { | 
|---|
| 105 | PyObject_HEAD | 
|---|
| 106 | char *buf; | 
|---|
| 107 | int pos; | 
|---|
| 108 | int size; | 
|---|
| 109 | int softspace; | 
|---|
| 110 | } OutputObject; | 
|---|
| 111 | """ | 
|---|
| 112 |  | 
|---|
| 113 | softspace = member() | 
|---|
| 114 |  | 
|---|
| 115 | def close(self): | 
|---|
| 116 | """Explicitly release resources.""" | 
|---|
| 117 |  | 
|---|
| 118 | def write(self, s): | 
|---|
| 119 | """Write a string to the file.""" | 
|---|
| 120 | # XXX Hack: writing None resets the buffer | 
|---|
| 121 |  | 
|---|
| 122 | def writelines(self, lines): | 
|---|
| 123 | """Write each string in lines.""" | 
|---|
| 124 |  | 
|---|
| 125 |  | 
|---|
| 126 | cStringIO.gen() | 
|---|