#include "floats.h"

// Reads uint32vector from little endian byte array.
void read_le_uint32(const uint64_t length, const uint8_t* input, uint32_t* output) {
  uint32_t tmp = 0;
  for (uint64_t i = 0; i < length; i++) {
    tmp  = ((uint32_t) *(input++));
    tmp |= ((uint32_t) *(input++)) << 8;
    tmp |= ((uint32_t) *(input++)) << 16;
    tmp |= ((uint32_t) *(input++)) << 24;
    output[i] = tmp;
  }
}

// Reads uint64 vector from little endian byte array.
void read_le_uint64(const uint64_t length, const uint8_t* input, uint64_t* output) {
  uint64_t tmp = 0;
  for (uint64_t i = 0; i < length; i++) {
    tmp  = ((uint64_t) *(input++));
    tmp |= ((uint64_t) *(input++)) << 8;
    tmp |= ((uint64_t) *(input++)) << 16;
    tmp |= ((uint64_t) *(input++)) << 24;
    tmp |= ((uint64_t) *(input++)) << 32;
    tmp |= ((uint64_t) *(input++)) << 40;
    tmp |= ((uint64_t) *(input++)) << 48;
    tmp |= ((uint64_t) *(input++)) << 56;
    output[i] = tmp;
  }
}