Changeset 294

Show
Ignore:
Timestamp:
04/28/08 23:13:47 (7 months ago)
Author:
JarrettBillingsley
Message:

Closes #58. That was easy enough.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/v2/minid/iolib.d

    r290 r294  
    6767    { 
    6868        inputStreamClass = new MDInputStreamClass(_Object); 
    69         outputStreamClass = new MDOutputStreamClass(_Object); 
    7069        streamClass = new MDStreamClass(_Object); 
     70        outputStreamClass = new MDOutputStreamClass(_Object, inputStreamClass, streamClass); 
    7171    } 
    7272 
     
    499499    { 
    500500        private Layout!(char) mLayout; 
    501  
    502         public this(MDObject owner) 
     501        private MDInputStreamClass mInputStreamClass; 
     502        private MDStreamClass mStreamClass; 
     503 
     504        public this(MDObject owner, MDInputStreamClass inputStreamClass, MDStreamClass streamClass) 
    503505        { 
    504506            super("OutputStream", owner); 
    505507 
    506508            mLayout = new Layout!(char)(); 
     509            mInputStreamClass = inputStreamClass; 
     510            mStreamClass = streamClass; 
    507511 
    508512            mFields.addList 
     
    523527                "writeChars"d,  new MDClosure(mFields, &writeChars,        "OutputStream.writeChars"), 
    524528                "writeJSON"d,   new MDClosure(mFields, &writeJSON,         "OutputStream.writeJSON"), 
    525                 "flush"d,       new MDClosure(mFields, &flush,             "OutputStream.flush") 
     529                "flush"d,       new MDClosure(mFields, &flush,             "OutputStream.flush"), 
     530                "copy"d,        new MDClosure(mFields, &copy,              "OutputStream.copy") 
    526531            ); 
    527532             
     
    590595        { 
    591596            s.push(s.safeCode(s.getContext!(MDOutputStream).flush())); 
     597            return 1; 
     598        } 
     599         
     600        public int copy(MDState s, uint numParams) 
     601        { 
     602            auto o = s.getParam!(MDObject)(0); 
     603             
     604            InputStream stream; 
     605 
     606            if(auto i = cast(MDInputStream)o) 
     607                stream = i.mInput; 
     608            else if(auto s = cast(MDStream)o) 
     609                stream = s.mInput.mInput; 
     610            else 
     611                s.throwRuntimeException("object must be either an InputStream or a Stream, not a '{}'", s.getParam(0u).typeString()); 
     612 
     613            s.push(s.getContext!(MDOutputStream).copy(stream)); 
    592614            return 1; 
    593615        } 
     
    668690        { 
    669691            mOutput.flush(); 
     692            return this; 
     693        } 
     694         
     695        public MDOutputStream copy(InputStream s) 
     696        { 
     697            mOutput.copy(s); 
    670698            return this; 
    671699        }