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 |
|
|
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 |
(* |
(* |