use alloc::borrow::Cow;
use super::{Callback, GraphDef, GraphId, GraphKind, NodeId};
use crate::compressor::core::graphs as g;
use crate::compressor::core::params::LocalParams;
const SERIAL: u8 = 1;
const STRUCT: u8 = 2;
const NUMERIC: u8 = 4;
const STRING: u8 = 8;
const ANY: u8 = 15;
macro_rules! graph_def {
($name:expr, $kind:expr, [$($mask:expr),+], $var:expr, [$($graph:expr),*], [$($node:expr),*], [$($int:expr),*]) => {
GraphDef {
name: Cow::Borrowed($name),
kind: $kind,
inputs: Cow::Borrowed(&[$($mask),+]),
last_variable: $var,
custom_graphs: Cow::Borrowed(&[$(GraphId::std($graph)),*]),
custom_nodes: Cow::Borrowed(&[$(NodeId::std($node)),*]),
params: LocalParams {
ints: Cow::Borrowed(&[$($int),*]),
copies: alloc::vec::Vec::new(),
refs: alloc::vec::Vec::new(),
},
}
};
}
macro_rules! node_graph {
($name:expr, $mask:expr, $node:expr, [$($succ:expr),*]) => {
graph_def!($name, GraphKind::Static, [$mask], false, [$($succ),*], [$node], [])
};
}
macro_rules! selector {
($name:expr, $mask:expr, $f:expr) => {
graph_def!(
$name,
GraphKind::Selector(Callback::Static($f)),
[$mask],
false,
[],
[],
[]
)
};
}
macro_rules! function {
($name:expr, $mask:expr, $var:expr, $f:expr) => {
graph_def!(
$name,
GraphKind::Function(Callback::Static($f)),
[$mask],
$var,
[],
[],
[]
)
};
}
macro_rules! segmenter {
($name:expr, $mask:expr, $f:expr, [$($succ:expr),*]) => {
graph_def!($name, GraphKind::Segmenter(Callback::Static($f)), [$mask], false, [$($succ),*], [], [])
};
}
pub(crate) static STANDARD_GRAPHS: [GraphDef; 91] = [
GraphDef::ILLEGAL,
graph_def!(
"!zl.private.serial_store",
GraphKind::Store,
[SERIAL],
false,
[],
[],
[]
),
function!("!zl.store", ANY, true, &g::STORE),
function!("!zl.fse", SERIAL, false, &g::FSE),
function!("!zl.huffman", SERIAL | STRUCT | NUMERIC, false, &g::HUFFMAN),
function!(
"!zl.huffman_huf0",
SERIAL | STRUCT | NUMERIC,
false,
&g::HUFFMAN_HUF0
),
function!(
"!zl.huffman_pivco",
SERIAL | STRUCT | NUMERIC,
false,
&g::HUFFMAN_PIVCO
),
function!("!zl.entropy", SERIAL | STRUCT | NUMERIC, false, &g::ENTROPY),
selector!("!zl.constant", SERIAL | STRUCT | NUMERIC, &g::CONSTANT),
node_graph!("!zl.zstd", SERIAL, 62, [1]),
selector!("!zl.bitpack", SERIAL | NUMERIC, &g::BITPACK),
node_graph!("!zl.flatpack", SERIAL, 65, [1, 1]),
function!("!zl.field_lz", STRUCT | NUMERIC, false, &g::FIELD_LZ),
function!("!zl.compress_generic", ANY, true, &g::COMPRESS_GENERIC),
selector!(
"!zl.select_generic_lz_backend",
SERIAL,
&g::SELECT_GENERIC_LZ
),
segmenter!("!zl.segmenter_numeric", NUMERIC, &g::SEGMENT_NUMERIC, []),
selector!("!zl.select_numeric", NUMERIC, &g::SELECT_NUMERIC),
function!("!zl.ml_selector", NUMERIC, false, &g::ML_SELECTOR),
function!("!zl.cluster", ANY, true, &g::CLUSTERING),
function!("!zl.try_parse_int", STRING, false, &g::TRY_PARSE_INT),
function!("!zl.sddl", SERIAL, false, &g::SDDL),
segmenter!("!zl.sddl2", SERIAL, &g::SDDL2, []),
node_graph!("!zl.lz4", SERIAL, 86, [1]),
function!(
"!zl.partition_bitpack",
NUMERIC,
false,
&g::PARTITION_BITPACK
),
graph_def!(
"!zl.segment_num8_from_serial",
GraphKind::Segmenter(Callback::Static(&g::SEGMENT_NUM_FROM_SERIAL)),
[SERIAL],
false,
[65],
[],
[(301, 1)]
),
graph_def!(
"!zl.segment_num16_from_serial",
GraphKind::Segmenter(Callback::Static(&g::SEGMENT_NUM_FROM_SERIAL)),
[SERIAL],
false,
[66],
[],
[(301, 2)]
),
graph_def!(
"!zl.segment_num32_from_serial",
GraphKind::Segmenter(Callback::Static(&g::SEGMENT_NUM_FROM_SERIAL)),
[SERIAL],
false,
[67],
[],
[(301, 4)]
),
graph_def!(
"!zl.segment_num64_from_serial",
GraphKind::Segmenter(Callback::Static(&g::SEGMENT_NUM_FROM_SERIAL)),
[SERIAL],
false,
[68],
[],
[(301, 8)]
),
function!("!zl.lz", SERIAL, false, &g::LZ),
segmenter!("!zl.segment_serial", SERIAL, &g::SEGMENT_SERIAL, [13]),
function!(
"!zl.transformer_numeric",
NUMERIC,
true,
&g::TRANSFORMER_NUMERIC
),
selector!("!zl.brute_force", ANY, &g::BRUTE_FORCE),
selector!("!zl.private.store1", ANY, &g::STORE1),
node_graph!("!zl.private.string_store", STRING, 26, [1, 1]),
selector!("!zl.private.compress2", ANY, &g::COMPRESS1),
selector!("!zl.private.serial_compress", SERIAL, &g::SERIAL_COMPRESS),
selector!("!zl.private.struct_compress", STRUCT, &g::STRUCT_COMPRESS),
selector!(
"!zl.private.numeric_compress",
NUMERIC,
&g::NUMERIC_COMPRESS
),
selector!("!zl.private.string_compress", STRING, &g::STRING_COMPRESS),
node_graph!("!zl.private.string_separate_compress", STRING, 26, [35, 37]),
node_graph!("!zl.private.bitpack_serial", SERIAL, 63, [1]),
node_graph!("!zl.private.bitpack_int", NUMERIC, 64, [1]),
node_graph!("!zl.private.constant_serial", SERIAL, 70, [1]),
node_graph!("!zl.private.constant_fixed", STRUCT, 71, [1]),
node_graph!("!zl.private.fse_ncount", NUMERIC, 61, [1]),
function!(
"!zl.private.field_lz_literals",
STRUCT,
false,
&g::FIELD_LZ_LITERALS
),
selector!(
"!zl.private.field_lz_literals_channel",
SERIAL,
&g::FIELD_LZ_LITERALS_CHANNEL
),
node_graph!("!zl.private.delta_huffman", SERIAL, 19, [50]),
node_graph!("!zl.private.delta_flatpack", SERIAL, 19, [51]),
node_graph!("!zl.private.delta_zstd", SERIAL, 19, [52]),
node_graph!("!zl.private.delta_huffman_internal", NUMERIC, 2, [4]),
node_graph!("!zl.private.flatpack_internal", NUMERIC, 2, [11]),
node_graph!("!zl.private.zstd_internal", NUMERIC, 2, [9]),
node_graph!("!zl.private.delta_field_lz", NUMERIC, 2, [12]),
node_graph!("!zl.private.range_pack", NUMERIC, 28, [12]),
node_graph!("!zl.private.range_pack_zstd", NUMERIC, 28, [9]),
node_graph!("!zl.private.tokenize_delta_field_lz", NUMERIC, 72, [53, 12]),
function!("!zl.private.split_serial", SERIAL, false, &g::SPLIT),
function!("!zl.private.split_struct", STRUCT, false, &g::SPLIT),
function!("!zl.private.split_numeric", NUMERIC, false, &g::SPLIT),
function!("!zl.private.split_string", STRING, false, &g::SPLIT),
function!("!zl.private.sddl2_chunk", SERIAL, false, &g::SDDL2_CHUNK),
function!("!zl.n_to_n", ANY, true, &g::N_TO_N),
function!(
"!zl.private.merge_sorted_selector",
NUMERIC,
false,
&g::MERGE_SORTED_GRAPH
),
function!(
"!zl.private.transpose_split_selector",
STRUCT,
false,
&g::TRANSPOSE_SPLIT_SELECTOR
),
node_graph!("!zl.private.interpret_num8_compress", SERIAL, 19, [37]),
node_graph!("!zl.private.interpret_num16_compress", SERIAL, 20, [37]),
node_graph!("!zl.private.interpret_num32_compress", SERIAL, 21, [37]),
node_graph!("!zl.private.interpret_num64_compress", SERIAL, 22, [37]),
function!(
"!zl.compress_small_lengths",
NUMERIC,
false,
&g::COMPRESS_SMALL_LENGTHS
),
node_graph!("!zl.private.transformer_delta_int", NUMERIC, 2, [90]),
node_graph!("!zl.private.transformer_range_pack", NUMERIC, 28, [90]),
node_graph!("!zl.private.transformer_divide_by_gcd", NUMERIC, 31, [90]),
node_graph!(
"!zl.private.transformer_tokenize_numeric",
NUMERIC,
41,
[90, 90]
),
node_graph!(
"!zl.private.transformer_tokenize_numeric_sorted",
NUMERIC,
72,
[90, 90]
),
node_graph!("!zl.private.transformer_sparse_num", NUMERIC, 54, [90, 90]),
selector!(
"!zl.private.transformer_static_core",
NUMERIC,
&g::STATIC_CORE
),
node_graph!("!zl.private.transformer_static_delta", NUMERIC, 2, [76]),
node_graph!(
"!zl.private.transformer_static_range_pack",
NUMERIC,
28,
[76]
),
node_graph!(
"!zl.private.transformer_static_range_pack_delta",
NUMERIC,
28,
[77]
),
node_graph!("!zl.private.transformer_static_zigzag", NUMERIC, 4, [76]),
node_graph!("!zl.private.transformer_static_gcd", NUMERIC, 31, [78]),
selector!(
"!zl.private.transformer_static_index",
NUMERIC,
&g::STATIC_INDEX
),
node_graph!(
"!zl.private.transformer_static_tok_sorted",
NUMERIC,
72,
[77, 82]
),
node_graph!("!zl.private.transformer_static_delta_tok", NUMERIC, 2, [83]),
node_graph!(
"!zl.private.transformer_static_tok_mono",
NUMERIC,
72,
[9, 7]
),
node_graph!(
"!zl.private.transformer_static_delta_tok_mono",
NUMERIC,
2,
[85]
),
node_graph!(
"!zl.private.transformer_static_tok_mono_lz",
NUMERIC,
72,
[9, 9]
),
node_graph!(
"!zl.private.transformer_static_delta_tok_mono_lz",
NUMERIC,
2,
[87]
),
selector!(
"!zl.private.transformer_static_fallback",
NUMERIC,
&g::STATIC_FALLBACK
),
selector!(
"!zl.private.transformer_numeric1",
NUMERIC,
&g::TRANSFORMER_NUMERIC1
),
];