public override IEnumerable <KeyValuePair <PyObject, PointerProxy <PyObject> > > ReadElements() { if (ma_keys.IsNull) { yield break; } PyDictKeysObject36 keys = ma_keys.Read(); var size = keys.dk_size.Read(); if (size <= 0) { yield break; } var n = keys.dk_nentries.Read(); ArrayProxy <PyDictKeyEntry> dk_entries = keys.dk_entries; PyDictKeyEntry entry = dk_entries[0]; if (!ma_values.IsNull) { ArrayProxy <PointerProxy <PyObject> > values = ma_values.Read(); PointerProxy <PyObject> value = values[0]; for (int i = 0; i < n; ++i) { PointerProxy <PyObject> key = entry.me_key; if (!value.IsNull && !key.IsNull) { yield return(new KeyValuePair <PyObject, PointerProxy <PyObject> >(key.Read(), value)); } entry = entry.GetAdjacentProxy(1); value = value.GetAdjacentProxy(1); } } else { for (int i = 0; i < n; ++i) { PointerProxy <PyObject> key = entry.me_key; PointerProxy <PyObject> value = entry.me_value; if (!key.IsNull && !value.IsNull) { yield return(new KeyValuePair <PyObject, PointerProxy <PyObject> >(key.Read(), value)); } entry = entry.GetAdjacentProxy(1); } } }
public override IEnumerable <KeyValuePair <PyObject, PointerProxy <PyObject> > > ReadElements() { if (ma_keys.IsNull) { yield break; } PyDictKeysObject33 keys = ma_keys.Read(); var entries = keys.dk_entries.Take(keys.dk_size.Read()); PointerProxy <ArrayProxy <PointerProxy <PyObject> > > ma_values = this.ma_values; if (ma_values.IsNull) { foreach (var entry in entries) { var key = entry.me_key.TryRead(); if (key != null) { yield return(new KeyValuePair <PyObject, PointerProxy <PyObject> >(key, entry.me_value)); } } } else { PointerProxy <PyObject> valuePtr = ma_values.Read()[0]; foreach (var entry in entries) { var key = entry.me_key.TryRead(); if (key != null) { yield return(new KeyValuePair <PyObject, PointerProxy <PyObject> >(key, valuePtr)); } valuePtr = valuePtr.GetAdjacentProxy(1); } } }