headers.c 573 B

12345678910111213141516171819202122232425262728293031323334
  1. #include <assert.h>
  2. #include "headers.h"
  3. scm make_header(hdr_color col, scm raw_size, scm scm_size) {
  4. assert(0 <= raw_size);
  5. assert(raw_size <= 0xFFFFFF);
  6. assert(0 <= scm_size);
  7. assert(scm_size <= 0xFFFFFF);
  8. return
  9. (scm_size << (24 + 3)) |
  10. (raw_size << 3) |
  11. col;
  12. }
  13. scm header_color(scm hdr) {
  14. return hdr & 0b111;
  15. }
  16. scm header_raw_size(scm hdr) {
  17. return (hdr >> 3) & 0xFFFFFF;
  18. }
  19. scm header_scm_size(scm hdr) {
  20. return (hdr >> (24 + 3)) & 0xFFFFFF;
  21. }
  22. scm color_header(scm hdr, hdr_color col) {
  23. hdr &= ~0b111;
  24. hdr |= col;
  25. return hdr;
  26. }