-í
æ¶<c       s¡     d  Z    d k Z   y ! d k l Z Wn " e j
 o # d Z n X% d g Z ' d f  d „  ƒ  YZ ° d „  Z Ø e d j o Ù e ƒ  n d S(   s	  File-like objects that read from or write to a string buffer.

This implements (nearly) all stdio methods.

f = StringIO()      # ready for writing
f = StringIO(buf)   # ready for reading
f.close()           # explicitly release resources held
flag = f.isatty()   # always false
pos = f.tell()      # get current position
f.seek(pos)         # set current position
f.seek(pos, mode)   # mode 0: absolute; 1: relative; 2: relative to EOF
buf = f.read()      # read until EOF
buf = f.read(n)     # read up to n bytes
buf = f.readline()  # read until end of line ('
') or EOF
list = f.readlines()# list of f.readline() results until EOF
f.truncate([size])  # truncate file at to at most size (default: current pos)
f.write(buf)        # write at current position
f.writelines(list)  # for line in list: f.write(line)
f.getvalue()        # return whole file's contents as a string

Notes:
- Using a real file is often faster (but less convenient).
- There's also a much faster implementation in C, called cStringIO, but
  it's not subclassable.
- fileno() is left unimplemented so that code which uses it triggers
  an exception early.
- Seeking far beyond EOF and then writing will insert real null
  bytes that occupy space in the buffer.
- There's a simple test set (see end of this file).
N(   s   EINVALi   s   StringIOc      sÅ   ' t  Z ( d d „ Z 3 d „  Z 6 d „  Z ; d „  Z @ d d „ Z L d „  Z Q d	 d
 „ Z _ e	 d „ Z
 q d d „ Z } e	 d „ Z ˆ d „  Z   d „  Z £ d „  Z § d „  Z RS(   Ns    c    s   ( * t  | ƒ t i j o + t | ƒ } n , | |  _ - t | ƒ |  _ . g  |  _ / d |  _ 0 d |  _	 1 d |  _
 d  S(   Ni    (   s   types   bufs   typess   StringTypess   strs   selfs   lens   buflists   poss   closeds	   softspace(   s   selfs   buf(    (    s   /usr/lib/python2.2/StringIO.pys   __init__( s   c    s   3 4 t  |  i d ƒ Sd  S(   Ns    (   s   iters   selfs   readline(   s   self(    (    s   /usr/lib/python2.2/StringIO.pys   __iter__3 s   c    s4   6 7 |  i o 8 d |  _ 9 |  ` |  ` n d  S(   Ni   (   s   selfs   closeds   bufs   pos(   s   self(    (    s   /usr/lib/python2.2/StringIO.pys   close6 s   c    s+   ; < |  i o = t d ‚ n > d Sd  S(   Ns   I/O operation on closed filei    (   s   selfs   closeds
   ValueError(   s   self(    (    s   /usr/lib/python2.2/StringIO.pys   isatty; s   i    c    s¼   @ A |  i o B t d ‚ n C |  i o. D |  i d i |  i ƒ 7_ E g  |  _ n F | d j o G | |  i 7} n% H | d j o I | |  i 7} n J t	 d | ƒ |  _ d  S(   Ns   I/O operation on closed files    i   i   i    (
   s   selfs   closeds
   ValueErrors   buflists   bufs   joins   modes   poss   lens   max(   s   selfs   poss   mode(    (    s   /usr/lib/python2.2/StringIO.pys   seek@ s   c    s.   L M |  i o N t d ‚ n O |  i Sd  S(   Ns   I/O operation on closed file(   s   selfs   closeds
   ValueErrors   pos(   s   self(    (    s   /usr/lib/python2.2/StringIO.pys   tellL s   iÿÿÿÿc    sÄ   Q R |  i o S t d ‚ n T |  i o. U |  i d i |  i ƒ 7_ V g  |  _ n W | d j  o X |  i } n Z t	 |  i
 | |  i ƒ } [ |  i |  i
 | !} \ | |  _
 ] | Sd  S(   Ns   I/O operation on closed files    i    (   s   selfs   closeds
   ValueErrors   buflists   bufs   joins   ns   lens   newposs   mins   poss   r(   s   selfs   ns   rs   newpos(    (    s   /usr/lib/python2.2/StringIO.pys   readQ s   c    s  _ ` |  i o a t d ‚ n b |  i o. c |  i d i |  i ƒ 7_ d g  |  _ n e |  i i d |  i ƒ } f | d j  o g |  i	 } n i | d } j | t j	 o/ k |  i | | j  o l |  i | } n n m |  i |  i | !} n | |  _ o | Sd  S(   Ns   I/O operation on closed files    s   
i    i   (   s   selfs   closeds
   ValueErrors   buflists   bufs   joins   finds   poss   is   lens   newposs   lengths   Nones   r(   s   selfs   lengths   rs   is   newpos(    (    s   /usr/lib/python2.2/StringIO.pys   readline_ s   c    sŸ   q r d } s g  } t |  i ƒ  } u xj u | o_ v | i | ƒ w | t | ƒ 7} x d | j  o
 | j n o y Pn z |  i ƒ  } q* W{ | Sd  S(   Ni    (   s   totals   liness   selfs   readlines   lines   appends   lens   sizehint(   s   selfs   sizehints   totals   liness   line(    (    s   /usr/lib/python2.2/StringIO.pys	   readlinesq s   		 
!c    s£   } ~ |  i o  t d ‚ n € | t j o  |  i } nJ ‚ | d j  o ƒ t t d ƒ ‚ n$ „ | |  i j  o … | |  _ n † |  i ƒ  |  |  _	 d  S(   Ns   I/O operation on closed filei    s   Negative size not allowed(
   s   selfs   closeds
   ValueErrors   sizes   Nones   poss   IOErrors   EINVALs   getvalues   buf(   s   selfs   size(    (    s   /usr/lib/python2.2/StringIO.pys   truncate} s   c    s›  ˆ ‰ |  i o Š t d ‚ n ‹ | o ‹ d  Sn  t | ƒ t i j o Ž t | ƒ } n  |  i |  i	 j o4  |  i
 i d |  i |  i	 ƒ ‘ |  i |  _	 n ’ |  i t	 | ƒ } “ |  i |  i	 j  o” ” |  i
 o. • |  i d i |  i
 ƒ 7_ – g  |  _
 n — |  i |  i  | |  i | g |  _
 ˜ d |  _ ™ | |  i	 j o š | |  _	 n n  œ |  i
 i | ƒ  | |  _	 ž | |  _ d  S(   Ns   I/O operation on closed files    s    (   s   selfs   closeds
   ValueErrors   ss   types   typess   StringTypess   strs   poss   lens   buflists   appends   newposs   bufs   join(   s   selfs   ss   newpos(    (    s   /usr/lib/python2.2/StringIO.pys   writeˆ s*    !&c    s      ¡ |  i d i | ƒ ƒ d  S(   Ns    (   s   selfs   writes   joins   list(   s   selfs   list(    (    s   /usr/lib/python2.2/StringIO.pys
   writelines  s   c    s$   £ ¤ |  i o ¥ t d ‚ n d  S(   Ns   I/O operation on closed file(   s   selfs   closeds
   ValueError(   s   self(    (    s   /usr/lib/python2.2/StringIO.pys   flush£ s   c    sL   § ¨ |  i o. © |  i d i |  i ƒ 7_ ª g  |  _ n « |  i Sd  S(   Ns    (   s   selfs   buflists   bufs   join(   s   self(    (    s   /usr/lib/python2.2/StringIO.pys   getvalue§ s   (   s   __name__s
   __module__s   __init__s   __iter__s   closes   isattys   seeks   tells   reads   Nones   readlines	   readliness   truncates   writes
   writeliness   flushs   getvalue(    (    (    s   /usr/lib/python2.2/StringIO.pys   StringIO' s   	c  
   sª  ° ± d  k  } ² | i d o ³ | i d } n
 µ d } ¶ t | d ƒ i ƒ  } · t | d ƒ i ƒ  } ¸ t ƒ  }  ¹ x% | d  D¹ ] }	 º |  i |	 ƒ q‡ W» |  i | d ƒ ¼ |  i ƒ  | j o ½ t d ‚ n ¾ |  i ƒ  } ¿ d G| GHÀ |  i t | d ƒ ƒ Á |  i | d ƒ Â |  i d ƒ Ã d G|  i ƒ  GHÄ |  i ƒ  } Å |  i ƒ  }	 Æ d	 G|	 GHÇ |  i t |	 ƒ d ƒ È |  i t |	 ƒ ƒ } É |	 | j o Ê t d
 ‚ n Ë |  i t | ƒ d ƒ Ì |  i ƒ  } Í | d }	 Î |  i |  i ƒ  t |	 ƒ ƒ Ï |  i ƒ  } Ð |	 | j o Ñ t d ‚ n Ò d Gt | ƒ Gd GHÓ d G|  i ƒ  GHÔ |  i ƒ  | j o Õ t d ‚ n Ö |  i ƒ  d  S(   Ni   s   /etc/passwds   riþÿÿÿs   write faileds   File length =i    s   First line =s   Second line =s   bad result after seek backiÿÿÿÿs#   bad result after seek back from EOFs   Reads
   more liness
   bad length(   s   syss   argvs   files   opens	   readliness   liness   reads   texts   StringIOs   fs   lines   writes
   writeliness   getvalues   RuntimeErrors   tells   lengths   seeks   lens   readlines   heres   line2s   lists   close(
   s   fs   texts   liness   line2s   syss   lists   lengths   heres   files   line(    (    s   /usr/lib/python2.2/StringIO.pys   test° sL   	 	 s   __main__(	   s   __doc__s   typess   errnos   EINVALs   ImportErrors   __all__s   StringIOs   tests   __name__(   s   tests   __all__s   StringIOs   typess   EINVAL(    (    s   /usr/lib/python2.2/StringIO.pys   ? s   ‰(