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