@@ -23,21 +23,43 @@ const TagSet = Set{Tag}
2323
2424tagset (tags:: String ) = Set (filter (! isempty, String .(strip .(split (tags, " ," )))))
2525
26+ function tagsstring (tags:: TagSet )
27+ str = " "
28+ length (tags) == 0 && return str
29+ tags_vec = collect (tags)
30+ for n in 1 : (length (tags_vec) - 1 )
31+ str *= " $(tags_vec[n]) ,"
32+ end
33+ str *= " $(tags_vec[end ]) "
34+ return str
35+ end
36+
2637@kwdef struct IndexName <: AbstractName
2738 id:: UInt64 = rand (UInt64)
28- plev:: Int = 0
2939 tags:: TagSet = TagSet ()
40+ plev:: Int = 0
3041end
3142NamedDimsArrays. randname (n:: IndexName ) = IndexName ()
3243
44+ id (n:: IndexName ) = n. id
3345tags (n:: IndexName ) = n. tags
46+ plev (n:: IndexName ) = n. plev
47+
3448settags (n:: IndexName , tags) = @set n. tags = tags
3549addtags (n:: IndexName , ts) = settags (n, tags (n) ∪ tagset (ts))
3650
37- plev (n:: IndexName ) = n. plev
3851setprime (n:: IndexName , plev) = @set n. plev = plev
3952prime (n:: IndexName ) = setprime (n, plev (n) + 1 )
4053
54+ function Base. show (io:: IO , i:: IndexName )
55+ idstr = " id=$(id (i) % 1000 ) "
56+ tagsstr = ! isempty (tags (i)) ? " |\" $(tagsstring (tags (i))) \" " : " "
57+ primestr = primestring (plev (i))
58+ str = " IndexName($(idstr)$(tagsstr) )$(primestr) "
59+ print (io, str)
60+ return nothing
61+ end
62+
4163struct IndexVal{Value<: Integer } <: AbstractNamedInteger{Value,IndexName}
4264 value:: Value
4365 name:: IndexName
@@ -60,7 +82,12 @@ function Index(length::Int, tags::String; kwargs...)
6082 return Index (Base. OneTo (length), IndexName (; kwargs... , tags= tagset (tags)))
6183end
6284
85+ # TODO : Define for `NamedDimsArrays.NamedViewIndex`.
86+ id (i:: Index ) = id (name (i))
6387tags (i:: Index ) = tags (name (i))
88+ plev (i:: Index ) = plev (name (i))
89+
90+ # TODO : Define for `NamedDimsArrays.NamedViewIndex`.
6491addtags (i:: Index , tags) = setname (i, addtags (name (i), tags))
6592prime (i:: Index ) = setname (i, prime (name (i)))
6693Base. adjoint (i:: Index ) = prime (i)
@@ -73,6 +100,29 @@ NamedDimsArrays.name(i::Index) = i.name
73100# Constructor
74101NamedDimsArrays. named (i:: AbstractUnitRange , name:: IndexName ) = Index (i, name)
75102
103+ function primestring (plev)
104+ if plev < 0
105+ return " (warning: prime level $plev is less than 0)"
106+ end
107+ if plev == 0
108+ return " "
109+ elseif plev > 3
110+ return " '$plev "
111+ else
112+ return " '" ^ plev
113+ end
114+ end
115+
116+ function Base. show (io:: IO , i:: Index )
117+ lenstr = " length=$(dename (length (i))) "
118+ idstr = " |id=$(id (i) % 1000 ) "
119+ tagsstr = ! isempty (tags (i)) ? " |\" $(tagsstring (tags (i))) \" " : " "
120+ primestr = primestring (plev (i))
121+ str = " Index($(lenstr)$(idstr)$(tagsstr) )$(primestr) "
122+ print (io, str)
123+ return nothing
124+ end
125+
76126struct NoncontiguousIndex{T,Value<: AbstractVector{T} } < :
77127 AbstractNamedVector{T,Value,IndexName}
78128 value:: Value
0 commit comments