58 lines
1.6 KiB
Text
58 lines
1.6 KiB
Text
/-
|
||
Copyright (c) 2023 Leonardo de Moura. All rights reserved.
|
||
Released under Apache 2.0 license as described in the file LICENSE.
|
||
Authors: Leonardo de Moura
|
||
-/
|
||
module
|
||
|
||
prelude
|
||
public import Init.Data.Hashable
|
||
public import Std.Data.HashSet.Basic
|
||
|
||
public section
|
||
|
||
namespace Lean
|
||
|
||
structure Ptr (α : Type u) where
|
||
value : α
|
||
|
||
unsafe instance : Hashable (Ptr α) where
|
||
hash a := hash64 (ptrAddrUnsafe a).toUInt64
|
||
|
||
unsafe instance : BEq (Ptr α) where
|
||
beq a b := ptrAddrUnsafe a == ptrAddrUnsafe b
|
||
|
||
/--
|
||
Set of pointers. It is a low-level auxiliary datastructure used for traversing DAGs.
|
||
-/
|
||
@[expose] unsafe def PtrSet (α : Type) :=
|
||
Std.HashSet (Ptr α)
|
||
|
||
unsafe def mkPtrSet {α : Type} (capacity : Nat := 64) : PtrSet α :=
|
||
Std.HashSet.emptyWithCapacity capacity
|
||
|
||
unsafe abbrev PtrSet.insert (s : PtrSet α) (a : α) : PtrSet α :=
|
||
Std.HashSet.insert s { value := a }
|
||
|
||
unsafe abbrev PtrSet.contains (s : PtrSet α) (a : α) : Bool :=
|
||
Std.HashSet.contains s { value := a }
|
||
|
||
/--
|
||
Map of pointers. It is a low-level auxiliary datastructure used for traversing DAGs.
|
||
-/
|
||
@[expose] unsafe def PtrMap (α : Type) (β : Type) :=
|
||
Std.HashMap (Ptr α) β
|
||
|
||
unsafe def mkPtrMap {α β : Type} (capacity : Nat := 64) : PtrMap α β :=
|
||
Std.HashMap.emptyWithCapacity capacity
|
||
|
||
unsafe abbrev PtrMap.insert (s : PtrMap α β) (a : α) (b : β) : PtrMap α β :=
|
||
Std.HashMap.insert s { value := a } b
|
||
|
||
unsafe abbrev PtrMap.contains (s : PtrMap α β) (a : α) : Bool :=
|
||
Std.HashMap.contains s { value := a }
|
||
|
||
unsafe abbrev PtrMap.find? (s : PtrMap α β) (a : α) : Option β :=
|
||
Std.HashMap.get? s { value := a }
|
||
|
||
end Lean
|