#line 7 "/home/ubuntu/felix/src/packages/memory.fdoc"
open class Address {
ctor[T] address: &T = "(void*)$1";
ctor address: uintptr = "(void*)$1";
ctor[T] address: cptr[T] = "(void*)$1";
ctor[T] address: +T = "(void*)$1";
ctor[D,C] address: D --> C = "(void*)$1";
fun isNULL: address -> bool = "(0==$1)";
const NULL : address = "NULL";
instance Eq[address] {
fun == : address * address -> bool = "$1==$2";
}
instance Tord[address] {
fun < : address * address -> bool = "::std::less<void*>()($1,$2)";
}
const addrstrfmt : +char = '"%" PRIxPTR' requires C99_headers::inttypes_h;
const addrreprfmt : +char = '"0x%" PRIxPTR' requires C99_headers::inttypes_h;
instance Str[address] {
fun str (t:address) : string => vsprintf (addrstrfmt, C_hack::cast[uintptr] t);
}
instance Repr[address] {
fun repr (t:address) : string => vsprintf (addrreprfmt, C_hack::cast[uintptr] t);
}
instance Str[byte] {
fun str (t:byte) : string => vsprintf (c"%02x", C_hack::cast[uint] t);
}
instance Repr[byte] {
fun repr (t:byte) : string => vsprintf (c"0x%02x", t);
}
fun + : address * !ints -> address = "(void*)((char*)$1+$2)";
fun - : address * !ints -> address = "(void*)((char*)$1-$2)";
fun - : address * address -> ptrdiff = "(char*)$1-(char*)$2";
}
open Eq[byte];
open Tord[address];