MCPcopy Create free account
hub / github.com/ComodoSecurity/openedr / putData

Function putData

edrav2/iprj/libcore/src/lvbs.cpp:185–228  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

183//
184//
185void putData(Variant vDst, std::string sPath, Variant vData)
186{
187 std::string sName;
188 while (true)
189 {
190 FieldFlags eFlags = parsePath(sPath, sName);
191
192 if (testFlag(eFlags, FieldFlags::Sequence))
193 {
194 if (vDst.has(sName))
195 {
196 if (!vDst.get(sName).isSequenceLike())
197 error::InvalidFormat(FMT("Field <" << sName << "> is not a sequence")).throwException();
198 }
199 else
200 vDst.put(sName, Sequence());
201 }
202
203 if (testFlag(eFlags, FieldFlags::Dictionary))
204 {
205 if (testFlag(eFlags, FieldFlags::Sequence))
206 {
207 Sequence vSeq = Sequence(vDst.get(sName));
208 if (vSeq.isEmpty())
209 vSeq.push_back(Dictionary());
210 vDst = vSeq.get(vSeq.getSize() - 1);
211 }
212 else
213 {
214 if (!vDst.has(sName))
215 vDst.put(sName, Dictionary());
216 vDst = vDst.get(sName);
217 }
218 }
219 else // It is just a value
220 {
221 if (testFlag(eFlags, FieldFlags::Sequence))
222 vDst.get(sName).push_back(vData);
223 else
224 vDst.put(sName, vData);
225 break;
226 }
227 }
228}
229
230//
231//

Callers 1

deserializeFunction · 0.85

Calls 12

parsePathFunction · 0.85
isSequenceLikeMethod · 0.80
throwExceptionMethod · 0.80
testFlagFunction · 0.50
SequenceClass · 0.50
DictionaryClass · 0.50
hasMethod · 0.45
getMethod · 0.45
putMethod · 0.45
isEmptyMethod · 0.45
push_backMethod · 0.45
getSizeMethod · 0.45

Tested by

no test coverage detected