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/branches/idlbasis-devel/src/system/Basis/Implementation/IO/prim-io-fn.sml
ViewVC logotype

Diff of /sml/branches/idlbasis-devel/src/system/Basis/Implementation/IO/prim-io-fn.sml

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

revision 865, Sat Jun 30 03:40:12 2001 UTC revision 866, Mon Jul 2 16:33:10 2001 UTC
# Line 8  Line 8 
8    
9      structure Vector : MONO_VECTOR      structure Vector : MONO_VECTOR
10      structure Array : MONO_ARRAY      structure Array : MONO_ARRAY
11        sharing type Vector.vector = Array.vector      structure ArraySlice : MONO_ARRAY_SLICE
12        sharing type Vector.elem = Array.elem      structure VectorSlice : MONO_VECTOR_SLICE
13          sharing type Vector.vector = Array.vector = ArraySlice.vector = VectorSlice.vector
14          sharing type Vector.elem = Array.elem = ArraySlice.elem = VectorSlice.elem
15          sharing type Array.array = ArraySlice.array
16          sharing type ArraySlice.vector_slice = VectorSlice.slice
17      val someElem : Vector.elem      val someElem : Vector.elem
18    
19      eqtype pos      eqtype pos
20      val compare : (pos * pos) -> order      val compare : (pos * pos) -> order
   
21    ) : PRIM_IO = struct    ) : PRIM_IO = struct
22    
23      structure A = Array      structure A = Array
24      structure V = Vector      structure V = Vector
25        structure AS = ArraySlice
26        structure VS = VectorSlice
27    
28      type elem = A.elem      type elem = A.elem
29      type vector = V.vector      type vector = V.vector
# Line 71  Line 77 
77                  val a = A.array(n, someElem)                  val a = A.array(n, someElem)
78                  val n = reada{buf=a, i=0, sz=NONE}                  val n = reada{buf=a, i=0, sz=NONE}
79                  in                  in
80                    A.extract(a, 0, SOME n)                      AS.vector (AS.slice (a, 0, SOME n))
81                  end                  end
82            fun readaToReadvNB readaNB n = let            fun readaToReadvNB readaNB n = let
83                  val a = A.array(n, someElem)                  val a = A.array(n, someElem)
84                  in                  in
85                    case readaNB{buf=a, i=0, sz=NONE}                    case readaNB{buf=a, i=0, sz=NONE}
86                     of SOME n' => SOME(A.extract(a, 0, SOME n'))                     of SOME n' => SOME(AS.vector (AS.slice (a, 0, SOME n')))
87                      | NONE => NONE                      | NONE => NONE
88                    (* end case *)                    (* end case *)
89                  end                  end
# Line 86  Line 92 
92                  val v = readv nelems                  val v = readv nelems
93                  val len = V.length v                  val len = V.length v
94                  in                  in
95                    A.copyVec {dst=buf, di=i, src=v, si=0, len=NONE};                    A.copyVec {dst=buf, di=i, src=v};
96                    len                    len
97                  end                  end
98            fun readvToReadaNB readvNB {buf, i, sz} = let            fun readvToReadaNB readvNB {buf, i, sz} = let
# Line 96  Line 102 
102                     of SOME v => let                     of SOME v => let
103                          val len = V.length v                          val len = V.length v
104                          in                          in
105                            A.copyVec {dst=buf, di=i, src=v, si=0, len=NONE};                            A.copyVec {dst=buf, di=i, src=v};
106                            SOME len                            SOME len
107                          end                          end
108                      | NONE => NONE                      | NONE => NONE
# Line 152  Line 158 
158    
159      fun augmentWriter (WR wr) = let      fun augmentWriter (WR wr) = let
160            fun writevToWritea writev {buf, i, sz} = let            fun writevToWritea writev {buf, i, sz} = let
161                  val v = A.extract(buf, i, sz)                  val v = AS.vector (AS.slice(buf, i, sz))
162                  in                  in
163                    writev{buf=v, i=0, sz=NONE}                    writev{buf=v, i=0, sz=NONE}
164                  end                  end
# Line 164  Line 170 
170                      | _ => let                      | _ => let
171                          val a = A.array(n, V.sub(buf, i))                          val a = A.array(n, V.sub(buf, i))
172                          in                          in
173                            A.copyVec {dst=a, di=1, src=buf, si=i+1, len=SOME(n-1)};                            AS.copyVec {dst=a, di=1, src=VS.slice(buf,i+1,SOME(n-1))};
174                            writea {buf=a, i=0, sz=NONE}                            writea {buf=a, i=0, sz=NONE}
175                          end                          end
176                    (* end case *)                    (* end case *)
# Line 177  Line 183 
183                      | _ => let                      | _ => let
184                          val a = A.array(n, V.sub(buf, i))                          val a = A.array(n, V.sub(buf, i))
185                          in                          in
186                            A.copyVec {dst=a, di=1, src=buf, si=i+1, len=SOME(n-1)};                            AS.copyVec {dst=a, di=1, src=VS.slice(buf,i+1,SOME(n-1))};
187                            writeaNB {buf=a, i=0, sz=NONE}                            writeaNB {buf=a, i=0, sz=NONE}
188                          end                          end
189                    (* end case *)                    (* end case *)
# Line 229  Line 235 
235              }              }
236            end            end
237    
238    end (* PrimIO *)  (*
239        fun openVector v = let
240            val len = V.length v
241            val pos = ref 0
242            val closed = ref false
243            fun checkClosed () = if !closed then raise IO.ClosedStream else ()
244            fun avail () = len - !pos
245            fun readV n = let
246                val p = !pos
247                val m = Int.min (n, len - p)
248            in
249                checkClosed ();
250                pos := p + m;
251                VS.vector (VS.slice (src, p, SOME m))
252            end
253            fun readA { buf, i, sz } = let
254                val p = !pos
255                val m = case sz of
256                            NONE => Int.min (A.length buf - i, len - p)
257                          | SOME n => Int.min (n, len - p)
258            in
259                checkClosed ();
260                pos := p + m;
261                A.copyVec { dst = buf, di = i, src = VS.slice (src, p, SOME m) };
262                m
263            end
264            fun getPos () = (checkClosed (); !pos)
265            fun setPos i =
266                (checkClosed ();
267                 if i < 0 orelse len < i then raise Subscript else ();
268                 pos := i)
269        in
270            RD { name = "<vector>",
271                 chunkSize = len,
272                 readVec = SOME readV,
273                 readArr = SOME readA,
274                 readVecNB = SOME (SOME o readV),
275                 readArrNB = SOME (SOME o readA),
276                 block = SOME checkClosed,
277                 canInput = SOME (fn () => (checkClosed (); true)),
278                 avail = SOME o avail,
279                 getPos = SOME getPos,
280                 setPos = SOME setPos,
281                 endPos = SOME (fn () => (checkClosed (); len)),
282                 verifyPos = SOME getPos,
283                 close = fn () => closed := true,
284                 ioDesc = NONE }
285        end
286    *)
287        fun openVector v = raise Fail "openVector not implemented yet"
288        fun nullRd () = raise Fail "nullRd not implemented yet"
289        fun nullWr () = raise Fail "nullWr not implemented yet"
290    
291      end (* PrimIO *)

Legend:
Removed from v.865  
changed lines
  Added in v.866

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