/-
Copyright (c) 2022 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison
-/
import Std.Data.HashMap
import Std.Data.RBMap
/-!
# Additional API for `RBMap`.
These should be replaced by proper implementations in Std.
-/
namespace Std.HashMap
variable [BEq α: ?m.4
α] [Hashable α: ?m.4
α]
/-- The list of keys in a `HashMap`. -/
def keys (m: HashMap α β
m : HashMap α: ?m.15
α β: ?m.27
β) : List α: ?m.15
α :=
m: HashMap α β
m.fold (fun ks: ?m.63
ks k: ?m.66
k _: ?m.69
_ => k: ?m.66
k :: ks: ?m.63
ks) []: List ?m.81
[]
/-- The list of values in a `HashMap`. -/
def values (m: HashMap α β
m : HashMap α: ?m.186
α β: ?m.198
β) : List β: ?m.198
β :=
m: HashMap α β
m.fold (fun vs: ?m.234
vs _: ?m.237
_ v: ?m.240
v => v: ?m.240
v :: vs: ?m.234
vs) []: List ?m.252
[]
/-- Add a value to a `HashMap α (List β)` viewed as a multimap. -/
def consVal (self : HashMap α: ?m.346
α (List β: ?m.359
β)) (a: α
a : α: ?m.346
α) (b: β
b : β: ?m.359
β) : HashMap α: ?m.346
α (List β: ?m.359
β) :=
match self.find? a: α
a with
| none => self.insert a: α
a [b: β
b]
| some L: List β
L => self.insert a: α
a (b: β
b::L: List β
L)
end Std.HashMap
namespace Std.RBSet
/-- Insert all elements of a list into an `RBSet`. -/
def insertList (m: RBSet α cmp
m : RBSet α: ?m.675
α cmp: ?m.680
cmp) (L: List α
L : List α: ?m.675
α) : RBSet α: ?m.675
α cmp: ?m.680
cmp :=
L: List α
L.foldl (fun m: ?m.713
m a: ?m.716
a => m: ?m.713
m.insert a: ?m.716
a) m: RBSet α cmp
m
end Std.RBSet