예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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));
        }