/// <summary>
        /// 将 source 的内容缓存到 HGlobalCache 中。
        /// </summary>
        /// <param name="hGCache">HGlobalCache</param>
        /// <param name="source">source</param>
        /// <param name="encoding">编码</param>
        /// <returns>返回缓冲的长度</returns>
        public static void ReadFrom(this HGlobalCache <char> hGCache, HGlobalCache <byte> source, Encoding encoding)
        {
            hGCache.Grow(encoding.GetMaxCharCount(source.Count));

            hGCache.Count += encoding.GetChars(
                source.First,
                source.Count,
                hGCache.Current,
                hGCache.Rest);
        }
        /// <summary>
        /// 将 HGlobalCache 中的内容写入到 destination 中。
        /// </summary>
        /// <param name="hGCache">HGlobalCache</param>
        /// <param name="destination">destination</param>
        /// <param name="encoding">编码</param>
        public static void WriteTo(this HGlobalCache <char> hGCache, HGlobalCache <byte> destination, Encoding encoding)
        {
            destination.Grow(encoding.GetMaxByteCount(hGCache.Count));

            destination.Count += encoding.GetBytes(
                hGCache.First,
                hGCache.Count,
                destination.Current,
                destination.Rest);
        }
        public static void ReadFrom(this HGlobalCache <byte> hGCache, string str, Encoding encoding)
        {
            hGCache.Grow(encoding.GetMaxByteCount(str.Length));

            hGCache.Count += encoding.GetBytes(
                str,
                0,
                str.Length,
                hGCache.Context,
                hGCache.Offset + hGCache.Count);
        }
        public static void ReadFrom <T>(this HGlobalCache <T> hGCache, T *source, int length) where T : unmanaged
        {
            hGCache.Grow(length);

            Underlying.CopyBlock(
                hGCache.Current,
                source,
                checked ((uint)((long)length * sizeof(T)))
                );

            hGCache.Count += length;
        }
        public static void ReadFrom <T>(this HGlobalCache <T> hGCache, ref T source, int length) where T : unmanaged
        {
            hGCache.Grow(length);

            Underlying.CopyBlock(
                ref Underlying.As <T, byte>(ref *hGCache.Current),
                ref Underlying.As <T, byte>(ref source),
                checked ((uint)((long)length * sizeof(T)))
                );

            hGCache.Count += length;
        }
        /// <summary>
        /// 将 source 的内容缓存到 HGlobalCache 中。
        /// </summary>
        /// <param name="hGCache">HGlobalCache</param>
        /// <param name="source">source</param>
        /// <param name="encoding">编码</param>
        public static void ReadFrom(this HGlobalCache <char> hGCache, byte[] source, Encoding encoding)
        {
            hGCache.Grow(encoding.GetMaxCharCount(source.Length));

            fixed(byte *pSource = source)
            {
                hGCache.Count += encoding.GetChars(
                    pSource,
                    source.Length,
                    hGCache.Current,
                    hGCache.Rest);
            }
        }
        /// <summary>
        /// 将 source 的内容缓存到 HGlobalCache 中。
        /// </summary>
        /// <param name="hGCache">HGlobalCache</param>
        /// <param name="source">source</param>
        /// <param name="encoding">编码</param>
        public static void ReadFrom(this HGlobalCache <char> hGCache, ArraySegment <byte> source, Encoding encoding)
        {
            hGCache.Grow(encoding.GetMaxCharCount(source.Count));

            fixed(byte *pSource = &source.Array[source.Offset])
            {
                hGCache.Count += encoding.GetChars(
                    pSource,
                    source.Count,
                    hGCache.Current,
                    hGCache.Rest);
            }
        }
        public static unsafe void ReadFrom(this HGlobalCache <byte> hGCache, Stream stream)
        {
Loop:

            hGCache.Grow(1218);

            int readCount = stream.Read(
                hGCache.Context,
                hGCache.Offset + hGCache.Count,
                hGCache.Rest);

            hGCache.Count += readCount;

            if (readCount != 0)
            {
                goto Loop;
            }
        }
        public static unsafe void ReadFrom(this HGlobalCache <char> hGCache, TextReader textReader)
        {
Loop:

            hGCache.Grow(1218);

            int readCount = textReader.Read(
                hGCache.Context,
                hGCache.Offset + hGCache.Count,
                hGCache.Rest);

            hGCache.Count += readCount;

            if (readCount != 0)
            {
                goto Loop;
            }
        }
        public static async Task ReadFromAsync(this HGlobalCache <byte> hGCache, Stream stream)
        {
Loop:

            hGCache.Grow(1218);

            var readCount = await stream.ReadAsync(
                hGCache.Context,
                hGCache.Offset + hGCache.Count,
                hGCache.Rest);

            hGCache.Count += readCount;

            if (readCount != 0)
            {
                goto Loop;
            }
        }
        public static async Task ReadFromAsync(this HGlobalCache <char> hGCache, TextReader textReader)
        {
Loop:

            hGCache.Grow(1218);

            var readCount = await textReader.ReadAsync(
                hGCache.Context,
                hGCache.Offset + hGCache.Count,
                hGCache.Rest);

            hGCache.Count += readCount;

            if (readCount != 0)
            {
                goto Loop;
            }
        }
Example #12
0
        /// <summary>
        /// 将 source 的内容缓存到 HGlobalCache 中。
        /// </summary>
        /// <param name="hGCache">HGlobalCache</param>
        /// <param name="source">source</param>
        /// <param name="encoding">编码</param>
        /// <returns>返回缓冲的长度</returns>
        public static void ReadFrom(this HGlobalCache <char> hGCache, ReadOnlySpan <byte> source, Encoding encoding)
        {
            hGCache.Grow(encoding.GetMaxCharCount(source.Length));

            hGCache.Count += encoding.GetChars(source, new Span <char>(hGCache.Current, hGCache.Rest));
        }