1///|
2pub fn[T] 
type Ptr[T]
Ptr
::
(self : Ptr[T]) -> Ptr[Byte]
reinterpret_as_byte_ptr
(
Ptr[T]
self
:
type Ptr[T]
Ptr
[

type parameter T

T
]) ->
type Ptr[T]
Ptr
[
Byte
Byte
] {
3
(x : Ptr[T]) -> Ptr[Byte]
unsafe_coerce
(
Ptr[T]
self
)
4} 5 6///| 7pub fn[T]
type Ptr[T]
Ptr
::
(self : Ptr[T]) -> ConstPtr[Byte]
reinterpret_as_const_byte_ptr
(
Ptr[T]
self
:
type Ptr[T]
Ptr
[

type parameter T

T
]) ->
type ConstPtr[T]
ConstPtr
[
Byte
Byte
] {
8
(x : Ptr[T]) -> ConstPtr[Byte]
unsafe_coerce
(
Ptr[T]
self
)
9} 10 11///| 12pub fn[T]
type ConstPtr[T]
ConstPtr
::
(self : ConstPtr[T]) -> ConstPtr[Byte]
reinterpret_as_const_byte_ptr
(
13
ConstPtr[T]
self
:
type ConstPtr[T]
ConstPtr
[

type parameter T

T
]
14) ->
type ConstPtr[T]
ConstPtr
[
Byte
Byte
] {
15
(x : ConstPtr[T]) -> ConstPtr[Byte]
unsafe_coerce
(
ConstPtr[T]
self
)
16} 17 18///| 19pub fn
type CStr ConstPtr[Byte]
CStr
::
(self : CStr) -> ConstPtr[Byte]
reinterpret_as_const_byte_ptr
(
CStr
self
:
type CStr ConstPtr[Byte]
CStr
) ->
type ConstPtr[T]
ConstPtr
[
Byte
Byte
] {
20
(x : CStr) -> ConstPtr[Byte]
unsafe_coerce
(
CStr
self
)
21} 22 23///| 24extern "c" fn pointer_reinterpret_as_int64(ptr :
type Ptr[T]
Ptr
[
Byte
Byte
]) ->
Int64
Int64
= "moonbit_native_pointer_reinterpret_as_int64"
25 26///| 27pub fn[T]
type Ptr[T]
Ptr
::
(self : Ptr[T]) -> Int64
reinterpret_as_int64
(
Ptr[T]
self
:
type Ptr[T]
Ptr
[

type parameter T

T
]) ->
Int64
Int64
{
28
(ptr : Ptr[Byte]) -> Int64
pointer_reinterpret_as_int64
(
(x : Ptr[T]) -> Ptr[Byte]
unsafe_coerce
(
Ptr[T]
self
))
29} 30 31///| 32pub fn[T]
type Ptr[T]
Ptr
::
(self : Ptr[T]) -> UInt64
reinterpret_as_uint64
(
Ptr[T]
self
:
type Ptr[T]
Ptr
[

type parameter T

T
]) ->
UInt64
UInt64
{
33
(ptr : Ptr[Byte]) -> Int64
pointer_reinterpret_as_int64
(
(x : Ptr[T]) -> Ptr[Byte]
unsafe_coerce
(
Ptr[T]
self
)).
(self : Int64) -> UInt64

Reinterprets a 64-bit signed integer as an unsigned 64-bit integer without changing its bit pattern. The reinterpretation follows the standard two's complement representation rules.

Parameters:

  • self : The 64-bit signed integer to be reinterpreted.

Returns a 64-bit unsigned integer that has the same bit pattern as the input.

Example:

  let neg = -1L
  inspect(neg.reinterpret_as_uint64(), content="18446744073709551615") // All bits set to 1
  let pos = 42L
  inspect(pos.reinterpret_as_uint64(), content="42") // Positive numbers remain unchanged
reinterpret_as_uint64
()
34} 35 36///| 37pub fn[T]
type ConstPtr[T]
ConstPtr
::
(self : ConstPtr[T]) -> UInt64
reinterpret_as_uint64
(
ConstPtr[T]
self
:
type ConstPtr[T]
ConstPtr
[

type parameter T

T
]) ->
UInt64
UInt64
{
38
(ptr : Ptr[Byte]) -> Int64
pointer_reinterpret_as_int64
(
(x : ConstPtr[T]) -> Ptr[Byte]
unsafe_coerce
(
ConstPtr[T]
self
)).
(self : Int64) -> UInt64

Reinterprets a 64-bit signed integer as an unsigned 64-bit integer without changing its bit pattern. The reinterpretation follows the standard two's complement representation rules.

Parameters:

  • self : The 64-bit signed integer to be reinterpreted.

Returns a 64-bit unsigned integer that has the same bit pattern as the input.

Example:

  let neg = -1L
  inspect(neg.reinterpret_as_uint64(), content="18446744073709551615") // All bits set to 1
  let pos = 42L
  inspect(pos.reinterpret_as_uint64(), content="42") // Positive numbers remain unchanged
reinterpret_as_uint64
()
39} 40 41///| 42pub fn[T]
type ConstPtr[T]
ConstPtr
::
(self : ConstPtr[T]) -> Int64
reinterpret_as_int64
(
ConstPtr[T]
self
:
type ConstPtr[T]
ConstPtr
[

type parameter T

T
]) ->
Int64
Int64
{
43
(ptr : Ptr[Byte]) -> Int64
pointer_reinterpret_as_int64
(
(x : ConstPtr[T]) -> Ptr[Byte]
unsafe_coerce
(
ConstPtr[T]
self
))
44} 45