/// <summary> /// Reads the <typeparamref name="T"/> using the specified <paramref name="reader"/>. /// </summary> /// <param name="reader">The reader.</param> public async Task <T> ReadValueAsync(AsyncBinaryReader reader) { Guard.NotNull(reader, nameof(reader)); var internalValue = new UIntPalmValue(this.Length); var data = await internalValue.ReadValueAsync(reader); return((T)(object)(int)data); }
/// <summary> /// Reads the <see cref="T:DateTimeOffset?"/> using the specified <paramref name="reader"/>. /// </summary> /// <param name="reader">The reader.</param> public async Task <DateTimeOffset?> ReadValueAsync(AsyncBinaryReader reader) { Guard.NotNull(reader, nameof(reader)); var internalValue = new UIntPalmValue(4); var value = await internalValue.ReadValueAsync(reader); if (value == 0) { return(null); } uint highBit = 1U << 31; var isPalmDate = (value & highBit) > 0; return(isPalmDate ? new DateTimeOffset(1904, 1, 1, 0, 0, 0, TimeSpan.Zero).AddSeconds(value) : DateTimeOffset.FromUnixTimeSeconds(value)); }