Author: allison
Date: Mon Dec 29 21:28:43 2008
New Revision: 34613

Modified:
   branches/pdd22io_part3/src/pmc/stringhandle.pmc

Log:
[pdd22io] Store full set of options for buffer_type.


Modified: branches/pdd22io_part3/src/pmc/stringhandle.pmc
==============================================================================
--- branches/pdd22io_part3/src/pmc/stringhandle.pmc     (original)
+++ branches/pdd22io_part3/src/pmc/stringhandle.pmc     Mon Dec 29 21:28:43 2008
@@ -411,14 +411,42 @@
 
 =item C<METHOD buffer_type(STRING *new_type :optional)>
 
-StringHandles are always unbuffered.
+Set or retrieve the buffering attribute for the stringhandle. This attribute is
+ignored, but stored for mocking.
 
 =cut
 
 */
 
     METHOD buffer_type(STRING *new_type :optional, INTVAL got_type :opt_flag) {
-        STRING *nobuffer_string = const_string(INTERP, "unbuffered");
+        INTVAL flags;
+        STRING *nobuffer_string   = CONST_STRING(INTERP, "unbuffered");
+        STRING *linebuffer_string = CONST_STRING(INTERP, "line-buffered");
+        STRING *fullbuffer_string = CONST_STRING(INTERP, "full-buffered");
+
+        GET_ATTR_flags(INTERP, SELF, flags);
+
+        if (got_type) {
+            if (string_equal(INTERP, new_type, nobuffer_string) == 0) {
+                flags &= ~ PIO_F_LINEBUF;
+                flags &= ~ PIO_F_BLKBUF;
+            }
+            else if (string_equal(INTERP, new_type, linebuffer_string) == 0) {
+                flags |=   PIO_F_LINEBUF;
+                flags &= ~ PIO_F_BLKBUF;
+            }
+            else if (string_equal(INTERP, new_type, fullbuffer_string) == 0) {
+                flags &= ~ PIO_F_LINEBUF;
+                flags |=   PIO_F_BLKBUF;
+            }
+
+            SET_ATTR_flags(INTERP, SELF, flags);
+        }
+
+        if (flags & PIO_F_LINEBUF)
+            RETURN(STRING *linebuffer_string);
+        else if (flags & PIO_F_BLKBUF)
+            RETURN(STRING *fullbuffer_string);
         RETURN(STRING *nobuffer_string);
     }
 

Reply via email to