Files
ww/lib/endian/network.ww
Hojun-Cho aadc6618f0 lib: banner purge + WHY-only comment sweep (rule 8)
Every // ---- section banner dies (132 -> 0): names carry the WHAT.
Narration deleted (filename restatements, run-with lines, what-the-
next-line-does); every ref/hare cite, task cite, divergence, ABI/
layout contract, and ownership qualifier kept (borrowed-view lines
restored where the sweep over-cut). Comment-only proven: all 442
walk-workdir .s and 32 import-probe .s byte-identical before/after;
libbyteid 56-roster all-ID.
2026-08-08 21:10:18 +09:00

35 lines
1.2 KiB
Plaintext

// Mirrors Hare's endian:: surface: big-endian (be*), little-endian
// (le*), and network-order (hton/ntoh) helpers. Host order on amd64 is
// little-endian, so hton/ntoh are byte swaps and the le* family is
// identity.
package endian;
export fn htonu16(in: u16) u16 = {
return ((in << 8u16) | (in >> 8u16)) & 0xffffu16;
};
export fn ntohu16(in: u16) u16 = { return htonu16(in); };
export fn htonu32(in: u32) u32 = {
let b0: u32 = (in >> 24u32) & 0xffu32;
let b1: u32 = (in >> 16u32) & 0xffu32;
let b2: u32 = (in >> 8u32) & 0xffu32;
let b3: u32 = in & 0xffu32;
return (b3 << 24u32) | (b2 << 16u32) | (b1 << 8u32) | b0;
};
export fn ntohu32(in: u32) u32 = { return htonu32(in); };
export fn htonu64(in: u64) u64 = {
let b0: u64 = (in >> 56u64) & 0xffu64;
let b1: u64 = (in >> 48u64) & 0xffu64;
let b2: u64 = (in >> 40u64) & 0xffu64;
let b3: u64 = (in >> 32u64) & 0xffu64;
let b4: u64 = (in >> 24u64) & 0xffu64;
let b5: u64 = (in >> 16u64) & 0xffu64;
let b6: u64 = (in >> 8u64) & 0xffu64;
let b7: u64 = in & 0xffu64;
return (b7 << 56u64) | (b6 << 48u64) | (b5 << 40u64) | (b4 << 32u64)
| (b3 << 24u64) | (b2 << 16u64) | (b1 << 8u64) | b0;
};
export fn ntohu64(in: u64) u64 = { return htonu64(in); };