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-inputs.sml
ViewVC logotype

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

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

revision 2053, Tue Oct 23 04:40:18 2012 UTC revision 2054, Tue Oct 23 13:59:08 2012 UTC
# Line 200  Line 200 
200          (* the inputs pointer type *)          (* the inputs pointer type *)
201            fun check (ty, name, _, optDflt) = let            fun check (ty, name, _, optDflt) = let
202                  val dfltStm = (case optDflt                  val dfltStm = (case optDflt
203                         of SOME v => (case ty                         of SOME v => let
204                               of Ty.DynSeqTy _ => raise Fail "DynSeqTy"                            (* get default file name for images and sequences *)
205                                fun getName () = (case v
206                                       of IL.E_Lit(Literal.String s) => CL.mkStr s
207                                        | _ => raise Fail "expected string for default nrrd"
208                                      (* end case *))
209                                in
210                                  case ty
211                                   of Ty.DynSeqTy elemTy =>
212                                        GenLoadNrrd.loadSeqFromFile (global name, elemTy, getName())
213                                | Ty.ImageTy info =>                                | Ty.ImageTy info =>
214                                    GenLoadNrrd.loadImage (global name, info, ToC.trExp(ToC.empty, v))                                      GenLoadNrrd.loadImage (global name, info, getName())
215                                | _ => CL.mkBlock(ToC.trAssign(ToC.empty, global name, v))                                | _ => CL.mkBlock(ToC.trAssign(ToC.empty, global name, v))
216                              (* end case *))                                (* end case *)
217                                end
218                          | NONE => CL.mkBlock[                          | NONE => CL.mkBlock[
219                                World.errorMsgAdd(CL.mkStr(concat["undefined input \"", name, "\"\n"])),                                World.errorMsgAdd(CL.mkStr(concat["undefined input \"", name, "\"\n"])),
220                                CL.mkReturn(SOME(CL.mkBool true))                                CL.mkReturn(SOME(CL.mkBool true))
# Line 242  Line 251 
251                  val getDcl = if (Option.isSome optDflt)                  val getDcl = if (Option.isSome optDflt)
252                          then let                          then let
253                            val getName = N.inputGet(tgt, name)                            val getName = N.inputGet(tgt, name)
254                          (* convert the input type to a by-reference C type *)                          (* generate code for a function that returns the current value of
255                            val outTy = (case ty                           * an input global.
256                                   of Ty.BoolTy => CL.T_Ptr(trType ty)                           *)
257                                    | Ty.StringTy => CL.T_Ptr(trType ty)                            fun mkFunc outTy = CL.D_Func([], CL.voidTy, getName,
258                                    | Ty.IntTy => CL.T_Ptr(trType ty)                                  [wrldParam, CL.PARAM([], outTy, "v")],
259                                    | Ty.TensorTy[] => CL.T_Ptr(trType ty)                                  CL.mkBlock(TrTy.copyToC{
260                                    | Ty.TensorTy _ => trType ty                                      ty=ty, dst=CL.mkUnOp(CL.%*, CL.mkVar "v"),
261                                    | Ty.SeqTy _ => trType ty                                      src=global name
262                                    | Ty.DynSeqTy _ => CL.T_Ptr(trType ty)                                    }))
263                                    | Ty.ImageTy _ => CL.T_Ptr CL.charPtr  (* FIXME: for images and sequences, it is not clear what the get function should return.
264     * For now, we just return 0
265     *)
266                            (* for images and sequences, we currently return 0 *)
267                              fun nrrdFunc () = CL.D_Func([], CL.voidTy, getName,
268                                    [wrldParam, CL.PARAM([], CL.T_Ptr CL.voidPtr, "v")],
269                                    CL.mkAssign(CL.mkUnOp(CL.%*, CL.mkVar "v"), CL.mkInt 0))
270                              val func = (case ty
271                                     of Ty.BoolTy => mkFunc(CL.T_Ptr(trType ty))
272                                      | Ty.StringTy => mkFunc(CL.T_Ptr(trType ty))
273                                      | Ty.IntTy => mkFunc(CL.T_Ptr(trType ty))
274                                      | Ty.TensorTy[] => mkFunc(CL.T_Ptr(trType ty))
275                                      | Ty.TensorTy _ => mkFunc(trType ty)
276                                      | Ty.SeqTy _ => mkFunc(trType ty)
277                                      | Ty.DynSeqTy _ => nrrdFunc ()
278                                      | Ty.ImageTy _ => nrrdFunc ()
279                                    | _ => raise Fail(concat["bogus input type ", Ty.toString ty])                                    | _ => raise Fail(concat["bogus input type ", Ty.toString ty])
280                                  (* end case *))                                  (* end case *))
281                            in [                            in
282                              CL.D_Func([], CL.voidTy, getName, [wrldParam, CL.PARAM([], outTy, "v")],                              [func]
283                                CL.mkBlock(                            end
                                 TrTy.copyToC{ty=ty, dst=CL.mkUnOp(CL.%*, CL.mkVar "v"), src=global name}))  
                           ] end  
284                          else []                          else []
285                  val setDcl = (case ty                  val setDcl = (case ty
286                         of Ty.ImageTy info => let                         of Ty.ImageTy info => [
                             val dim = ImageInfo.dim info  
                             in [  
287                                CL.D_Func(                                CL.D_Func(
288                                  [], CL.boolTy, N.inputSetByName(tgt, name),                                  [], CL.boolTy, N.inputSetByName(tgt, name),
289                                  [wrldParam, CL.PARAM(["const"], CL.charPtr, "s")],                                  [wrldParam, CL.PARAM(["const"], CL.charPtr, "s")],
# Line 276  Line 296 
296                                  CL.appendStm(                                  CL.appendStm(
297                                    GenLoadNrrd.setImage (global name, info, CL.mkVar "nin"),                                    GenLoadNrrd.setImage (global name, info, CL.mkVar "nin"),
298                                    CL.mkReturn(SOME(CL.mkBool false))))                                    CL.mkReturn(SOME(CL.mkBool false))))
299                              ] end                              ]
 (* dynamic sequence loader prototype:  
 Diderot_DynSeq_t *Diderot_DynSeqLoadTY (  
     WorldPrefix_t *wrld,  
     Nrrd *nin,  
     unsigned int nDims,  
     unsigned int *dims);  
 *)  
 (*  
300                          | Ty.DynSeqTy elemTy => [                          | Ty.DynSeqTy elemTy => [
301                                CL.D_Func(                                CL.D_Func(
302                                  [], CL.boolTy, N.inputSetByName(tgt, name),                                  [], CL.boolTy, N.inputSetByName(tgt, name),
303                                  [wrldParam, CL.PARAM(["const"], CL.charPtr, "s")],                                  [wrldParam, CL.PARAM(["const"], CL.charPtr, "s")],
304                                  CL.mkBlock[                                  CL.appendStm(
305                                      CL.mkReturn(SOME(                                    GenLoadNrrd.loadSeqFromFile (global name, elemTy, CL.mkVar "s"),
306                                        CL.mkBinOp(CL.mkVar "DIDEROT_FAIL", CL.#==,                                    CL.mkReturn(SOME(CL.mkBool false)))),
                                         CL.mkApply(N.loadSeq elemTy, [  
                                             CL.mkCast(wrldPrefixTy, CL.mkVar "wrld"),  
                                             CL.mkVar "s", CL.mkUnOp(CL.%&, global name)  
                                           ]))))  
                                   ]),  
307                                CL.D_Func(                                CL.D_Func(
308                                  [], CL.boolTy, N.inputSet(tgt, name),                                  [], CL.boolTy, N.inputSet(tgt, name),
309                                  [wrldParam, CL.PARAM([], nrrdPtrTy, "nin")],                                  [wrldParam, CL.PARAM([], nrrdPtrTy, "nin")],
310                                  CL.mkBlock[                                  CL.appendStm(
311                                      CL.mkReturn(SOME(                                    GenLoadNrrd.loadSeq (global name, elemTy, CL.mkVar "nin"),
312                                        CL.mkBinOp(CL.mkVar "DIDEROT_FAIL", CL.#==,                                    CL.mkReturn(SOME(CL.mkBool false))))
                                         CL.mkApply(N.loadSeq elemTy, [  
                                             CL.mkCast(wrldPrefixTy, CL.mkVar "wrld"),  
                                             CL.mkVar "nin", CL.mkUnOp(CL.%&, global name)  
                                           ]))))  
                                   ])  
313                              ]                              ]
 *)  
                         | Ty.DynSeqTy elemTy => raise Fail "dynamic input not supported yet"  
314                          | _ => [                          | _ => [
315                                CL.D_Func(                                CL.D_Func(
316                                  [], CL.boolTy, N.inputSet(tgt, name),                                  [], CL.boolTy, N.inputSet(tgt, name),

Legend:
Removed from v.2053  
changed lines
  Added in v.2054

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