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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
/*=============================================================================
pammap.h
===============================================================================
Interface header file for hash table and lookup table pam functions
in libpnm.
=============================================================================*/
#ifndef PAMMAP_H
#define PAMMAP_H
#include <netpbm/colorname.h>
#include <netpbm/pam.h>
#ifdef __cplusplus
extern "C" {
#endif
#if 0
} /* to fake out automatic code indenters */
#endif
struct tupleint {
/* An ordered pair of a tuple value and an integer, such as you
would find in a tuple table or tuple hash.
Note that this is a variable length structure.
*/
int value;
sample tuple[1];
/* This is actually a variable size array -- its size is the
depth of the tuple in question. Some compilers do not let us
declare a variable length array.
*/
};
typedef struct tupleint ** tupletable;
typedef struct {
unsigned int size;
tupletable table;
} tupletable2;
struct tupleint_list_item {
struct tupleint_list_item * next;
struct tupleint tupleint;
};
typedef struct tupleint_list_item * tupleint_list;
typedef tupleint_list * tuplehash;
unsigned int
pnm_hashtuple(struct pam * const pamP, tuple const tuple);
void
pnm_addtotuplehash(struct pam * const pamP,
tuplehash const tuplehash,
tuple const tuple,
int const value,
int * const fitsP);
void
pnm_addtuplefreqoccurrence(struct pam * const pamP,
tuple const value,
tuplehash const tuplefreqhash,
int * const firstOccurrenceP);
void
pnm_lookuptuple(struct pam * const pamP, const tuplehash tuplehash,
const tuple searchval,
int * const foundP, int * const retvalP);
tupletable
pnm_alloctupletable(const struct pam * const pamP, unsigned int const size);
void
pnm_freetupletable(const struct pam * const pamP,
tupletable const tupletable);
void
pnm_freetupletable2(const struct pam * const pamP,
tupletable2 const tupletable);
tuplehash
pnm_createtuplehash(void);
void
pnm_destroytuplehash(tuplehash const tuplehash);
tupletable
pnm_computetuplefreqtable(struct pam * const pamP,
tuple ** const tupleArray,
unsigned int const maxsize,
unsigned int * const sizeP);
tupletable
pnm_computetuplefreqtable2(struct pam * const pamP,
tuple ** const tupleArray,
unsigned int const maxsize,
sample const newMaxval,
unsigned int * const sizeP);
tupletable
pnm_computetuplefreqtable3(struct pam * const pamP,
tuple ** const tupleArray,
unsigned int const maxsize,
unsigned int const newDepth,
sample const newMaxval,
unsigned int * const countP);
tuplehash
pnm_computetuplefreqhash(struct pam * const pamP,
tuple ** const tupleArray,
unsigned int const maxsize,
unsigned int * const sizeP);
tuplehash
pnm_computetupletablehash(struct pam * const pamP,
tupletable const tupletable,
unsigned int const tupletableSize);
tupletable
pnm_tuplehashtotable(const struct pam * const pamP,
tuplehash const tuplehash,
unsigned int const maxsize);
char*
pam_colorname(struct pam * const pamP,
tuple const color,
enum colornameFormat const format);
#ifdef __cplusplus
}
#endif
#endif
|