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
|
/*
Copyright (c) 2007 Taco Hoekwater <taco@luatex.org>
This file is part of LuaTeX.
LuaTeX is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
LuaTeX is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LuaTeX; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
$Id$ */
#ifndef MANAGED_SA_H
#define MANAGED_SA_H 1
/* the next two sets of three had better match up exactly, but using bare numbers
is easier on the C compiler */
#define HIGHPART 128
#define MIDPART 128
#define LOWPART 128
#define HIGHPART_PART(a) ((a>>14)&127)
#define MIDPART_PART(a) ((a>>7)&127)
#define LOWPART_PART(a) (a&127)
#define Mxmalloc_array(a,b) xmalloc(b*sizeof(a))
#define Mxrealloc_array(a,b,c) xrealloc(a,c*sizeof(b))
#define Mxfree(a) free(a); a=NULL
typedef unsigned int sa_tree_item;
typedef struct {
int code;
int level;
sa_tree_item value;
} sa_stack_item;
typedef struct {
int stack_size; /* initial stack size */
int stack_step; /* increment stack step */
int stack_ptr; /* current stack point */
int dflt; /* default item value */
sa_tree_item *** tree; /* item tree head */
sa_stack_item * stack; /* stack tree head */
} sa_tree_head;
typedef sa_tree_head *sa_tree;
extern sa_tree_item get_sa_item (const sa_tree head, const integer n) ;
extern void set_sa_item (sa_tree head, integer n, sa_tree_item v, integer gl) ;
extern sa_tree new_sa_tree (integer size, sa_tree_item dflt);
extern sa_tree copy_sa_tree (sa_tree head);
extern void destroy_sa_tree (sa_tree head);
extern void dump_sa_tree (sa_tree a);
extern sa_tree undump_sa_tree (void) ;
extern void restore_sa_stack (sa_tree a, integer gl);
extern void clear_sa_stack (sa_tree a);
#endif
|