static TypedValue* serialize_vars_helper(ActRec* ar) { auto wddxPacket = req::make<WddxPacket>(empty_string_variant_ref, true, true); int start_index = 0; for (int i = start_index; i < ar->numArgs(); i++) { auto const tv = getArg(ar, i); find_var_recursive(tv, wddxPacket); } Variant packet = wddxPacket->packet_end(); return arReturn(ar, std::move(packet)); }
static TypedValue* add_vars_helper(ActRec* ar) { int start_index = 1; Resource packet_id{getArg<KindOfResource>(ar, 0)}; auto wddxPacket = cast<WddxPacket>(packet_id); for (int i = start_index; i < ar->numArgs(); i++) { auto const tv = getArg(ar, i); find_var_recursive(tv, wddxPacket); } return arReturn(ar, true); }
void find_var_recursive(const TypedValue* tv, WddxPacket* wddxPacket) { if (tvIsString(tv)) { String var_name = tvCastToString(tv); wddxPacket->add_var(var_name, true); } if (tv->m_type == KindOfArray) { for (ArrayIter iter(tv->m_data.parr); iter; ++iter) { find_var_recursive(iter.secondRef().asTypedValue(), wddxPacket); } } }
void find_var_recursive(const TypedValue* tv, const req::ptr<WddxPacket>& wddxPacket) { if (tvIsString(tv)) { String var_name{tvCastToString(tv)}; wddxPacket->add_var(var_name, true); } if (isArrayType(tv->m_type)) { for (ArrayIter iter(tv->m_data.parr); iter; ++iter) { find_var_recursive(iter.secondRef().asTypedValue(), wddxPacket); } } }
static TypedValue* serialize_vars_helper(ActRec* ar) { WddxPacket* wddxPacket = NEWOBJ(WddxPacket)(empty_string_variant_ref, true, true); int start_index = 0; for (int i = start_index; i < ar->numArgs(); i++) { auto const tv = getArg(ar, i); find_var_recursive(tv, wddxPacket); } const std::string packet = wddxPacket->packet_end(); Variant strHolder = makeStaticString(packet); return arReturn(ar, strHolder); }