Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
7639 views
1
#include "mupdf/pdf.h"
2
3
static int
4
pdf_make_hash_key(fz_context *ctx, fz_store_hash *hash, void *key_)
5
{
6
pdf_obj *key = (pdf_obj *)key_;
7
8
if (!pdf_is_indirect(ctx, key))
9
return 0;
10
hash->u.i.i0 = pdf_to_num(ctx, key);
11
hash->u.i.i1 = pdf_to_gen(ctx, key);
12
hash->u.i.ptr = pdf_get_indirect_document(ctx, key);
13
return 1;
14
}
15
16
static void *
17
pdf_keep_key(fz_context *ctx, void *key)
18
{
19
return (void *)pdf_keep_obj(ctx, (pdf_obj *)key);
20
}
21
22
static void
23
pdf_drop_key(fz_context *ctx, void *key)
24
{
25
pdf_drop_obj(ctx, (pdf_obj *)key);
26
}
27
28
static int
29
pdf_cmp_key(fz_context *ctx, void *k0, void *k1)
30
{
31
return pdf_objcmp(ctx, (pdf_obj *)k0, (pdf_obj *)k1);
32
}
33
34
#ifndef NDEBUG
35
static void
36
pdf_debug_key(fz_context *ctx, FILE *out, void *key_)
37
{
38
pdf_obj *key = (pdf_obj *)key_;
39
40
if (pdf_is_indirect(ctx, key))
41
{
42
fprintf(out, "(%d %d R) ", pdf_to_num(ctx, key), pdf_to_gen(ctx, key));
43
}
44
else
45
pdf_fprint_obj(ctx, out, key, 0);
46
}
47
#endif
48
49
static fz_store_type pdf_obj_store_type =
50
{
51
pdf_make_hash_key,
52
pdf_keep_key,
53
pdf_drop_key,
54
pdf_cmp_key,
55
#ifndef NDEBUG
56
pdf_debug_key
57
#endif
58
};
59
60
void
61
pdf_store_item(fz_context *ctx, pdf_obj *key, void *val, unsigned int itemsize)
62
{
63
void *existing;
64
existing = fz_store_item(ctx, key, val, itemsize, &pdf_obj_store_type);
65
assert(existing == NULL);
66
}
67
68
void *
69
pdf_find_item(fz_context *ctx, fz_store_drop_fn *drop, pdf_obj *key)
70
{
71
return fz_find_item(ctx, drop, key, &pdf_obj_store_type);
72
}
73
74
void
75
pdf_remove_item(fz_context *ctx, fz_store_drop_fn *drop, pdf_obj *key)
76
{
77
fz_remove_item(ctx, drop, key, &pdf_obj_store_type);
78
}
79
80