File: writeseq.c

package info (click to toggle)
libstreamvbyte 0.4.1-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid, trixie
  • size: 344 kB
  • sloc: ansic: 2,952; makefile: 69
file content (40 lines) | stat: -rw-r--r-- 1,352 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

#include "streamvbyte.h"

int main() {
  int N = 5000;
  uint32_t *datain = malloc(N * sizeof(uint32_t));
  uint8_t *compressedbuffer = malloc(N * sizeof(uint32_t));
  uint32_t *recovdata = malloc(N * sizeof(uint32_t));
  for (int k = 0; k < N; ++k)
    datain[k] = k * 100;
  size_t compsize = streamvbyte_encode(datain, N, compressedbuffer); // encoding
  const char *filename = "data.bin";
  printf("I will write the data to %s \n", filename);
  FILE *f = fopen(filename, "w");
  size_t bw = fwrite(compressedbuffer, 1, compsize, f);
  fclose(f);
  if (bw != compsize) {
    printf("Tried to write %zu bytes, wrote %zu \n", compsize, bw);
  }

  f = fopen(filename, "r");
  for (size_t k = 0; k < N * sizeof(uint32_t); ++k)
    compressedbuffer[k] = 0;
  size_t br = fread(compressedbuffer, 1, compsize, f);
  if (br != compsize) {
    printf("Tried to read %zu bytes, wrote %zu \n", compsize, br);
  }
  // here the result is stored in compressedbuffer using compsize bytes
  size_t compsize2 = streamvbyte_decode(compressedbuffer, recovdata,
                                        N); // decoding (fast)
  assert(compsize == compsize2);
  free(datain);
  free(compressedbuffer);
  free(recovdata);
  printf("Compressed %d integers down to %d bytes.\n", N, (int)compsize);
  return 0;
}