@@ -10,26 +10,11 @@ using NamedDimsArrays:
1010 randname,
1111 setname
1212
13- const Tag = String
14- const TagSet = Set{Tag}
15-
16- tagset (tags:: String ) = Set (filter (! isempty, String .(strip .(split (tags, " ," )))))
17- tagset (tags:: TagSet ) = tags
18-
19- function tagsstring (tags:: TagSet )
20- str = " "
21- length (tags) == 0 && return str
22- tags_vec = collect (tags)
23- for n in 1 : (length (tags_vec) - 1 )
24- str *= " $(tags_vec[n]) ,"
25- end
26- str *= " $(tags_vec[end ]) "
27- return str
28- end
13+ tagsstring (tags:: Dict{String,String} ) = string (tags)
2914
3015@kwdef struct IndexName <: AbstractName
3116 id:: UInt64 = rand (UInt64)
32- tags:: TagSet = TagSet ()
17+ tags:: Dict{String,String} = Dict {String,String} ()
3318 plev:: Int = 0
3419end
3520NamedDimsArrays. randname (n:: IndexName ) = IndexName (; tags= tags (n), plev= plev (n))
@@ -39,7 +24,19 @@ tags(n::IndexName) = n.tags
3924plev (n:: IndexName ) = n. plev
4025
4126settags (n:: IndexName , tags) = @set n. tags = tags
42- addtags (n:: IndexName , ts) = settags (n, tags (n) ∪ tagset (ts))
27+
28+ gettag (n:: IndexName , tagname:: String ) = tags (n)[tagname]
29+ gettag (n:: IndexName , tagname:: String , default) = get (tags (n), tagname, default)
30+ function settag (n:: IndexName , tagname:: String , tag:: String )
31+ newtags = copy (tags (n))
32+ newtags[tagname] = tag
33+ return settags (n, newtags)
34+ end
35+ function unsettag (n:: IndexName , tagname:: String )
36+ newtags = copy (tags (n))
37+ delete! (newtags, tagname)
38+ return settags (n, newtags)
39+ end
4340
4441setprime (n:: IndexName , plev) = @set n. plev = plev
4542prime (n:: IndexName ) = setprime (n, plev (n) + 1 )
@@ -72,11 +69,8 @@ struct Index{T,Value<:AbstractUnitRange{T}} <: AbstractNamedUnitRange{T,Value,In
7269 name:: IndexName
7370end
7471
75- function Index (length:: Int ; tags= TagSet (), kwargs... )
76- return Index (Base. OneTo (length), IndexName (; tags= tagset (tags), kwargs... ))
77- end
78- function Index (length:: Int , tags:: String ; kwargs... )
79- return Index (Base. OneTo (length), IndexName (; kwargs... , tags= tagset (tags)))
72+ function Index (length:: Int ; kwargs... )
73+ return Index (Base. OneTo (length), IndexName (; kwargs... ))
8074end
8175
8276# TODO : Define for `NamedDimsArrays.NamedViewIndex`.
@@ -85,12 +79,18 @@ tags(i::Index) = tags(name(i))
8579plev (i:: Index ) = plev (name (i))
8680
8781# TODO : Define for `NamedDimsArrays.NamedViewIndex`.
88- addtags (i:: Index , tags) = setname (i, addtags (name (i), tags))
82+ gettag (i:: Index , tagname:: String ) = gettag (name (i), tagname)
83+ gettag (i:: Index , tagname:: String , default) = gettag (name (i), tagname, default)
84+ settag (i:: Index , tagname:: String , tag:: String ) = setname (i, settag (name (i), tagname, tag))
85+ unsettag (i:: Index , tagname:: String ) = setname (i, unsettag (name (i), tagname))
86+
8987prime (i:: Index ) = setname (i, prime (name (i)))
90- Base. adjoint (i:: Index ) = prime (i)
9188noprime (i:: Index ) = setname (i, noprime (name (i)))
9289sim (i:: Index ) = setname (i, sim (name (i)))
9390
91+ # TODO : Delete this definition?
92+ Base. adjoint (i:: Index ) = prime (i)
93+
9494# Interface
9595# TODO : Overload `Base.parent` instead.
9696NamedDimsArrays. dename (i:: Index ) = i. value
0 commit comments