# HG changeset patch # User Adam Chlipala # Date 1253382937 14400 # Node ID 6f9d1565de56027a19fda69bc31c093c41f56306 # Parent 7e7edfb6fe8248a406eb13cb9480bfa787a971ea Testing Dlist MaxLength with constant value diff -r 7e7edfb6fe82 -r 6f9d1565de56 demo/more/dlist.ur --- a/demo/more/dlist.ur Sat Sep 19 13:44:12 2009 -0400 +++ b/demo/more/dlist.ur Sat Sep 19 13:55:37 2009 -0400 @@ -66,29 +66,33 @@ set dl (Nonempty {Head = Cons (x, hd), Tail = tlS}) end -fun renderDyn [ctx] [ctx ~ body] [t] (f : t -> position -> xml (ctx ++ body) [] []) filter pos dl = +fun renderDyn [ctx] [ctx ~ body] [t] (f : t -> position -> xml (ctx ++ body) [] []) filter pos len dl = return | Nonempty {Head = hd, Tail = tlTop} => let - fun render' prev dl'' = - case dl'' of - Nil => - | Cons (v, tl) => - let - val pos = case prev of - None => headPos dl - | Some prev => tailPos prev tl tlTop - in - )}/> - - end + fun render' prev dl'' len = + case len of + Some 0 => + | _ => + case dl'' of + Nil => + | Cons (v, tl) => + let + val pos = case prev of + None => headPos dl + | Some prev => tailPos prev tl tlTop + val len = Option.mp (fn n => n - 1) len + in + )}/> + + end fun skip pos hd = case pos of @@ -101,15 +105,33 @@ skip (pos-1) tl' in case pos of - None => return (render' None hd) + None => return (render' None hd len) | Some pos => hd <- skip pos hd; - return (render' None hd) + return (render' None hd len) end}/> -fun renderFlat [ctx] [ctx ~ body] [t] (f : t -> position -> xml (ctx ++ body) [] []) filter ls = - List.mapX (fn p => f p.1 p.2) ls +fun renderFlat [ctx] [ctx ~ body] [t] (f : t -> position -> xml (ctx ++ body) [] []) filter = + let + fun renderFlat' len ls = + case len of + Some 0 => + | _ => + case ls of + [] => + | p :: ls => + let + val len = + case len of + None => None + | Some n => Some (n - 1) + in + {f p.1 p.2}{renderFlat' len ls} + end + in + renderFlat' + end val split [t] = let @@ -158,11 +180,14 @@ fun render [ctx] [ctx ~ body] [t] f (r : {Filter : t -> signal bool, Sort : signal (option (t -> t -> signal bool)), - StartPosition : signal (option int)}) dl = - + return (renderDyn f r.Filter pos dl) + None => return (renderDyn f r.Filter pos len dl) | Some cmp => dl' <- signal dl; elems <- (case dl' of @@ -201,7 +226,7 @@ None => elems | Some pos => skip pos elems in - return (renderFlat f r.Filter elems) + return (renderFlat f r.Filter len elems) end}/> diff -r 7e7edfb6fe82 -r 6f9d1565de56 demo/more/dlist.urs --- a/demo/more/dlist.urs Sat Sep 19 13:44:12 2009 -0400 +++ b/demo/more/dlist.urs Sat Sep 19 13:55:37 2009 -0400 @@ -13,6 +13,7 @@ val render : ctx ::: {Unit} -> [ctx ~ body] => t ::: Type -> (t -> position -> xml (ctx ++ body) [] []) -> {StartPosition : signal (option int), + MaxLength : signal (option int), Filter : t -> signal bool, Sort : signal (option (t -> t -> signal bool)) (* <= *)} -> dlist t diff -r 7e7edfb6fe82 -r 6f9d1565de56 demo/more/grid.ur --- a/demo/more/grid.ur Sat Sep 19 13:44:12 2009 -0400 +++ b/demo/more/grid.ur Sat Sep 19 13:55:37 2009 -0400 @@ -217,6 +217,7 @@ end) {StartPosition = return (Some 1), + MaxLength = return (Some 2), Filter = fn all => row <- signal all.Row; foldR3 [colMeta M.row] [fst3] [thd3] [fn _ => M.row -> signal bool]