|
|
1.1 root 1: /* ident "@(#)ctrans:src/tree_copy.h 1.2" */
2: /* -*- Mode: C -*- begin include file tree_copy.H
3: argument class for copying trees. */
4:
5: #include "hash.h"
6: #include "tree_walk.h"
7:
8: /* The copier procedure expects one of these as its
9: info pointer */
10:
11: class tree_copy_info {
12: public:
13: /* If non-zero, this procedure is called at each node.
14: it returns an action. It cannot currently return
15: a node of a different class and also return an
16: action other than tna_stop, since the walker won't
17: notice that the rug has been removed from beneath its feet.
18: The procedure must set the last argument to indicate whether
19: or not to register the node in the hash table and use the
20: replacement every future time it is encountered.
21: */
22:
23: void (* node_hook) (void * info, Pnode&, node_class, tree_node_action&,
24: int&);
25:
26: /* if this is nonzero it is used to allocate space for
27: the copies. We don't run constructors since we always
28: bit copy over the new copy. */
29: char * (* malloc_hook) (void * info, size_t);
30: void * hook_info;
31: tree_copy_info ()
32: {
33: hook_info = 0;
34: node_hook = 0;
35: malloc_hook = 0;
36: };
37: char * malloc (size_t s) {
38: return malloc_hook ? malloc_hook(hook_info, s) : ::malloc (s);
39: };
40: void check_node (Pnode& n,
41: node_class cl,
42: tree_node_action& action,
43: int& never_see_again) {
44: if(node_hook)
45: node_hook(hook_info, n, cl, action, never_see_again);
46: };
47: };
48:
49: void copy_tree (Pnode& n, tree_copy_info& tci, Hash * cht = 0);
50:
51: /* End tree_copy.H */
52:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.