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
|
/* Copyright (C) 1994 Aladdin Enterprises. All rights reserved.
* This software is licensed to a single customer by Artifex Software Inc.
* under the terms of a specific OEM agreement.
*/
/*$RCSfile$ $Revision$ */
/* Definitions for BoundedHuffman filters */
/* Requires strimpl.h */
#ifndef sbhc_INCLUDED
# define sbhc_INCLUDED
#include "shc.h"
/*
* The BoundedHuffman filters extend the basic Huffman coding model by
* providing the ability to encode runs of zeros as a single data item,
* and by providing an end-of-data (EOD) marker.
*/
#define max_zero_run 100
/* Common state */
#define stream_BHC_state_common\
stream_hc_state_common;\
hc_definition definition;\
/* The client sets the following before initialization. */\
bool EndOfData;\
uint EncodeZeroRuns;\
/* The following are updated dynamically. */\
int zeros /* # of zeros scanned or left to output */
typedef struct stream_BHC_state_s {
stream_BHC_state_common;
} stream_BHC_state;
/* BoundedHuffmanEncode */
typedef struct stream_BHCE_state_s {
stream_BHC_state_common;
hce_table encode;
} stream_BHCE_state;
#define private_st_BHCE_state() /* in sbhc.c */\
gs_private_st_ptrs3(st_BHCE_state, stream_BHCE_state,\
"BoundedHuffmanEncode state", bhce_enum_ptrs, bhce_reloc_ptrs,\
definition.counts, definition.values, encode.codes)
extern const stream_template s_BHCE_template;
#define s_bhce_init_inline(ss)\
(s_hce_init_inline(ss), (ss)->zeros = 0)
/* BoundedHuffmanDecode */
typedef struct stream_BHCD_state_s {
stream_BHC_state_common;
hcd_table decode;
} stream_BHCD_state;
#define private_st_BHCD_state() /* in sbhc.c */\
gs_private_st_ptrs3(st_BHCD_state, stream_BHCD_state,\
"BoundedHuffmanDecode state", bhcd_enum_ptrs, bhcd_reloc_ptrs,\
definition.counts, definition.values, decode.codes)
extern const stream_template s_BHCD_template;
#define s_bhcd_init_inline(ss)\
(s_hcd_init_inline(ss), (ss)->zeros = 0)
/* Declare variables that hold the decoder state. */
#define bhcd_declare_state\
hcd_declare_state;\
int zeros
/* Load the state from the stream. */
/* Free variables: pr, ss, p, rlimit, bits, bits_left, zeros. */
#define bhcd_load_state()\
hcd_load_state(), zeros = ss->zeros
/* Store the state back in the stream. */
/* Free variables: pr, ss, p, bits, bits_left, zeros. */
#define bhcd_store_state()\
hcd_store_state(), ss->zeros = zeros
#endif /* sbhc_INCLUDED */
|