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/trunk/src/ml-nlffi-lib/memory/bitop-fn.sml
ViewVC logotype

Annotation of /sml/trunk/src/ml-nlffi-lib/memory/bitop-fn.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1029 - (view) (download)

1 : blume 1029 (*
2 :     * Bit operations on integers (as if they were words).
3 :     *
4 :     * (C) 2002, Lucent Technologies, Bell Labs
5 :     *
6 :     * author: Matthias Blume (blume@research.bell-labs.com)
7 :     * (based on suggestions from Allen Leung)
8 :     *)
9 :     functor IntBitOps (structure I : INTEGER structure W : WORD) : sig
10 :    
11 :     (* We use a functor to express this stuff generically.
12 :     * If efficiency is a concern, it may be necessary to
13 :     * expand this "by hand".... *)
14 :    
15 :     type int = I.int
16 :    
17 :     (* unsigned arithmetic.
18 :     * non-overflow trapping
19 :     *)
20 :     val ++ : int * int -> int
21 :     val -- : int * int -> int
22 :     val ** : int * int -> int
23 :     val udiv : int * int -> int
24 :     val umod : int * int -> int
25 :     val umin : int * int -> int
26 :     val umax : int * int -> int
27 :    
28 :     (* bit ops *)
29 :     val notb : int -> int
30 :     val andb : int * int -> int
31 :     val orb : int * int -> int
32 :     val xorb : int * int -> int
33 :     val << : int * Word.word -> int
34 :     val >> : int * Word.word -> int
35 :     val ~>> : int * Word.word -> int
36 :    
37 :     (* unsigned comparisons *)
38 :     val ule : int * int -> bool
39 :     val ulg : int * int -> bool
40 :     val ugt : int * int -> bool
41 :     val uge : int * int -> bool
42 :     val ucompare : int * int -> order
43 :    
44 :     end = struct
45 :    
46 :     type int = I.int
47 :    
48 :     local
49 :     val to = W.fromLargeInt o I.toLarge
50 :     val from = I.fromLarge o W.toLargeIntX
51 :     fun bop f (x, y) = from (f (to x, to y)) (* binary op *)
52 :     fun uop f x = from (f (to x)) (* unary op *)
53 :     fun sop f (x, y) = from (f (to x, y)) (* shift-like op *)
54 :     fun cop f (x, y) = f (to x, to y) (* comparison-like op *)
55 :     in
56 :     val ++ = bop W.+
57 :     val -- = bop W.-
58 :     val ** = bop W.*
59 :     val udiv = bop W.div
60 :     val umod = bop W.mod
61 :     val andb = bop W.andb
62 :     val orb = bop W.orb
63 :     val xorb = bop W.xorb
64 :     val notb = uop W.notb
65 :    
66 :     val umax = bop W.max
67 :     val umin = bop W.min
68 :    
69 :     val << = sop W.<<
70 :     val >> = sop W.>>
71 :     val ~>> = sop W.~>>
72 :    
73 :     val ulg = cop W.<
74 :     val ule = cop W.<=
75 :     val ugt = cop W.>
76 :     val uge = cop W.>=
77 :     val ucompare = cop W.compare
78 :     end
79 :     end

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