45 lines
1.2 KiB
Text
45 lines
1.2 KiB
Text
/-
|
|
Copyright (c) 2019 Microsoft Corporation. All rights reserved.
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
Author: Leonardo de Moura
|
|
-/
|
|
module
|
|
|
|
prelude
|
|
public import Init.Data.ByteArray.Basic
|
|
import Init.Data.String.Defs
|
|
import Init.Data.UInt.Basic
|
|
|
|
set_option doc.verso true
|
|
|
|
/--
|
|
Interprets a {name}`ByteArray` of size 8 as a little-endian {name}`UInt64`.
|
|
|
|
Panics if the array's size is not 8.
|
|
-/
|
|
public def ByteArray.toUInt64LE! (bs : ByteArray) : UInt64 :=
|
|
assert! bs.size == 8
|
|
(bs.get! 7).toUInt64 <<< 0x38 |||
|
|
(bs.get! 6).toUInt64 <<< 0x30 |||
|
|
(bs.get! 5).toUInt64 <<< 0x28 |||
|
|
(bs.get! 4).toUInt64 <<< 0x20 |||
|
|
(bs.get! 3).toUInt64 <<< 0x18 |||
|
|
(bs.get! 2).toUInt64 <<< 0x10 |||
|
|
(bs.get! 1).toUInt64 <<< 0x8 |||
|
|
(bs.get! 0).toUInt64
|
|
|
|
/--
|
|
Interprets a {name}`ByteArray` of size 8 as a big-endian {name}`UInt64`.
|
|
|
|
Panics if the array's size is not 8.
|
|
-/
|
|
public def ByteArray.toUInt64BE! (bs : ByteArray) : UInt64 :=
|
|
assert! bs.size == 8
|
|
(bs.get! 0).toUInt64 <<< 0x38 |||
|
|
(bs.get! 1).toUInt64 <<< 0x30 |||
|
|
(bs.get! 2).toUInt64 <<< 0x28 |||
|
|
(bs.get! 3).toUInt64 <<< 0x20 |||
|
|
(bs.get! 4).toUInt64 <<< 0x18 |||
|
|
(bs.get! 5).toUInt64 <<< 0x10 |||
|
|
(bs.get! 6).toUInt64 <<< 0x8 |||
|
|
(bs.get! 7).toUInt64
|