Source file filename_set.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
type t =
{ dir : Path.t
; filenames : Filename.Set.t
}
let equal t { dir; filenames } =
Path.equal t.dir dir && Filename.Set.equal filenames t.filenames
;;
let dir { dir; filenames = _ } = dir
let filenames { dir = _; filenames } = filenames
let empty ~dir = { dir; filenames = String.Set.empty }
let is_empty { dir = _; filenames } = Filename.Set.is_empty filenames
let create ?filter ~dir filenames =
match filter with
| None -> { dir; filenames }
| Some f ->
{ dir
; filenames =
Filename.Set.to_list filenames
|> List.filter ~f:(fun basename -> f ~basename)
|> Filename.Set.of_list
}
;;
let to_list { dir; filenames } = Filename.Set.to_list_map filenames ~f:(Path.relative dir)