annotate src/StaticDicts/StaticDicts.jl @ 854:ff9d738c9b21 operator_storage_array_of_table

Fix typos in doc.
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Tue, 18 Jan 2022 22:09:55 +0100
parents 76e5682d0e52
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
719
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 module StaticDicts
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 export StaticDict
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 """
739
e716602f1d62 Fix documentation and remove TBD
Jonatan Werpers <jonatan@werpers.com>
parents: 737
diff changeset
6 StaticDict{K,V,N} <: AbstractDict{K,V}
724
a789e789e30f Docstring for StaticDict
Jonatan Werpers <jonatan@werpers.com>
parents: 720
diff changeset
7
a789e789e30f Docstring for StaticDict
Jonatan Werpers <jonatan@werpers.com>
parents: 720
diff changeset
8 A static dictionary implementing the interface for an `AbstractDict`. A
a789e789e30f Docstring for StaticDict
Jonatan Werpers <jonatan@werpers.com>
parents: 720
diff changeset
9 `StaticDict` is fully immutable and after creation no changes can be made.
719
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10
739
e716602f1d62 Fix documentation and remove TBD
Jonatan Werpers <jonatan@werpers.com>
parents: 737
diff changeset
11 The immutable nature means that `StaticDict` can be compared with `===`, in
e716602f1d62 Fix documentation and remove TBD
Jonatan Werpers <jonatan@werpers.com>
parents: 737
diff changeset
12 constrast to regular `Dict` or `ImmutableDict` which can not. (See
854
ff9d738c9b21 Fix typos in doc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 838
diff changeset
13 <https://github.com/JuliaLang/julia/issues/4648> for details.) One important
735
3e0b0b44868e More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 726
diff changeset
14 aspect of this is that `StaticDict` can be used in a struct while still
854
ff9d738c9b21 Fix typos in doc.
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 838
diff changeset
15 allowing the struct to be compared using the default implementation of `==` for
735
3e0b0b44868e More docs
Jonatan Werpers <jonatan@werpers.com>
parents: 726
diff changeset
16 structs.
724
a789e789e30f Docstring for StaticDict
Jonatan Werpers <jonatan@werpers.com>
parents: 720
diff changeset
17
a789e789e30f Docstring for StaticDict
Jonatan Werpers <jonatan@werpers.com>
parents: 720
diff changeset
18 Lookups are done by linear search.
726
103f61d09a8b More documentation
Jonatan Werpers <jonatan@werpers.com>
parents: 725
diff changeset
19
103f61d09a8b More documentation
Jonatan Werpers <jonatan@werpers.com>
parents: 725
diff changeset
20 Duplicate keys are not allowed and an error will be thrown if they are passed
103f61d09a8b More documentation
Jonatan Werpers <jonatan@werpers.com>
parents: 725
diff changeset
21 to the constructor.
719
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 """
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 struct StaticDict{K,V,N} <: AbstractDict{K,V}
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 pairs::NTuple{N,Pair{K,V}}
720
172c55c4cf2e Dissalow duplicate keys
Jonatan Werpers <jonatan@werpers.com>
parents: 719
diff changeset
25
741
94941a062124 Add tests for constructing empty dicts. Change constructors accordingly
Jonatan Werpers <jonatan@werpers.com>
parents: 739
diff changeset
26 function StaticDict{K,V}(pairs::Vararg{Pair,N}) where {K,V,N}
720
172c55c4cf2e Dissalow duplicate keys
Jonatan Werpers <jonatan@werpers.com>
parents: 719
diff changeset
27 if !allunique(first.(pairs))
737
ca4f17efb279 Change to using DomainError
Jonatan Werpers <jonatan@werpers.com>
parents: 736
diff changeset
28 throw(DomainError(pairs, "keys must be unique"))
720
172c55c4cf2e Dissalow duplicate keys
Jonatan Werpers <jonatan@werpers.com>
parents: 719
diff changeset
29 end
172c55c4cf2e Dissalow duplicate keys
Jonatan Werpers <jonatan@werpers.com>
parents: 719
diff changeset
30 return new{K,V,N}(pairs)
172c55c4cf2e Dissalow duplicate keys
Jonatan Werpers <jonatan@werpers.com>
parents: 719
diff changeset
31 end
719
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 end
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 function StaticDict(pairs::Vararg{Pair})
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 K = typejoin(firsttype.(pairs)...)
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 V = typejoin(secondtype.(pairs)...)
741
94941a062124 Add tests for constructing empty dicts. Change constructors accordingly
Jonatan Werpers <jonatan@werpers.com>
parents: 739
diff changeset
37 return StaticDict{K,V}(pairs...)
719
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 end
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39
736
b5d9fbcdcef1 Add a constuctor taking a tuple
Jonatan Werpers <jonatan@werpers.com>
parents: 735
diff changeset
40 StaticDict(pairs::NTuple{N,Pair} where N) = StaticDict(pairs...)
b5d9fbcdcef1 Add a constuctor taking a tuple
Jonatan Werpers <jonatan@werpers.com>
parents: 735
diff changeset
41
719
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 function Base.get(d::StaticDict, key, default)
739
e716602f1d62 Fix documentation and remove TBD
Jonatan Werpers <jonatan@werpers.com>
parents: 737
diff changeset
43 for p ∈ d.pairs
719
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 if key == p.first
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 return p.second
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 end
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 end
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 return default
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 end
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 Base.iterate(d::StaticDict) = iterate(d.pairs)
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 Base.iterate(d::StaticDict, state) = iterate(d.pairs,state)
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 Base.length(d::StaticDict) = length(d.pairs)
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56
726
103f61d09a8b More documentation
Jonatan Werpers <jonatan@werpers.com>
parents: 725
diff changeset
57 """
103f61d09a8b More documentation
Jonatan Werpers <jonatan@werpers.com>
parents: 725
diff changeset
58 merge(d1::StaticDict, d2::StaticDict)
103f61d09a8b More documentation
Jonatan Werpers <jonatan@werpers.com>
parents: 725
diff changeset
59
103f61d09a8b More documentation
Jonatan Werpers <jonatan@werpers.com>
parents: 725
diff changeset
60 Merge two `StaticDict`. Repeating keys is considered and error. This may
103f61d09a8b More documentation
Jonatan Werpers <jonatan@werpers.com>
parents: 725
diff changeset
61 change in a future version.
103f61d09a8b More documentation
Jonatan Werpers <jonatan@werpers.com>
parents: 725
diff changeset
62 """
719
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 function Base.merge(d1::StaticDict, d2::StaticDict)
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 return StaticDict(d1.pairs..., d2.pairs...)
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 end
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66
725
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
67
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
68 """
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
69 firsttype(::Pair{T1,T2})
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
70
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
71 The type of the first element in the pair.
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
72 """
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
73 firsttype(::Pair{T1,T2}) where {T1,T2} = T1
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
74
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
75 """
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
76 secondtype(::Pair{T1,T2})
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
77
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
78 The type of the secondtype element in the pair.
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
79 """
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
80 secondtype(::Pair{T1,T2}) where {T1,T2} = T2
e5b51c82f83b Docstring for pair type functions
Jonatan Werpers <jonatan@werpers.com>
parents: 724
diff changeset
81
719
2f8c67c5979e Start adding a StaticDict type
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
82 end # module