Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] View of /MLRISC/releases/release-110.60/library/stringOutStream.sml
ViewVC logotype

View of /MLRISC/releases/release-110.60/library/stringOutStream.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2203 - (download) (annotate)
Thu Nov 9 21:29:12 2006 UTC (12 years, 9 months ago) by blume
File size: 1408 byte(s)
Release 110.60
(* 
 * The basis seems to be missing a string (out)stream type.
 * This is it.
 *
 * -- Allen.
 *)
structure StringOutStream :> STRING_OUTSTREAM =
struct

   structure TextIO = TextIO
   structure TextPrimIO = TextPrimIO

   type streambuf = string list ref

   fun mkStreamBuf ()    = ref [] : streambuf
   fun getString (ref s) = String.concat(List.rev s)
   fun setString (r,s)   = r := [s]     

   fun openStringOut buffer =
   let fun writeVec sl =
	   (buffer := CharVectorSlice.vector sl :: !buffer;
	    CharVectorSlice.length sl)
       fun writeArr sl =
	   (buffer := CharArraySlice.vector sl :: !buffer;
	    CharArraySlice.length sl)
       val writer =
           TextPrimIO.WR 
                { name       = "string stream",
                chunkSize  = 512,
                writeVec   = SOME writeVec,
                writeArr   = SOME writeArr,
                writeVecNB = SOME (SOME o writeVec),
                writeArrNB = SOME (SOME o writeArr),
                block      = NONE,
                canOutput  = NONE,
                getPos     = NONE,
                setPos     = NONE,
                endPos     = NONE,
                verifyPos  = NONE,
                close      = fn () => (),
                ioDesc     = NONE
              }
       val outstream = TextIO.mkOutstream 
              (TextIO.StreamIO.mkOutstream (writer,IO.NO_BUF))
   in  outstream
   end

end


root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0