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

SCM Repository

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

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

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

revision 2844, Tue Dec 9 18:05:29 2014 UTC revision 2845, Fri Dec 12 06:46:23 2014 UTC
# Line 1  Line 1 
1  (*hashs Ein Function after substitution*)  (*hash Ein operator*)
2  structure hashEin = struct  structure hashEin = struct
3      local      local
4      structure E = Ein      structure E = Ein
5      in      in
6    
7  (*hash value of the expression *)      (*hasfn:EIN->hash value
8  fun hashfn(Ein.EIN{params, index, body})= let      *hash value of the expression
9        *)
10        fun hashfn(Ein.EIN{body,...})= let
11     val changed =ref false     val changed =ref false
12            fun hash body =let
13     fun hash body =(case body              fun iter[e]=hash e
14                  | iter(e1::es)=hash e1+iter es
15                in (case body
16          of E.Const _ =>  0w3          of E.Const _ =>  0w3
17          | E.Tensor _=>  0w5          | E.Tensor _=>  0w5
18          | E.Field _ =>  0w7          | E.Field _ =>  0w7
# Line 19  Line 23 
23          | E.Eps2 _    => 0w71          | E.Eps2 _    => 0w71
24          | E.Partial _ =>  0w23          | E.Partial _ =>  0w23
25          | E.Conv _=> 0w29          | E.Conv _=> 0w29
26          | E.Sum(c,e)=> 0w31+ hash(e)                  | E.Sum(c,e)=> 0w31+ hash e
27          | E.Neg e =>  0w37+ hash(e)                  | E.Neg e =>  0w37+ hash e
28          | E.Lift e =>  0w71+ hash(e)                  | E.Lift e =>  0w71+ hash e
29          | E.Add es =>let                  | E.Add es =>0w41+iter es
30              fun addhash([])=0w41                  | E.Sub(e1,e2) =>  0w43+iter[e1,e2]
31              |addhash(e::es)=hash(e)+addhash(es)                  | E.Div(e1,e2)=>  0w47+iter[e1,e2]
32              in addhash(es) end                  | E.Apply(e1,e2)=>  0w53+iter[e1,e2]
33          | E.Sub(e1,e2) =>  0w43+hash(e1)+ hash (e2)                  | E.Probe(e1,e2)=>  0w5+iter[e1,e2]
34          | E.Div(e1,e2)=>  0w47+ hash(e1)+ hash (e2)                  | E.Img (fid,alpha,es) => 0w61+iter es
35          | E.Apply(e1,e2)=>  0w53+hash(e1)+ hash(e2)                  | E.Prod es=> 0w67+iter es
         | E.Probe(e1,e2)=>  0w59+hash(e1)+hash(e2)  
         | E.Img (fid,alpha,es) =>  let  
             fun addhash([])=0w61  
             |addhash(e::es)=hash(e)+addhash(es)  
             in addhash(es) end  
         | E.Prod es=> let  
             fun addhash([])=0w67  
             |addhash(e::es)=hash(e)+addhash(es)  
             in addhash(es) end  
36          (*end case*))          (*end case*))
37     in hash(body) end              end
38            in
39                hash body
40            end
41    
42  end (* local *)  end (* local *)
43    

Legend:
Removed from v.2844  
changed lines
  Added in v.2845

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