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

SCM Repository

[diderot] Diff of /trunk/src/basis/basis.sml
ViewVC logotype

Diff of /trunk/src/basis/basis.sml

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

revision 47, Tue Apr 13 14:57:27 2010 UTC revision 79, Tue May 25 01:55:48 2010 UTC
# Line 6  Line 6 
6   * Type definitions for Basis functions.   * Type definitions for Basis functions.
7   *)   *)
8    
9  structure Basis =  structure Basis : sig
10    struct  
11        val env : Env.env
12    
13      (* find an operator by name; this returns a singleton list for regular operators (including
14       * type-index operators) and a list of variables for overloaded operators.
15       *)
16        val findOp : Atom.atom -> AST.var list
17    
18      end = struct
19    
20        structure N = BasisNames
21        structure BV = BasisVars
22        structure ATbl = AtomTable
23    
24      (* non-overloaded operators, etc. *)
25        val basis = [
26            (* non-overloaded operators *)
27              BV.op_at,
28              BV.op_D,
29              BV.op_norm,
30              BV.op_not,
31            (* functions *)
32              BV.fn_CL,
33              BV.fn_convolve,
34              BV.fn_cos,
35              BV.fn_dot,
36              BV.fn_inside,
37              BV.fn_load,
38              BV.fn_pow,
39    (*
40        val fn_principleEvec = Atom.atom "principleEvec"
41    *)
42              BV.fn_sin,
43            (* kernels *)
44              BV.kn_bspln3,
45              BV.kn_tent
46            ]
47    
48        (* seed the basis environment *)
49          val env = let
50                fun ins (x, env) = Env.insertGlobal(env, Atom.atom(Var.nameOf x), x)
51                in
52                  List.foldl ins (Env.new()) basis
53                end
54    
55      (* overloaded operators *)
56        val overloads = [
57              (N.op_add, [BV.add_ii, BV.add_tt]),
58              (N.op_sub, [BV.sub_ii, BV.sub_tt]),
59              (N.op_mul, [BV.mul_ii, BV.mul_rr, BV.mul_rt, BV.mul_tr]),
60              (N.op_div, [BV.div_ii, BV.div_rr, BV.div_tr]),
61              (N.op_lt, [BV.lt_ii, BV.lt_rr]),
62              (N.op_lte, [BV.lte_ii, BV.lte_rr]),
63              (N.op_equ, [BV.equ_bb, BV.equ_ii, BV.equ_ss, BV.equ_rr]),
64              (N.op_neq, [BV.neq_bb, BV.neq_ii, BV.neq_ss, BV.neq_rr]),
65              (N.op_gte, [BV.gte_ii, BV.gte_rr]),
66              (N.op_gt, [BV.gt_ii, BV.gt_rr]),
67              (N.op_neg, [BV.neg_i, BV.neg_t, BV.neg_f])
68            ]
69    
70        local
71          val lookup = let
72                val tbl = ATbl.mkTable(64, Fail "op table")
73                in
74                  List.app (ATbl.insert tbl) overloads;
75                  ATbl.lookup tbl
76                end
77        in
78        fun findOp name = (case Env.findVar(env, name)
79               of SOME x => [x]
80                | NONE => lookup name
81              (* end case *))
82        end (* local *)
83    
84    end    end

Legend:
Removed from v.47  
changed lines
  Added in v.79

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