Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }