81
81
82
82
function getBlobEntry (var:: AbstractDFGVariable , blobId:: UUID )
83
83
for (k,v) in var. dataDict
84
- # FIXME stop using v.id since that has been repurposed for unique BlobEntry indexing
85
- if v. originId == blobId || v. blobId == blobId || v. id == blobId
84
+ if blobId in [v. originId, v. blobId]
86
85
return v
87
86
end
88
87
end
@@ -91,9 +90,15 @@ function getBlobEntry(var::AbstractDFGVariable, blobId::UUID)
91
90
)
92
91
end
93
92
94
- # TODO consider changing this to use `first` as in julia's findfirst - as in findfirstBlobEntry->label::Symbol
95
- # or getBlobEntryFirst, btw this returns a vector in some other places
96
- function getBlobEntry (var:: AbstractDFGVariable , key:: Regex )
93
+ @deprecate getBlobEntry (var:: AbstractDFGVariable , key:: Regex ) getBlobEntryFirst (var, key)
94
+
95
+ """
96
+ $(SIGNATURES)
97
+ Finds and returns the first blob entry that matches the regex.
98
+
99
+ Also see: [`getBlobEntry`](@ref)
100
+ """
101
+ function getBlobEntryFirst (var:: AbstractDFGVariable , key:: Regex )
97
102
for (k,v) in var. dataDict
98
103
if occursin (key, string (v. label))
99
104
return v
106
111
107
112
getBlobEntry (var:: AbstractDFGVariable , key:: AbstractString ) = getBlobEntry (var,Regex (key))
108
113
109
-
114
+ # TODO split betweeen getfirstBlobEntry and getBlobEntry
110
115
getBlobEntry (dfg:: AbstractDFG , label:: Symbol , key:: Union{Symbol, UUID, <:AbstractString, Regex} ) = getBlobEntry (getVariable (dfg, label), key)
111
116
# getBlobEntry(dfg::AbstractDFG, label::Symbol, key::Symbol) = getBlobEntry(getVariable(dfg, label), key)
112
117
@@ -121,22 +126,30 @@ Also see: [`getBlobEntry`](@ref), [`addBlob!`](@ref), [`mergeBlobEntries!`](@ref
121
126
function addBlobEntry! (
122
127
var:: AbstractDFGVariable ,
123
128
entry:: BlobEntry ;
124
- blobId:: Union{UUID,Nothing} = (isnothing (entry. blobId) ? entry. id : entry. blobId),
125
- blobSize:: Int = (hasfield (BlobEntry, :size ) ? entry. size : - 1 )
126
129
)
127
130
# see https://github.com/JuliaRobotics/DistributedFactorGraphs.jl/issues/985
131
+ # blobId::Union{UUID,Nothing} = (isnothing(entry.blobId) ? entry.id : entry.blobId),
132
+ # blobSize::Int = (hasfield(BlobEntry, :size) ? entry.size : -1)
128
133
haskey (var. dataDict, entry. label) && error (" blobEntry $(entry. label) already exists on variable $(getLabel (var)) " )
129
134
var. dataDict[entry. label] = entry
130
135
return entry
131
136
end
132
137
138
+ function addBlobEntry! (
139
+ var:: PackedVariable ,
140
+ entry:: BlobEntry ,
141
+ )
142
+ entry. label in getproperty .(var. blobEntries,:label ) && error (" blobEntry $(entry. label) already exists on variable $(getLabel (var)) " )
143
+ push! (var. blobEntries, entry)
144
+ return entry
145
+ end
146
+
133
147
function addBlobEntry! (
134
148
dfg:: AbstractDFG ,
135
149
vLbl:: Symbol ,
136
150
entry:: BlobEntry ;
137
- kw...
138
151
)
139
- return addBlobEntry! (getVariable (dfg, vLbl), entry; kw ... )
152
+ return addBlobEntry! (getVariable (dfg, vLbl), entry)
140
153
end
141
154
142
155
@@ -203,12 +216,25 @@ function getBlobEntries(var::AbstractDFGVariable)
203
216
# or should we return the iterator, Base.ValueIterator{Dict{Symbol,BlobEntry}}?
204
217
collect (values (var. dataDict))
205
218
end
219
+
220
+ function getBlobEntries (var:: PackedVariable )
221
+ var. blobEntries
222
+ end
223
+
206
224
function getBlobEntries (dfg:: AbstractDFG , label:: Symbol )
207
225
# !isVariable(dfg, label) && return nothing
208
226
# or should we return the iterator, Base.ValueIterator{Dict{Symbol,BlobEntry}}?
209
227
getBlobEntries (getVariable (dfg, label))
210
228
end
211
229
230
+ function getBlobEntries (dfg:: AbstractDFG , label:: Symbol , regex:: Regex )
231
+ entries = getBlobEntries (dfg, label)
232
+ return filter (entries) do e
233
+ occursin (regex, string (e. label))
234
+ end
235
+ end
236
+
237
+
212
238
"""
213
239
$(SIGNATURES)
214
240
0 commit comments