Exemplo n.º 1
0
        internal static IList <byte> GetBytes(object?value, bool useHint, CodeContext?context = null)
        {
            switch (value)
            {
            case IList <byte> lob when !(lob is ListGenericWrapper <byte>):
                return(lob);

            case IBufferProtocol bp:
                using (IPythonBuffer buf = bp.GetBuffer()) {
                    return(buf.AsReadOnlySpan().ToArray());
                }

            case ReadOnlyMemory <byte> rom:
                return(rom.ToArray());

            case Memory <byte> mem:
                return(mem.ToArray());

            default:
                int len = 0;
                if (useHint)
                {
                    PythonOps.TryInvokeLengthHint(context ?? DefaultContext.Default, value, out len);
                }
                List <byte> ret = new List <byte>(len);
                IEnumerator ie  = PythonOps.GetEnumerator(value);
                while (ie.MoveNext())
                {
                    ret.Add(GetByte(ie.Current));
                }
                return(ret);
            }
        }