gcc/gcc/et-forest.h
Joseph Myers 71f3e391b3 system.h: Include "safe-ctype.h" instead of <safe-ctype.h>.
* system.h: Include "safe-ctype.h" instead of <safe-ctype.h>.
	Include <signal.h>, <sys/mman.h>, <sys/resource.h> and
	<sys/times.h>.
	(O_BINARY, SIGCHLD, MAP_FAILED, MAP_ANONYMOUS, kill):
	Conditionally define.
	(GET_ENVIRONMENT): Poison.
	* configure.ac: Don't test for mincore.
	* configure: Regenerate.
	* config.in: Regenerate.
	* collect2-aix.c: Don't include <sys/mman.h>.
	* collect2.c: Don't include <signal.h>.
	(SIGCHLD): Don't define.
	(prefix_from_env): Use getenv instead of GET_ENVIRONMENT.
	* config/alpha/alpha.c: Include "splay-tree.h" instead of
	<splay-tree.h>.
	* config/arm/arm.c (arm_target_help): Use getenv instead of
	GET_ENVIRONMENT.
	* config/avr/driver-avr.c: Don't include <stdlib.h>.
	* config/frv/frv.c: Don't include <ctype.h>.
	* config/host-darwin.c: Don't include <sys/mman.h>.
	* config/host-hpux.c: Don't include <sys/mman.h> or <unistd.h>.
	(MAP_FAILED): Don't define.
	* config/host-linux.c: Don't include <sys/mman.h> or <limits.h>.
	* config/host-solaris.c: Don't include <sys/mman.h>.
	* config/i386/cygming.h: Don't include <stdio.h>.
	* config/i386/driver-i386.c: Don't include <stdlib.h>.
	* config/i386/host-cygwin.c: Don't include <sys/mman.h>.
	* config/iq2000/iq2000.c: Don't include <signal.h>.
	* config/m32c/m32c-pragma.c: Don't include <stdio.h>.
	* config/m68hc11/m68hc11.c: Don't include <stdio.h>.
	* config/mep/mep-pragma.c: Don't include <stdio.h>.
	* config/microblaze/microblaze.c: Don't include <signal.h>.
	* config/mips/mips.c: Don't include <signal.h>.
	* config/rs6000/host-darwin.c: Don't include <signal.h>.
	* cppdefault.c (cpp_relocated): Use getenv instead of
	GET_ENVIRONMENT.
	* defaults.h (GET_ENVIRONMENT): Don't define.
	* et-forest.h: Don't include <ansidecl.h> or <stddef.h>.
	* gcc.c: Don't include <signal.h>, <sys/mman.h> or <sys/types.h>.
	(SIGCHLD, MAP_FAILED, kill): Don't define.
	(process_command): Use getenv instead of GET_ENVIRONMENT.
	* genhooks.c: Don't include <string.h>.
	* ggc-common.c: Don't include <sys/resource.h>, <sys/mman.h> or
	<sys/types.h>.
	(MAP_FAILED): Don't define.
	* ggc-page.c Don't include <sys/mman.h>.
	(MAP_ANONYMOUS, MAP_FAILED): Don't define.
	* ggc-zone.c: Don't include <sys/mman.h>.
	(MAP_ANONYMOUS, MAP_FAILED): Don't define.
	* graph.c: Include "config.h" instead of <config.h>.
	* incpath.c (add_env_var_paths): Use getenv instead of
	GET_ENVIRONMENT.
	* lto-wrapper.c: Don't include <errno.h>, <signal.h> or
	"libiberty.h".
	(SIGCHLD, kill): Don't define.
	* mips-tfile.c: Don't include <signal.h>.
	* opts.c: Don't include <signal.h> or <sys/resource.h>.
	(print_specific_help): Use getenv instead of GET_ENVIRONMENT.
	* passes.c: Don't include <signal.h>, <sys/resource.h> or
	<sys/times.h>.
	* sparseset.h: Don't include <assert.h>.
	* timevar.c: Don't include <sys/times.h> or <sys/resource.h>.
	* tlink.c: Don't include "libiberty.h".
	* toplev.c: Don't include <signal.h> or <sys/times.h>.
	* tree-mudflap.c: Include "demangle.h" instead of <demangle.h>.
	* tree-switch-conversion.c: Don't include <signal.h>.
	* vmsdbgout.c: Don't include <errno.h> or <string.h>.

c-family:
	* c-opts.c (check_deps_environment_vars): Use getenv instead of
	GET_ENVIRONMENT.
	* c-pch.c (O_BINARY): Don't define here.
	* c-pragma.h: Include "cpplib.h" instead of <cpplib.h>.

fortran:
	* gfortran.h (alloca): Don't include definitions.
	(NULL): Don't define.

java:
	* boehm.c: Include "config.h" instead of <config.h>.
	* builtins.c: Don't include <stdarg.h>.
	* class.c: Don't include "stdio.h".
	(O_BINARY): Don't define here.
	* jcf-depend.c: Don't include <assert.h>.
	(jcf_dependency_set_dep_file, jcf_dependency_init,
	jcf_dependency_write): Use gcc_assert.
	* jcf-io.c (O_BINARY): Don't define here.
	* jcf-path.c: Don't include "tm.h".
	(jcf_path_init): Use getenv instead of GET_ENVIRONMENT.
	* resource.c: Don't include "stdio.h".
	(O_BINARY): Don't define here.
	* verify-impl.c: Don't include <stdio.h>.

lto:
	* lto-endian.h: Delete.
	* lto-object.c: Don't include "libiberty.h".
	(O_BINARY): Don't define.
	* lto.c: Don't include "libiberty.h" or <sys/mman.h>.
	(O_BINARY): Don't define.

From-SVN: r167241
2010-11-29 14:09:41 +00:00

86 lines
2.7 KiB
C

/* Et-forest data structure implementation.
Copyright (C) 2002, 2003, 2004, 2005, 2007, 2010
Free Software Foundation, Inc.
This program 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 3 of the License, or
(at your option) any later version.
This program 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 this program; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
/* This package implements ET forest data structure. Each tree in
the structure maintains a tree structure and offers logarithmic time
for tree operations (insertion and removal of nodes and edges) and
poly-logarithmic time for nearest common ancestor.
ET tree stores its structure as a sequence of symbols obtained
by dfs(root)
dfs (node)
{
s = node;
for each child c of node do
s = concat (s, c, node);
return s;
}
For example for tree
1
/ | \
2 3 4
/ |
4 5
the sequence is 1 2 4 2 5 3 1 3 1 4 1.
The sequence is stored in a slightly modified splay tree.
In order to support various types of node values, a hashtable
is used to convert node values to the internal representation. */
#ifndef _ET_TREE_H
#define _ET_TREE_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* The node representing the node in an et tree. */
struct et_node
{
void *data; /* The data represented by the node. */
int dfs_num_in, dfs_num_out; /* Number of the node in the dfs ordering. */
struct et_node *father; /* Father of the node. */
struct et_node *son; /* The first of the sons of the node. */
struct et_node *left;
struct et_node *right; /* The brothers of the node. */
struct et_occ *rightmost_occ; /* The rightmost occurrence. */
struct et_occ *parent_occ; /* The occurrence of the parent node. */
};
struct et_node *et_new_tree (void *data);
void et_free_tree (struct et_node *);
void et_free_tree_force (struct et_node *);
void et_free_pools (void);
void et_set_father (struct et_node *, struct et_node *);
void et_split (struct et_node *);
struct et_node *et_nca (struct et_node *, struct et_node *);
bool et_below (struct et_node *, struct et_node *);
struct et_node *et_root (struct et_node *);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _ET_TREE_H */