ref: cc5182284db2880dcfc3b0bd61dbc6ed319bacc3
dir: /lib/std/getint.myr/
use "die" use "memops" pkg std = generic gethost64 : (buf : byte[:] -> @a) :: numeric,integral @a generic getle64 : (buf : byte[:] -> @a) :: numeric,integral @a generic getbe64 : (buf : byte[:] -> @a) :: numeric,integral @a generic gethost32 : (buf : byte[:] -> @a) :: numeric,integral @a generic getle32 : (buf : byte[:] -> @a) :: numeric,integral @a generic getbe32 : (buf : byte[:] -> @a) :: numeric,integral @a generic gethost16 : (buf : byte[:] -> @a) :: numeric,integral @a generic getle16 : (buf : byte[:] -> @a) :: numeric,integral @a generic getbe16 : (buf : byte[:] -> @a) :: numeric,integral @a generic gethost8 : (buf : byte[:] -> @a) :: numeric,integral @a generic getle8 : (buf : byte[:] -> @a) :: numeric,integral @a generic getbe8 : (buf : byte[:] -> @a) :: numeric,integral @a ;; generic gethost64 = {buf -> @a :: numeric,integral @a var val : int64 iassert(buf.len >= 8, "gethost64: index out of bounds") memblit((&val : byte#), (buf : byte#), 8) -> (val : @a) } generic getbe64 = {buf -> @a :: numeric,integral @a -> ((buf[0] : @a) << 56) | \ ((buf[1] : @a) << 48) | \ ((buf[2] : @a) << 40) | \ ((buf[3] : @a) << 32) | \ ((buf[4] : @a) << 24) | \ ((buf[5] : @a) << 16) | \ ((buf[6] : @a) << 8) | \ ((buf[7] : @a) << 0) } generic getle64 = {buf -> ((buf[0] : @a) << 0) | \ ((buf[1] : @a) << 8) | \ ((buf[2] : @a) << 16) | \ ((buf[3] : @a) << 24) | \ ((buf[4] : @a) << 32) | \ ((buf[5] : @a) << 40) | \ ((buf[6] : @a) << 48) | \ ((buf[7] : @a) << 56) } generic gethost32 = {buf -> @a :: numeric,integral @a var val : int32 iassert(buf.len >= 4, "gethost32: index out of bounds") memblit((&val : byte#), (buf : byte#), 4) -> (val : @a) } generic getbe32 = {buf -> @a :: numeric, integral @a -> ((buf[0] : @a) << 24) | \ ((buf[1] : @a) << 16) | \ ((buf[2] : @a) << 8) | \ ((buf[3] : @a) << 0) } generic getle32 = {buf -> @a :: numeric, integral @a -> ((buf[0] : @a) << 0) | \ ((buf[1] : @a) << 8) | \ ((buf[2] : @a) << 16) | \ ((buf[3] : @a) << 24) } generic gethost16 = {buf -> @a :: numeric,integral @a var val : int16 iassert(buf.len >= 2, "gethost16: index out of bounds") memblit((&val : byte#), (buf : byte#), 4) -> (val : @a) } generic getbe16 = {buf -> @a :: numeric,integral @a -> ((buf[0] : @a) << 8) | \ ((buf[1] : @a) << 0) } generic getle16 = {buf -> @a :: numeric,integral @a -> ((buf[0] : @a) << 0) | \ ((buf[1] : @a) << 8) } generic gethost8 = {buf -> @a :: numeric,integral @a -> (buf[0] : @a) << 0 } generic getbe8 = {buf -> @a :: numeric,integral @a -> (buf[0] : @a) << 0 } generic getle8 = {buf -> @a :: numeric,integral @a -> (buf[0] : @a) << 0 }