ฦ
ฝM๖9c       sh     d  Z     d k Z ! d k 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).
Ns   StringIOc      sด   # $ d d  Z  + d   Z / d   Z 3 d d  Z > d   Z B d	 d  Z O e d
  Z ` d d  Z k e d  Z	 v d   Z
  d   Z  d   Z  d   Z RS(   Nc    sU   $ % | |  _  & t |  |  _ ' g  |  _ ( d |  _ ) d |  _ * d |  _ d  S(   Ni    (   s   bufs   selfs   lens   buflists   poss   closeds	   softspace(   s   selfs   bufs%   /mit/python/lib/python2.0/StringIO.pys   __init__$ s   s    c    s4   + , |  i o - d |  _ . |  ` |  ` n d  S(   Ni   (   s   selfs   closeds   bufs   pos(   s   selfs%   /mit/python/lib/python2.0/StringIO.pys   close+ s   c    s+   / 0 |  i o 1 t d  n 2 d Sd  S(   Ns   I/O operation on closed filei    (   s   selfs   closeds
   ValueError(   s   selfs%   /mit/python/lib/python2.0/StringIO.pys   isatty/ s   c    sภ   3 4 |  i o 5 t d  n 6 |  i o2 7 |  i t i |  i d  |  _ 8 g  |  _ n 9 | d j o : | |  i } n% ; | d j o < | |  i	 } n = t
 d |  |  _ d  S(   Ns   I/O operation on closed files    i   i   i    (   s   selfs   closeds
   ValueErrors   buflists   bufs   strings
   joinfieldss   modes   poss   lens   max(   s   selfs   poss   modes%   /mit/python/lib/python2.0/StringIO.pys   seek3 s   "i    c    s.   > ? |  i o @ t d  n A |  i Sd  S(   Ns   I/O operation on closed file(   s   selfs   closeds
   ValueErrors   pos(   s   selfs%   /mit/python/lib/python2.0/StringIO.pys   tell> s   c    sศ   B C |  i o D t d  n E |  i o2 F |  i t i |  i d  |  _ G g  |  _ n H | d j  o I |  i } n K t
 |  i | |  i  } L |  i |  i | !} M | |  _ N | Sd  S(   Ns   I/O operation on closed files    i    (   s   selfs   closeds
   ValueErrors   buflists   bufs   strings
   joinfieldss   ns   lens   newposs   mins   poss   r(   s   selfs   ns   newposs   rs%   /mit/python/lib/python2.0/StringIO.pys   readB s   "i   c    s  O P |  i o Q t d  n R |  i o2 S |  i t i |  i d  |  _ T g  |  _ n U t i |  i d |  i  } V | d j  o W |  i
 } n Y | d } Z | t j	 o/ [ |  i | | j  o \ |  i | } n n ] |  i |  i | !} ^ | |  _ _ | Sd  S(   Ns   I/O operation on closed files    s   
i    i   (   s   selfs   closeds
   ValueErrors   buflists   bufs   strings
   joinfieldss   finds   poss   is   lens   newposs   lengths   Nones   r(   s   selfs   lengths   is   newposs   rs%   /mit/python/lib/python2.0/StringIO.pys   readlineO s   "c    s   ` a d } b g  } c |  i   } d xj d | o_ e | i |  f | t |  7} g d | j  o
 | j n o h Pn i |  i   } q* Wj | Sd  S(   Ni    (   s   totals   liness   selfs   readlines   lines   appends   lens   sizehint(   s   selfs   sizehints   totals   liness   lines%   /mit/python/lib/python2.0/StringIO.pys	   readlines` s   		 
!c    sฉ   k l |  i o m t d  n n | t j o o |  i } nP p | d j  o q t t i r d   n$ s | |  i j  o t | |  _ n u |  i	   |  |  _
 d  S(   Ns   I/O operation on closed filei    s   Negative size not allowed(   s   selfs   closeds
   ValueErrors   sizes   Nones   poss   IOErrors   errnos   EINVALs   getvalues   buf(   s   selfs   sizes%   /mit/python/lib/python2.0/StringIO.pys   truncatek s   c    ss  v w |  i o x t d  n y | o y d  Sn z |  i |  i j o4 { |  i i d |  i |  i  | |  i |  _ n } |  i t |  } ~ |  i |  i j  o  |  i o2  |  i	 t
 i |  i d  |  _	  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   poss   lens   buflists   appends   newposs   bufs   strings
   joinfields(   s   selfs   ss   newposs%   /mit/python/lib/python2.0/StringIO.pys   writev s&    !"&c    s#     |  i t i | d   d  S(   Ns    (   s   selfs   writes   strings
   joinfieldss   list(   s   selfs   lists%   /mit/python/lib/python2.0/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   selfs%   /mit/python/lib/python2.0/StringIO.pys   flush s   c    sP     |  i o2  |  i t i |  i d  |  _  g  |  _ n  |  i Sd  S(   Ns    (   s   selfs   buflists   bufs   strings
   joinfields(   s   selfs%   /mit/python/lib/python2.0/StringIO.pys   getvalue s   "(   s   __init__s   closes   isattys   seeks   tells   reads   Nones   readlines	   readliness   truncates   writes
   writeliness   flushs   getvalue(    s%   /mit/python/lib/python2.0/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 ก r } ข | 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   i    s   write faileds   File length =s   First line =s   Second line =s   bad result after seek backs#   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   syss   files   liness   texts   fs   lines   lengths   heres   line2s   lists%   /mit/python/lib/python2.0/StringIO.pys   test sL   	 	 s   __main__(   s   __doc__s   errnos   strings   StringIOs   tests   __name__(    s%   /mit/python/lib/python2.0/StringIO.pys   ? s   u(