MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / set_indexed

Method set_indexed

core/object/object.cpp:448–505  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

446}
447
448void Object::set_indexed(const Vector<StringName> &p_names, const Variant &p_value, bool *r_valid) {
449 if (p_names.is_empty()) {
450 if (r_valid) {
451 *r_valid = false;
452 }
453 return;
454 }
455 if (p_names.size() == 1) {
456 set(p_names[0], p_value, r_valid);
457 return;
458 }
459
460 bool valid = false;
461 if (!r_valid) {
462 r_valid = &valid;
463 }
464
465 List<Variant> value_stack;
466
467 value_stack.push_back(get(p_names[0], r_valid));
468
469 if (!*r_valid) {
470 value_stack.clear();
471 return;
472 }
473
474 for (int i = 1; i < p_names.size() - 1; i++) {
475 value_stack.push_back(value_stack.back()->get().get_named(p_names[i], valid));
476 if (r_valid) {
477 *r_valid = valid;
478 }
479
480 if (!valid) {
481 value_stack.clear();
482 return;
483 }
484 }
485
486 value_stack.push_back(p_value); // p_names[p_names.size() - 1]
487
488 for (int i = p_names.size() - 1; i > 0; i--) {
489 value_stack.back()->prev()->get().set_named(p_names[i], value_stack.back()->get(), valid);
490 value_stack.pop_back();
491
492 if (r_valid) {
493 *r_valid = valid;
494 }
495 if (!valid) {
496 value_stack.clear();
497 return;
498 }
499 }
500
501 set(p_names[0], value_stack.back()->get(), r_valid);
502 value_stack.pop_back();
503
504 ERR_FAIL_COND(!value_stack.is_empty());
505}

Callers 6

_blend_processMethod · 0.80
_blend_applyMethod · 0.80
stepMethod · 0.80
set_stateMethod · 0.80
test_string.hFile · 0.80

Calls 12

get_namedMethod · 0.80
set_namedMethod · 0.80
getFunction · 0.70
sizeMethod · 0.65
setFunction · 0.50
is_emptyMethod · 0.45
push_backMethod · 0.45
clearMethod · 0.45
getMethod · 0.45
backMethod · 0.45
prevMethod · 0.45
pop_backMethod · 0.45

Tested by

no test coverage detected