File: GB_serialize_method.c

package info (click to toggle)
suitesparse 1%3A5.12.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 176,720 kB
  • sloc: ansic: 1,193,914; cpp: 31,704; makefile: 6,638; fortran: 1,927; java: 1,826; csh: 765; ruby: 725; sh: 529; python: 333; perl: 225; sed: 164; awk: 35
file content (84 lines) | stat: -rw-r--r-- 2,802 bytes parent folder | download
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//------------------------------------------------------------------------------
// GB_serialize_method: parse the compression method
//------------------------------------------------------------------------------

// SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2022, All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

//------------------------------------------------------------------------------

#include "GB.h"
#include "GB_serialize.h"

void GB_serialize_method
(
    // output
    int32_t *algo,                  // algorithm to use
    int32_t *level,                 // compression level
    // input
    int32_t method
)
{

    if (method < 0)
    { 
        // no compression if method is negative
        (*algo) = GxB_COMPRESSION_NONE ;
        (*level) = 0 ;
        return ;
    }

    // Determine the algorithm and level.  Lower levels give faster compression
    // time but not as good of compression.  Higher levels give more compact
    // compressions, at the cost of higher run times.  For all methods: a level
    // of zero, or a level setting outside the range permitted for a method,
    // means that default level for that method is used.
    (*algo) = 1000 * (method / 1000) ;
    (*level) = method % 1000 ;

    switch (*algo)
    {

        default : 
            (*algo) = GxB_COMPRESSION_LZ4 ; 
            (*level) = 0 ;              // level is ignored
            break ;

        case GxB_COMPRESSION_LZ4 : 
            (*level) = 0 ;              // level is ignored
            break ;

        case GxB_COMPRESSION_LZ4HC : 
            // level 1 to 9, with a default of 9.  Note that LZ4HC supports
            // levels 10, 11, and 12, but these are very slow and do not
            // provide much benefit over level 9.  Level 10 often results in
            // a larger blob than level 9.  Level 12 is typically just a tiny
            // bit more compact than level 9, but can be 10x slower, or worse,
            // as compared to level 9.
            if ((*level) <= 0 || (*level) > 9) (*level) = 9 ;
            break ;

//      These cases will be uncommented when the methods are implemented:

//      case GxB_COMPRESSION_ZLIB:
//          // level 1 to 9, with a default of 6
//          if ((*level) <= 0 || (*level) > 9) (*level) = 6 ;
//          break ;

//      case GxB_COMPRESSION_LZO:
//          // level 1 (X1ST) to 2 (XST), with a default of 2
//          if ((*level) <= 0 || (*level) > 2) (*level) = 2 ;
//          break ;

//      case GxB_COMPRESSION_BZIP2:
//          // level 1 to 9, with a default of 9
//          if ((*level) <= 0 || (*level) > 9) (*level) = 9 ;
//          break ;

//      case GxB_COMPRESSION_LZSS:
//          (*level) = 0 ;              // level is ignored
//          break ;

    }
}