コード例 #1
0
 public unsafe static string toString(this byte[] data, int index, int length, Encoding encoding)
 {
     if (encoding != Encoding.ASCII) return encoding.GetString(data, index, length);
     TmphArray.TmphRange range = new TmphArray.TmphRange(data.length(), index, length);
     if (range.GetCount == length)
     {
         if (range.GetCount != 0)
         {
             fixed (byte* dataFixed = data) return Laurent.Lee.CLB.TmphString.DeSerialize(dataFixed + range.SkipCount, -range.GetCount);
         }
         return string.Empty;
     }
     TmphLog.Error.Throw(TmphLog.TmphExceptionType.IndexOutOfRange);
     return null;
 }
コード例 #2
0
 /// <summary>
 ///     分割字符串
 /// </summary>
 /// <param name="value">原字符串</param>
 /// <param name="startIndex">起始位置</param>
 /// <param name="length">分割字符串长度</param>
 /// <param name="split">分割符</param>
 /// <returns>字符子串集合</returns>
 public static TmphSubArray<TmphSubString> Split(this string value, int startIndex, int length, char split)
 {
     var range = new TmphArray.TmphRange(value.Length(), startIndex, length);
     if (range.GetCount != length) TmphLog.Error.Throw(TmphLog.TmphExceptionType.IndexOutOfRange);
     var values = default(TmphSubArray<TmphSubString>);
     if (value != null)
     {
         fixed (char* valueFixed = value)
         {
             char* last = valueFixed + range.SkipCount, end = last + range.GetCount;
             for (var start = last; start != end;)
             {
                 if (*start == split)
                 {
                     values.Add(TmphSubString.Unsafe(value, (int)(last - valueFixed), (int)(start - last)));
                     last = ++start;
                 }
                 else ++start;
             }
             values.Add(TmphSubString.Unsafe(value, (int)(last - valueFixed), (int)(end - last)));
         }
     }
     return values;
 }
コード例 #3
0
 public void Write(byte[] data, int index, int count)
 {
     var range = new TmphArray.TmphRange(data.length(), index, count);
     if (range.GetCount == count)
     {
         PrepLength(count);
         fixed (byte* dataFixed = data)
         {
             Unsafe.TmphMemory.Copy(dataFixed + range.SkipCount, Data + length, count);
         }
         length += count;
     }
     else if (count != 0) TmphLog.Error.Throw(TmphLog.TmphExceptionType.IndexOutOfRange);
 }
コード例 #4
0
 public void Write(string value, int index, int count)
 {
     var range = new TmphArray.TmphRange(value.Length(), index, count);
     if (range.GetCount == count)
     {
         PrepLength(count <<= 1);
         fixed (char* valueFixed = value)
         {
             Unsafe.TmphMemory.Copy(valueFixed + index, Data + length, count);
         }
         length += count;
     }
     else if (count != 0) TmphLog.Error.Throw(TmphLog.TmphExceptionType.IndexOutOfRange);
 }
コード例 #5
0
 /// <summary>
 ///     解压缩数据
 /// </summary>
 /// <param name="compressData">压缩数据</param>
 /// <param name="startIndex">起始位置</param>
 /// <param name="count">解压缩字节数</param>
 /// <returns>解压缩后的数据</returns>
 public TmphSubArray<byte> GetDeCompress(byte[] compressData, int startIndex, int count,
     TmphMemoryPool memoryPool = null)
 {
     if (count > 0)
     {
         var range = new TmphArray.TmphRange(compressData.length(), startIndex, count);
         if (count == range.GetCount)
             return GetDeCompressUnsafe(compressData, range.SkipCount, count, memoryPool);
     }
     TmphLog.Error.Throw(TmphLog.TmphExceptionType.IndexOutOfRange);
     return default(TmphSubArray<byte>);
 }
コード例 #6
0
 /// <summary>
 ///     压缩数据
 /// </summary>
 /// <param name="data">原始数据</param>
 /// <param name="startIndex">起始位置</param>
 /// <param name="count">压缩字节数</param>
 /// <param name="seek">起始位置</param>
 /// <returns>压缩后的数据,失败返回null</returns>
 public TmphSubArray<byte> GetCompress(byte[] data, int startIndex, int count, int seek = 0,
     TmphMemoryPool memoryPool = null)
 {
     if (seek >= 0)
     {
         if (count == 0) return TmphSubArray<byte>.Unsafe(TmphNullValue<byte>.Array, 0, 0);
         var range = new TmphArray.TmphRange(data.length(), startIndex, count);
         if (count == range.GetCount) return GetCompressUnsafe(data, startIndex, count, seek, memoryPool);
     }
     TmphLog.Error.Throw(TmphLog.TmphExceptionType.IndexOutOfRange);
     return default(TmphSubArray<byte>);
 }