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

SCM Repository

[smlnj] Diff of /sml/trunk/src/system/Basis/Implementation/IO/prim-io-fn.sml
ViewVC logotype

Diff of /sml/trunk/src/system/Basis/Implementation/IO/prim-io-fn.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1350, Fri Sep 5 21:34:27 2003 UTC revision 1381, Wed Sep 17 21:28:41 2003 UTC
# Line 31  Line 31 
31    
32      type elem = A.elem      type elem = A.elem
33      type vector = V.vector      type vector = V.vector
34        type vector_slice = VS.slice
35      type array = A.array      type array = A.array
36        type array_slice = AS.slice
37    
38      type pos = pos      type pos = pos
39    
40      val compare = compare      val compare = compare
# Line 40  Line 43 
43          name      : string,          name      : string,
44          chunkSize : int,          chunkSize : int,
45          readVec   : (int -> vector) option,          readVec   : (int -> vector) option,
46          readArr   : ({buf : array, i : int, sz : int option} -> int) option,          readArr   : (array_slice -> int) option,
47          readVecNB : (int -> vector option) option,          readVecNB : (int -> vector option) option,
48          readArrNB : ({buf : array, i : int, sz : int option} -> int option) option,          readArrNB : (array_slice -> int option) option,
49          block     : (unit -> unit) option,          block     : (unit -> unit) option,
50          canInput  : (unit -> bool) option,          canInput  : (unit -> bool) option,
51          avail     : unit -> int option,          avail     : unit -> int option,
# Line 57  Line 60 
60      datatype writer = WR of {      datatype writer = WR of {
61          name       : string,          name       : string,
62          chunkSize  : int,          chunkSize  : int,
63          writeVec   : ({buf : vector, i : int, sz : int option} -> int) option,          writeVec   : (vector_slice -> int) option,
64          writeArr   : ({buf : array, i : int, sz : int option} -> int) option,          writeArr   : (array_slice -> int) option,
65          writeVecNB : ({buf : vector, i : int, sz : int option} -> int option) option,          writeVecNB : (vector_slice -> int option) option,
66          writeArrNB : ({buf : array, i : int, sz : int option} -> int option) option,          writeArrNB : (array_slice -> int option) option,
67          block      : (unit -> unit) option,          block      : (unit -> unit) option,
68          canOutput  : (unit -> bool) option,          canOutput  : (unit -> bool) option,
69          getPos     : (unit -> pos) option,          getPos     : (unit -> pos) option,
# Line 79  Line 82 
82      fun augmentReader (RD rd) = let      fun augmentReader (RD rd) = let
83            fun readaToReadv reada n = let            fun readaToReadv reada n = let
84                  val a = A.array(n, someElem)                  val a = A.array(n, someElem)
85                  val n = reada{buf=a, i=0, sz=NONE}                  val n = reada (AS.full a)
86                  in                  in
87                    AS.vector (AS.slice (a, 0, SOME n))                    AS.vector (AS.slice (a, 0, SOME n))
88                  end                  end
89            fun readaToReadvNB readaNB n = let            fun readaToReadvNB readaNB n = let
90                  val a = A.array(n, someElem)                  val a = A.array(n, someElem)
91                  in                  in
92                    case readaNB{buf=a, i=0, sz=NONE}                    case readaNB (AS.full a)
93                     of SOME n' => SOME(AS.vector (AS.slice(a, 0, SOME n')))                     of SOME n' => SOME(AS.vector (AS.slice(a, 0, SOME n')))
94                      | NONE => NONE                      | NONE => NONE
95                    (* end case *)                    (* end case *)
96                  end                  end
97            fun readvToReada readv {buf, i, sz} = let            fun readvToReada readv asl = let
98                  val nelems = (case sz of NONE => A.length buf - i | SOME n => n)                  val (a, start, nelems) = AS.base asl
99                  val v = readv nelems                  val v = readv nelems
100                  val len = V.length v                  val len = V.length v
101                  in                  in
102                    A.copyVec {dst=buf, di=i, src=v};                    A.copyVec {dst=a, di=start, src=v};
103                    len                    len
104                  end                  end
105            fun readvToReadaNB readvNB {buf, i, sz} = let            fun readvToReadaNB readvNB asl = let
106                  val nelems = (case sz of NONE => A.length buf - i | SOME n => n)                val (a, start, nelems) = AS.base asl
107                  in                  in
108                    case readvNB nelems                    case readvNB nelems
109                     of SOME v => let                     of SOME v => let
110                          val len = V.length v                          val len = V.length v
111                          in                          in
112                            A.copyVec {dst=buf, di=i, src=v};                        A.copyVec {dst=a, di=start, src=v};
113                            SOME len                            SOME len
114                          end                          end
115                      | NONE => NONE                      | NONE => NONE
# Line 161  Line 164 
164            end            end
165    
166      fun augmentWriter (WR wr) = let      fun augmentWriter (WR wr) = let
167            fun writevToWritea writev {buf, i, sz} = let            fun writevToWritea writev asl = writev (VS.full (AS.vector asl))
168                  val v = AS.vector (AS.slice (buf, i, sz))            fun writeaToWritev writea vsl =
169                  in                case VS.length vsl of
170                    writev{buf=v, i=0, sz=NONE}                    0 => 0
171                  end                  | n => let val a = A.array (n, VS.sub (vsl, 0))
172            fun writeaToWritev writea {buf, i, sz} = let                         in
173                  val n = (case sz of NONE => V.length buf - i | (SOME n) => n)                             AS.copyVec { src = VS.subslice (vsl, 1, NONE),
174                  in                                          dst = a, di = 1 };
175                    case n                             writea (AS.full a)
176                     of 0 => 0                         end
177                      | _ => let            fun writeaToWritevNB writeaNB vsl =
178                          val a = A.array(n, V.sub(buf, i))                case VS.length vsl of
179                          in                    0 => SOME 0
180                            AS.copyVec { src = VS.slice (buf, i+1, SOME (n - 1)),                  | n => let val a = A.array (n, VS.sub (vsl, 0))
181                                         dst = a,                         in
182                                         di = 1 };                             AS.copyVec { src = VS.subslice (vsl, 1, NONE),
183                            writea {buf=a, i=0, sz=NONE}                                          dst = a, di = 1 };
184                          end                             writeaNB (AS.full a)
                   (* end case *)  
                 end  
           fun writeaToWritevNB writeaNB {buf, i, sz} = let  
                 val n = (case sz of NONE => V.length buf - i | (SOME n) => n)  
                 in  
                   case n  
                    of 0 => SOME 0  
                     | _ => let  
                         val a = A.array(n, V.sub(buf, i))  
                         in  
                           AS.copyVec { src = VS.slice (buf, i+1, SOME (n-1)),  
                                        dst = a,  
                                        di = 1 };  
                           writeaNB {buf=a, i=0, sz=NONE}  
                         end  
                   (* end case *)  
185                  end                  end
186            val writeVec' = (case wr            val writeVec' = (case wr
187                   of {writeVec=SOME f, ...} => SOME f                   of {writeVec=SOME f, ...} => SOME f

Legend:
Removed from v.1350  
changed lines
  Added in v.1381

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