Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /branches/charisee/src/compiler/ein/hash-ein.sml
ViewVC logotype

Annotation of /branches/charisee/src/compiler/ein/hash-ein.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3448 - (view) (download)

1 : cchiw 2845 (*hash Ein operator*)
2 : jhr 3060 structure HashEin = struct
3 : cchiw 2498 local
4 :     structure E = Ein
5 : cchiw 3444 structure P = Printer
6 : cchiw 2498 in
7 :    
8 : cchiw 2845 (*hasfn:EIN->hash value
9 :     *hash value of the expression
10 :     *)
11 :     fun hashfn(Ein.EIN{body,...})= let
12 : cchiw 2903
13 :    
14 : cchiw 2845 fun hash body =let
15 : cchiw 3094 fun hashint i = Word.fromInt i
16 : cchiw 2845 fun iter[e]=hash e
17 :     | iter(e1::es)=hash e1+iter es
18 : cchiw 3174 fun hashMu (E.C c)=hashint c+0w17
19 : cchiw 3094 | hashMu (E.V v)=hashint v
20 :     fun hashAlpha []=0w3
21 :     | hashAlpha(e1::es)=hashMu(e1)+hashAlpha es
22 :     fun hashDels([])=0w3
23 :     | hashDels((i,j)::es)=hashMu i+hashMu j +hashDels es
24 : cchiw 2845 in (case body
25 : cchiw 3448 of E.B(E.Const _) => 0w3
26 :     | E.B(E.ConstR _) => 0w5
27 : cchiw 3444 | E.Tensor (_,alpha) => 0w23+hashAlpha alpha
28 : cchiw 3448 | E.G(E.Delta _) => 0w7
29 :     | E.G(E.Epsilon _ ) => 0w13
30 :     | E.G(E.Eps2 _) => 0w17
31 : cchiw 3444 | E.Field(_,alpha) => 0w29+hashAlpha alpha
32 : cchiw 3448 | E.Lift e1 => 0w61+ hash e1
33 : cchiw 3444 | E.Conv(_,alpha,_,dx) => 0w37+hashAlpha alpha+hashAlpha dx+hashint(length(dx))
34 : cchiw 3448 | E.Partial alpha => 0w19+hashAlpha alpha
35 :     | E.Apply(e1,e2) => 0w97+iter[e1,e2]
36 :     | E.Probe(e1,e2) => 0w101+iter[e1,e2]
37 :     | E.Value _ => 0w11
38 :     | E.Img (_,alpha,es) => 0w43+hashAlpha alpha +iter es
39 : cchiw 3444 | E.Krn (_,dels,pos) => 0w41+ hashDels dels+hash pos
40 :     | E.Sum(c,e1) => 0w53+ hash e1
41 : cchiw 3448 | E.Op1(e1,e2) => (case e1
42 : cchiw 3444 of E.Cosine => 0w113 + hash e2
43 :     | E.ArcCosine => 0w127 + hash e2
44 :     | E.Sine => 0w131 + hash e2
45 :     | E.ArcSine => 0w137 + hash e2
46 :     | E.Tangent => 0w139 + hash e2
47 :     | E.ArcTangent => 0w149 + hash e2
48 : cchiw 3448 | E.Neg => 0w59 + hash e2
49 :     | E.Sqrt => 0w67 + hash e2
50 :     | E.PowInt _ => 0w107+ hash e2
51 :     | E.PowReal _ => 0w109+ hash e2
52 :     | E.Exp => 0w151+ hash e2
53 :     | E.PowEmb _ => 0w157+ hash e2
54 :     (* end case*))
55 :     | E.Op2(E.Sub,e1,e2) => 0w79+iter[e1,e2]
56 :     | E.Op2(E.Div,e1,e2) => 0w83+iter[e1,e2]
57 :     | E.Opn(E.Add, es) => 0w71+iter es
58 :     | E.Opn(E.Prod ,es) => 0w103+iter es
59 : cchiw 2845 (*end case*))
60 :     end
61 : cchiw 3444 in hash body
62 : cchiw 2845 end
63 : cchiw 2498
64 :     end (* local *)
65 :    
66 : jhr 3060 end

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