/// <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; } }
/// <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)); }