Math.NET Numerics
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

46 lines
1.6 KiB

(* (c) Microsoft Corporation. All rights reserved *)
module Microsoft.FSharp.Compiler.AbstractIL.Internal.Zmap
open Internal.Utilities.Collections.Tagged
open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
type 'a order = 'a -> 'a -> int
type map<'key,'a> = Internal.Utilities.Collections.Tagged.Map<'key,'a>
type ('key,'a) t = map<'key,'a>
let empty (ord : 'a order) = Internal.Utilities.Collections.Tagged.Map<_,_,_>.Empty(ComparisonIdentity.FromFunction(ord))
let add k v (m:map<_,_>) = m.Add(k,v)
let find k (m:map<_,_>) = m.[k]
let tryfind k (m:map<_,_>) = m.TryFind(k)
let remove k (m:map<_,_>) = m.Remove(k)
let mem k (m:map<_,_>) = m.ContainsKey(k)
let iter f (m:map<_,_>) = m.Iterate(f)
let first f (m:map<_,_>) = m.First(fun k v -> if f k v then Some (k,v) else None)
let exists f (m:map<_,_>) = m.Exists(f)
let forall f (m:map<_,_>) = m.ForAll(f)
let map f (m:map<_,_>) = m.MapRange(f)
let mapi f (m:map<_,_>) = m.Map(f)
let fold f (m:map<_,_>) x = m.Fold f x
let to_list (m:map<_,_>) = m.ToList()
let fold_section lo hi f (m:map<_,_>) x = m.FoldSection lo hi f x
let is_empty (m:map<_,_>) = m.IsEmpty
let fmap f z (m:map<_,_>) =
let m,z = m.FoldAndMap (fun k v z -> let z,v' = f z k v in v',z) z in
z,m
let choose f (m:map<_,_>) = m.First(f)
let chooseL f (m:map<_,_>) =
m.Fold (fun k v s -> match f k v with None -> s | Some x -> x::s) []
let of_list m xs = List.fold (fun m (k,v) -> add k v m) (empty m) xs
let of_FlatList m xs = FlatList.fold (fun m (k,v) -> add k v m) (empty m) xs
let keys m = chooseL (fun k v -> Some k) m
let values m = chooseL (fun k v -> Some v) m
let mem_of m k = mem k m