Skip to content

Commit f39d992

Browse files
authored
Merge pull request #5 from fsprojects/sets
Implemented functions for maps and sets
2 parents eb51a38 + c4855f3 commit f39d992

File tree

8 files changed

+327
-66
lines changed

8 files changed

+327
-66
lines changed

src/FSharp.Collections.Immutable/FSharp.Collections.Immutable.fsproj

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>netstandard1.6;netstandard2.0</TargetFrameworks>
4+
<TargetFramework>netstandard2.0</TargetFramework>
55
<Description>F# bindings for System.Collections.Immutable</Description>
66
<Copyright>Copyright © XperiAndri 2016</Copyright>
77
<AssemblyTitle>FSharp.Collections.Immutable</AssemblyTitle>
@@ -27,13 +27,8 @@
2727
<Compile Include="sets.fs" />
2828
</ItemGroup>
2929

30-
<ItemGroup Condition="'$(TargetFramework)'=='netstandard1.6'">
31-
<PackageReference Update="FSharp.Core" Version="4.6.2" />
32-
<PackageReference Update="System.ValueTuple" Version="4.5.0" />
33-
</ItemGroup>
34-
3530
<ItemGroup>
36-
<PackageReference Include="System.Collections.Immutable" Version="1.7.0" />
31+
<PackageReference Include="System.Collections.Immutable" Version="5.0.0" />
3732
</ItemGroup>
3833

3934
</Project>

src/FSharp.Collections.Immutable/flat-list.fs

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ module FlatList =
2222
////////// Building //////////
2323

2424
let moveFromBuilder (builder : FlatList<_>.Builder) : FlatList<_> =
25-
checkNotNull "builder" builder
25+
checkNotNull (nameof builder) builder
2626
builder.MoveToImmutable()
2727
let ofBuilder (builder : FlatList<_>.Builder) : FlatList<_> =
28-
checkNotNull "builder" builder
28+
checkNotNull (nameof builder) builder
2929
builder.ToImmutable()
3030

3131
let builder () : FlatList<'T>.Builder = FlatListFactory.CreateBuilder()
@@ -35,7 +35,7 @@ module FlatList =
3535
let inline internal checkNotDefault argName (list : FlatList<'T>) =
3636
if list.IsDefault then invalidArg argName "Uninstantiated ImmutableArray/FlatList"
3737

38-
let inline internal check (list : FlatList<'T>) = checkNotDefault "list" list
38+
let inline internal check (list : FlatList<'T>) = checkNotDefault (nameof list) list
3939

4040
let inline internal indexNotFound() = raise (System.Collections.Generic.KeyNotFoundException())
4141

@@ -44,8 +44,8 @@ module FlatList =
4444
let item index list = check list; list.[index]
4545

4646
let append list1 list2 : FlatList<'T> =
47-
checkNotDefault "list1" list1
48-
checkNotDefault "list2" list2
47+
checkNotDefault (nameof list1) list1
48+
checkNotDefault (nameof list2) list2
4949
list1.AddRange(list2 : FlatList<_>)
5050

5151
/// Searches for the specified object and returns the zero-based index of the first occurrence within the range
@@ -107,7 +107,7 @@ module FlatList =
107107
let removeRange index (count: int) list: FlatList<_> = check list; list.RemoveRange(index, count)
108108

109109
let blit source sourceIndex (destination: 'T[]) destinationIndex count =
110-
checkNotDefault "source" source
110+
checkNotDefault (nameof source) source
111111
try
112112
source.CopyTo(sourceIndex, destination, destinationIndex, count)
113113
with
@@ -130,14 +130,14 @@ module FlatList =
130130
let inline private builderWithLengthOf list = builderWith <| length list
131131

132132
module Builder =
133-
let inline private check (builder: FlatList<'T>.Builder) = checkNotNull "builder" builder
133+
let inline private check (builder: FlatList<'T>.Builder) = checkNotNull (nameof builder) builder
134134

135135
let add item builder = check builder; builder.Add(item)
136136

137137
////////// Loop-based //////////
138138

139139
let init count initializer =
140-
if count < 0 then invalidArg "count" ErrorStrings.InputMustBeNonNegative
140+
if count < 0 then invalidArg (nameof count) ErrorStrings.InputMustBeNonNegative
141141
let builder = builderWith count
142142
for i = 0 to count - 1 do
143143
builder.Add <| initializer i
@@ -191,11 +191,11 @@ module FlatList =
191191
action list.[i]
192192

193193
let iter2 action list1 list2 =
194-
checkNotDefault "list1" list1
195-
checkNotDefault "list2" list2
194+
checkNotDefault (nameof list1) list1
195+
checkNotDefault (nameof list2) list2
196196
let f = OptimizedClosures.FSharpFunc<'T,'U, unit>.Adapt(action)
197197
let len = length list1
198-
if len <> length list2 then invalidArg "list2" ErrorStrings.ListsHaveDifferentLengths
198+
if len <> length list2 then invalidArg (nameof list2) ErrorStrings.ListsHaveDifferentLengths
199199
for i = 0 to len - 1 do
200200
f.Invoke(list1.[i], list2.[i])
201201

@@ -213,34 +213,37 @@ module FlatList =
213213
ofBuilder builder
214214

215215
let map2 mapping list1 list2 =
216-
checkNotDefault "list1" list1
217-
checkNotDefault "list2" list2
216+
checkNotDefault (nameof list1) list1
217+
checkNotDefault (nameof list2) list2
218218
let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(mapping)
219219
let len1 = list1.Length
220-
if len1 <> list2.Length then invalidArg "list2" ErrorStrings.ListsHaveDifferentLengths
220+
if len1 <> list2.Length then invalidArg (nameof list2) ErrorStrings.ListsHaveDifferentLengths
221221
let res = builderWith len1
222222
for i = 0 to len1 - 1 do
223223
res.Add <| f.Invoke(list1.[i], list2.[i])
224224
moveFromBuilder res
225225

226226
let map3 mapping list1 list2 list3 =
227-
checkNotDefault "list1" list1
228-
checkNotDefault "list2" list2
229-
checkNotDefault "list3" list3
227+
checkNotDefault (nameof list1) list1
228+
checkNotDefault (nameof list2) list2
229+
checkNotDefault (nameof list3) list3
230230
let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(mapping)
231231
let len1 = list1.Length
232-
if not (len1 = list2.Length && len1 = list3.Length) then invalidArg "" ErrorStrings.ListsHaveDifferentLengths
232+
if not (len1 = list2.Length)
233+
then invalidArg (nameof list2) ErrorStrings.ListsHaveDifferentLengths
234+
if not (len1 = list3.Length)
235+
then invalidArg (nameof list3) ErrorStrings.ListsHaveDifferentLengths
233236

234237
let res = builderWith len1
235238
for i = 0 to len1 - 1 do
236239
res.Add <| f.Invoke(list1.[i], list2.[i], list3.[i])
237240
moveFromBuilder res
238241
let mapi2 mapping list1 list2 =
239-
checkNotDefault "list1" list1
240-
checkNotDefault "list2" list2
242+
checkNotDefault (nameof list1) list1
243+
checkNotDefault (nameof list2) list2
241244
let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(mapping)
242245
let len1 = list1.Length
243-
if len1 <> list2.Length then invalidArg "list2" ErrorStrings.ListsHaveDifferentLengths
246+
if len1 <> list2.Length then invalidArg (nameof list2) ErrorStrings.ListsHaveDifferentLengths
244247
let res = builderWith len1
245248
for i = 0 to len1 - 1 do
246249
res.Add <| f.Invoke(i,list1.[i], list2.[i])
@@ -254,11 +257,11 @@ module FlatList =
254257
f.Invoke(i, list.[i])
255258

256259
let iteri2 action list1 list2 =
257-
checkNotDefault "list1" list1
258-
checkNotDefault "list2" list2
260+
checkNotDefault (nameof list1) list1
261+
checkNotDefault (nameof list2) list2
259262
let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(action)
260263
let len1 = list1.Length
261-
if len1 <> list2.Length then invalidArg "list2" ErrorStrings.ListsHaveDifferentLengths
264+
if len1 <> list2.Length then invalidArg (nameof list2) ErrorStrings.ListsHaveDifferentLengths
262265
for i = 0 to len1 - 1 do
263266
f.Invoke(i,list1.[i], list2.[i])
264267

@@ -287,11 +290,11 @@ module FlatList =
287290
state
288291

289292
let exists2 predicate list1 list2 =
290-
checkNotDefault "list1" list1
291-
checkNotDefault "list2" list2
293+
checkNotDefault (nameof list1) list1
294+
checkNotDefault (nameof list2) list2
292295
let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(predicate)
293296
let len1 = list1.Length
294-
if len1 <> list2.Length then invalidArg "list2" ErrorStrings.ListsHaveDifferentLengths
297+
if len1 <> list2.Length then invalidArg (nameof list2) ErrorStrings.ListsHaveDifferentLengths
295298
let rec loop i = i < len1 && (f.Invoke(list1.[i], list2.[i]) || loop (i+1))
296299
loop 0
297300

@@ -302,11 +305,11 @@ module FlatList =
302305
loop 0
303306

304307
let forall2 predicate list1 list2 =
305-
checkNotDefault "list1" list1
306-
checkNotDefault "list2" list2
308+
checkNotDefault (nameof list1) list1
309+
checkNotDefault (nameof list2) list2
307310
let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(predicate)
308311
let len1 = list1.Length
309-
if len1 <> list2.Length then invalidArg "list2" ErrorStrings.ListsHaveDifferentLengths
312+
if len1 <> list2.Length then invalidArg (nameof list2) ErrorStrings.ListsHaveDifferentLengths
310313
let rec loop i = i >= len1 || (f.Invoke(list1.[i], list2.[i]) && loop (i+1))
311314
loop 0
312315

src/FSharp.Collections.Immutable/immutable-list.fs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if INTERACTIVE
1+
#if INTERACTIVE
22
namespace global
33
#else
44
namespace FSharp.Collections.Immutable
@@ -11,13 +11,13 @@ module ImmutableList =
1111

1212
////////// Factory //////////
1313

14-
let inline internal check (list: IImmutableList<_>) = checkNotNull "list" list
14+
let inline internal check (list: IImmutableList<_>) = checkNotNull (nameof list) list
1515

1616
let inline empty<'T> = ImmutableList.Create<'T>()
1717

1818
let inline singleton<'T> (item : 'T) : ImmutableList<'T> = ImmutableList.Create<'T> (item)
1919

20-
let inline ofSeq (seq : 'T seq) = checkNotNull "seq" seq; ImmutableList.CreateRange seq
20+
let inline ofSeq (seq : 'T seq) = checkNotNull (nameof seq) seq; ImmutableList.CreateRange seq
2121

2222
let inline ofBuilder (builder : ImmutableList<_>.Builder) = builder.ToImmutable()
2323

@@ -183,7 +183,7 @@ module ImmutableList =
183183
////////// Loop-based //////////
184184

185185
let concat lists =
186-
checkNotNull "lists" lists
186+
checkNotNull (nameof lists) lists
187187
build <| fun result ->
188188
for list in lists do
189189
result.AddRange list
@@ -283,7 +283,7 @@ module ImmutableList =
283283
let forall predicate list = check list; Seq.forall predicate list
284284

285285
let forall2 predicate (list1: IImmutableList<_>) (list2: IImmutableList<_>) =
286-
checkNotNull "list1" list1; checkNotNull "list2" list2
286+
checkNotNull (nameof list1) list1; checkNotNull (nameof list2) list2
287287
Seq.forall2 predicate list1 list2
288288

289289
let iter action list = check list; Seq.iter action list

src/FSharp.Collections.Immutable/indexed-seq.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
type IIndexedSeq<'T> = System.Collections.Generic.IReadOnlyList<'T>
44

55
module IndexedSeq =
6-
let check (seq: IIndexedSeq<_>) = checkNotNull "seq" seq
6+
let check (seq: IIndexedSeq<_>) = checkNotNull (nameof seq) seq
77
let item index seq = check seq; seq.[index]
88
let length seq = check seq; seq.Count
99

0 commit comments

Comments
 (0)