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

SCM Repository

[diderot] Diff of /branches/vis12/src/compiler/c-util/gen-load-nrrd.sml
ViewVC logotype

Diff of /branches/vis12/src/compiler/c-util/gen-load-nrrd.sml

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

revision 2051, Mon Oct 22 14:14:10 2012 UTC revision 2052, Mon Oct 22 20:27:12 2012 UTC
# Line 22  Line 22 
22     *)     *)
23      val setImage : CLang.exp * ImageInfo.info * CLang.exp -> CLang.stm      val setImage : CLang.exp * ImageInfo.info * CLang.exp -> CLang.stm
24    
25        val loadSeq : CLang.exp * TreeIL.Ty.ty * CLang.exp -> CLang.stm
26    
27    end = struct    end = struct
28    
29      structure CL = CLang      structure CL = CLang
30      structure N = CNames      structure N = CNames
31        structure Ty = TreeIL.Ty
32    
33      val wrldPrefixTy = CL.T_Ptr(CL.T_Named "WorldPrefix_t")      val wrldPrefixTy = CL.T_Ptr(CL.T_Named "WorldPrefix_t")
34    
# Line 50  Line 53 
53      val loadImage = doImage N.loadImage      val loadImage = doImage N.loadImage
54      val setImage = doImage N.setImage      val setImage = doImage N.setImage
55    
56        fun loadSeq (lhs, elemTy, nrrdFile) = let
57              val (nDims, dimInit, dimExp, elemTy) = (case elemTy
58                     of Ty.TensorTy(dims as _::_) => let
59                          val nDims = List.length dims
60                          fun lp (_, [], init) = CL.I_Array(List.rev init)
61                            | lp (i, d::dd, init) =
62                                lp(i+1, dd, (i, CL.I_Exp(CL.mkInt(IntInf.fromInt d)))::init)
63                          val dimInit = CL.mkDecl(
64                                CL.T_Ptr(CL.T_Named "unsigned int"), "_dims",
65                                SOME(lp(0, dims, [])))
66                          in
67                            (nDims, [dimInit], CL.mkVar "_dims", Ty.TensorTy[])
68                          end
69                      | Ty.SeqTy ty' => raise Fail "loading sequences of type not supported yet"
70                      | _ => (0, [], CL.mkInt 0, elemTy)
71                    (* end case *))
72              val loadFn = N.loadDynSeqFromFile elemTy
73              in CL.mkBlock (
74                dimInit @ [
75                    CL.mkAssign(
76                      lhs,
77                      CL.E_Apply(loadFn, [
78                          CL.mkCast(CL.T_Ptr(CL.T_Named "WorldPrefix_t"), CL.mkVar "wrld"),
79                          nrrdFile,
80                          CL.mkInt(IntInf.fromInt nDims),
81                          dimExp
82                        ])),
83                    CL.mkIfThen(
84                      CL.mkBinOp(lhs, CL.#==, CL.mkInt 0),
85                      CL.mkReturn(SOME(CL.mkVar "true")))
86                  ]
87              ) end
88    
89    end    end
90    
91  (*  (*

Legend:
Removed from v.2051  
changed lines
  Added in v.2052

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