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

SCM Repository

[smlnj] Annotation of /sml/branches/num64/system/Basis/Implementation/word8.sml
ViewVC logotype

Annotation of /sml/branches/num64/system/Basis/Implementation/word8.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2162 - (view) (download)
Original Path: sml/trunk/system/Basis/Implementation/word8.sml

1 : monnier 416 (* word8.sml
2 :     *
3 :     * COPYRIGHT (c) 1995 AT&T Bell Laboratories.
4 :     *
5 :     *)
6 :     structure Word8Imp : WORD =
7 :     struct
8 :    
9 :     structure W8 = InlineT.Word8
10 :     structure W31 = InlineT.Word31
11 :     structure LW = Word32Imp
12 :    
13 : monnier 429 type word = Word8.word (* 31 bits *)
14 : monnier 416
15 :     val wordSize = 8
16 :     val wordSizeW = 0w8
17 :     val wordShift = InlineT.Word31.-(0w31, wordSizeW)
18 :     fun adapt oper args = W8.andb(oper args, 0wxFF)
19 :    
20 :     val toInt : word -> int = W8.toInt
21 :     val toIntX : word -> int = W8.toIntX
22 :     val fromInt : int -> word = W8.fromInt
23 :    
24 :     val toLargeWord : word -> LargeWord.word = W8.toLargeWord
25 :     val toLargeWordX = W8.toLargeWordX
26 :     val fromLargeWord = W8.fromLargeWord
27 :    
28 :     val toLargeInt : word -> LargeInt.int = LW.toLargeInt o toLargeWord
29 :     val toLargeIntX : word -> LargeInt.int = W8.toLargeIntX
30 :     val fromLargeInt: LargeInt.int -> word = W8.fromLargeInt
31 :    
32 :    
33 :     (** These should be inline functions **)
34 :     fun << (w : word, k) = if (InlineT.DfltWord.<=(wordSizeW, k))
35 :     then 0w0
36 :     else adapt W8.lshift (w, k)
37 :     fun >> (w : word, k) = if (InlineT.DfltWord.<=(wordSizeW, k))
38 :     then 0w0
39 :     else W8.rshiftl(w, k)
40 :     fun ~>> (w : word, k) = if (InlineT.DfltWord.<=(wordSizeW, k))
41 :     then adapt W8.rshift (W8.lshift(w, wordShift), 0w31)
42 :     else adapt W8.rshift
43 :     (W8.lshift(w, wordShift), InlineT.DfltWord.+(wordShift, k))
44 :    
45 :     val orb : word * word -> word = W8.orb
46 :     val xorb : word * word -> word = W8.xorb
47 :     val andb : word * word -> word = W8.andb
48 :     val notb : word -> word = adapt W8.notb
49 :    
50 : mblume 1683 val op * : word * word -> word = op *
51 :     val op + : word * word -> word = op +
52 :     val op - : word * word -> word = op -
53 :     val op div : word * word -> word = op div
54 :     val op mod : word * word -> word = op mod
55 : monnier 416
56 :     fun compare (w1, w2) =
57 :     if (W8.<(w1, w2)) then LESS
58 :     else if (W8.>(w1, w2)) then GREATER
59 :     else EQUAL
60 : mblume 1683 val op > : word * word -> bool = op >
61 :     val op >= : word * word -> bool = op >=
62 :     val op < : word * word -> bool = op <
63 :     val op <= : word * word -> bool = op <=
64 : monnier 416
65 : mblume 1381 val ~ : word -> word = ~
66 : mblume 1683 val min : word * word -> word = W8.min
67 :     val max : word * word -> word = W8.max
68 : monnier 416
69 :     fun fmt radix = (NumFormat.fmtWord radix) o toLargeWord
70 :     val toString = fmt StringCvt.HEX
71 :    
72 :     fun scan radix = let
73 :     val scanLarge = NumScan.scanWord radix
74 :     fun scan getc cs = (case (scanLarge getc cs)
75 :     of NONE => NONE
76 :     | (SOME(w, cs')) => if InlineT.Word32.>(w, 0w255)
77 :     then raise Overflow
78 :     else SOME(fromLargeWord w, cs')
79 :     (* end case *))
80 :     in
81 :     scan
82 :     end
83 :     val fromString = PreBasis.scanString (scan StringCvt.HEX)
84 :    
85 :     end (* structure Word8 *)

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