void FiberReferenceMap::unmarshal(Array &dest, CArrRef src, char strategy) { switch (strategy) { case FiberAsyncFunc::GlobalStateIgnore: // do nothing break; case FiberAsyncFunc::GlobalStateOverwrite: dest = src.fiberUnmarshal(*this); break; case FiberAsyncFunc::GlobalStateSkip: for (ArrayIter iter(src); iter; ++iter) { Variant key = iter.first(); if (!dest.exists(key)) { dest.set(key.fiberUnmarshal(*this), ref(iter.secondRef().fiberUnmarshal(*this))); } } break; default: raise_error("unknown strategy: %d", (int)strategy); break; } }