add init_grid func
This commit is contained in:
parent
63bad67c1b
commit
1d60878428
17
src/vec2.ml
17
src/vec2.ml
|
|
@ -21,6 +21,12 @@ let ( + ) a b = Pair.map_same2 ( + ) a b
|
|||
let ( - ) a b = Pair.map_same2 ( - ) a b
|
||||
let ( = ) a b = Pair.equal ( = ) ( = ) a b
|
||||
|
||||
let grid_vec2_of_idx ~width ~idx =
|
||||
let y = idx / width in
|
||||
let x = idx mod width in
|
||||
x, y
|
||||
;;
|
||||
|
||||
let at (grid : 'a grid) (point : t) =
|
||||
let x, y = point in
|
||||
if x >= 0 && x < grid.width && y >= 0 && y < grid.height
|
||||
|
|
@ -35,9 +41,14 @@ let at_e (grid : 'a grid) (point : t) =
|
|||
let find (grid : 'a grid) pred =
|
||||
let open Option.Infix in
|
||||
let* idx, item = Array.find_idx pred grid.items in
|
||||
let y = idx / grid.width in
|
||||
let x = idx mod grid.width in
|
||||
Some ((x, y), item)
|
||||
Some (grid_vec2_of_idx ~width:grid.width ~idx, item)
|
||||
;;
|
||||
|
||||
let init_grid ~width ~height init =
|
||||
{ width
|
||||
; height
|
||||
; items = Array.init (width * height) (fun idx -> init @@ grid_vec2_of_idx ~width ~idx)
|
||||
}
|
||||
;;
|
||||
|
||||
let parse_grid parse_char lines : 'a grid =
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ val ( - ) : t -> t -> t
|
|||
val ( = ) : t -> t -> bool
|
||||
val at : 'a grid -> t -> 'a option
|
||||
val at_e : 'a grid -> t -> 'a
|
||||
val init_grid : width:int -> height:int -> (t -> 'a) -> 'a grid
|
||||
val parse_grid : (char -> 'a) -> string list -> 'a grid
|
||||
val find : 'a grid -> ('a -> bool) -> (t * 'a) option
|
||||
val iter_grid : 'a grid -> (t -> unit) -> unit
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user