Example #1
0
Array<uint8_t> compress(RawArray<const uint8_t> data, int level, event_t event) {
  thread_time_t time(compress_kind,event);
  if (level<20) { // zlib
    size_t dest_size = compressBound(data.size());
    Array<uint8_t> compressed(CHECK_CAST_INT(dest_size),uninit);
    int z = compress2(compressed.data(),&dest_size,(uint8_t*)data.data(),data.size(),level);
    if (z!=Z_OK)
      THROW(IOError,"zlib failure in compress_and_write: %s",zlib_error(z));
    return compressed.slice_own(0,CHECK_CAST_INT(dest_size));
  } else { // lzma
    size_t dest_size = lzma_stream_buffer_bound(data.size());
    Array<uint8_t> compressed(CHECK_CAST_INT(dest_size),uninit);
    size_t pos = 0;
    lzma_ret r = lzma_easy_buffer_encode(level-20,LZMA_CHECK_CRC64,0,data.data(),data.size(),compressed.data(),&pos,dest_size);
    if (r!=LZMA_OK)
      THROW(RuntimeError,"lzma compression error: %s (%d)",lzma_error(r),r);
    return compressed.slice_own(0,CHECK_CAST_INT(pos));
  }
}
Example #2
0
Array<uint8_t> decompress(RawArray<const uint8_t> compressed, const size_t uncompressed_size, event_t event) {
  GEODE_ASSERT(uncompressed_size<(uint64_t)1<<31);
  thread_time_t time(decompress_kind,event);
  size_t dest_size = uncompressed_size;
  Array<uint8_t> uncompressed = aligned_buffer<uint8_t>(CHECK_CAST_INT(dest_size));
  if (!is_lzma(compressed)) { // zlib
    int z = uncompress((uint8_t*)uncompressed.data(),&dest_size,compressed.data(),compressed.size());
    if (z!=Z_OK)
      THROW(IOError,"zlib failure in read_and_uncompress: %s",zlib_error(z));
  } else { // lzma
    const uint32_t flags = LZMA_TELL_NO_CHECK | LZMA_TELL_UNSUPPORTED_CHECK;
    uint64_t memlimit = UINT64_MAX;
    size_t in_pos = 0, out_pos = 0;
    lzma_ret r = lzma_stream_buffer_decode(&memlimit,flags,0,compressed.data(),&in_pos,compressed.size(),uncompressed.data(),&out_pos,dest_size);
    if (r!=LZMA_OK)
      THROW(IOError,"lzma failure in read_and_uncompress: %s (%d)",lzma_error(r),r);
  }
  if (dest_size != uncompressed_size)
    THROW(IOError,"read_and_compress: expected uncompressed size %zu, got %zu",uncompressed_size,dest_size);
  return uncompressed;
}
Example #3
0
Vector<uint64_t,3> count_block_wins(const section_t section, const Vector<uint8_t,4> block, RawArray<const Vector<super_t,2>> flat_data) {
  // Prepare
  const auto base = block_size*Vector<int,4>(block);
  const auto shape = block_shape(section.shape(),block);
  const auto rmin0 = safe_rmin_slice(section.counts[0],base[0]+range(shape[0])),
             rmin1 = safe_rmin_slice(section.counts[1],base[1]+range(shape[1])),
             rmin2 = safe_rmin_slice(section.counts[2],base[2]+range(shape[2])),
             rmin3 = safe_rmin_slice(section.counts[3],base[3]+range(shape[3]));
  GEODE_ASSERT(shape.product()==flat_data.size());
  const RawArray<const Vector<super_t,2>,4> block_data(shape,flat_data.data());

  // Count
  Vector<uint64_t,3> counts;
  for (int i0=0;i0<shape[0];i0++)
    for (int i1=0;i1<shape[1];i1++)
      for (int i2=0;i2<shape[2];i2++)
        for (int i3=0;i3<shape[3];i3++)
          counts += Vector<uint64_t,3>(popcounts_over_stabilizers(quadrants(rmin0[i0],rmin1[i1],rmin2[i2],rmin3[i3]),block_data(i0,i1,i2,i3)));
  return counts;
}
Example #4
0
static bool is_lzma(RawArray<const uint8_t> data) {
  static const uint8_t magic[6] = {0xfd,'7','z','X','Z',0};
  return data.size()>=6 && !memcmp(data.data(),magic,6);
}
Example #5
0
compact_blob_t supertensor_index_t::block_location(RawArray<const uint8_t> blob) {
  compact_blob_t b;
  GEODE_ASSERT(blob.size()==sizeof(b),format("expected size %d, got size %d, data %s",sizeof(b),blob.size(),str(blob)));
  memcpy(&b,blob.data(),sizeof(b));
  return b;
}
Example #6
0
static inline RawArray<mp_limb_t> sqrt_helper(RawArray<mp_limb_t> result, RawArray<const mp_limb_t> x) {
  const auto s = result.slice(0,(1+x.size())/2);
  mpn_sqrtrem(s.data(),0,x.data(),x.size());
  return trim(s);
}