private static async ValueTask <BlobFile> GetFileMetaAsync(byte appId, string path) { if (string.IsNullOrEmpty(path)) { throw new ArgumentNullException(nameof(path)); } var pathData = System.Text.Encoding.UTF8.GetBytes(path); if (pathData.Length > MaxPathSize) { throw new ArgumentException("Path length out of range", nameof(path)); } IntPtr pathPtr; unsafe { //暂复制路径 var pathDataPtr = stackalloc byte[pathData.Length + 1]; pathDataPtr[0] = (byte)BlobReadType.kGetFileMeta; pathPtr = new IntPtr(pathDataPtr); Marshal.Copy(pathData, 0, pathPtr + 1, pathData.Length); } ulong metaRaftGroupId = (ulong)appId << IdUtil.RAFTGROUPID_APPID_OFFSET; INativeData res = await StoreApi.Api.ReadIndexByGetAsync(metaRaftGroupId, pathPtr, (uint)(pathData.Length + 1)); unsafe { BlobFile *srcPtr = (BlobFile *)res.DataPtr.ToPointer(); return(*srcPtr); } }
public unsafe static ulong ToUInt64(this INativeData data) { if (data.Size != 8) { throw new InvalidCastException(); } ulong *ptr = (ulong *)data.DataPtr.ToPointer(); return(*ptr); }
private static void ParseAndWriteToStream(INativeData segmentData, ref uint fileSize, ref uint curRead, Stream stream) { curRead = (uint)segmentData.Size - 4; IntPtr dataPtr = segmentData.DataPtr; unsafe { uint *fileSizePtr = (uint *)dataPtr.ToPointer(); fileSize = *fileSizePtr; var span = new ReadOnlySpan <byte>((dataPtr + 4).ToPointer(), (int)curRead); stream.Write(span); } }
private static PrepareWriteResult ParsePrepareResult(INativeData data) { PrepareWriteResult res = new PrepareWriteResult(); unsafe { byte * dataPtr = (byte *)data.DataPtr.ToPointer(); ulong *raftGroupIdPtr = (ulong *)dataPtr; res.ChunkRaftGroupId = *raftGroupIdPtr; Guid *pathIdPtr = (Guid *)(dataPtr + 8); res.ParentPathId = *pathIdPtr; } return(res); }
public static string ToHexString(this INativeData data) { return(StringHelper.ToHexString(data.DataPtr, (int)data.Size)); }
public void Dispose() { _value.Dispose(); _value = null; }
internal IndexRow(INativeData value) { _value = value; ValueTuple = new KVTuple(); ValueTuple.ReadFrom(_value.DataPtr, (int)_value.Size); }
public NaDataDebugger(INativeData data) : base(data) { }