diff options
author | cvs2svn <> | 2000-04-04 18:32:33 +0400 |
---|---|---|
committer | cvs2svn <> | 2000-04-04 18:32:33 +0400 |
commit | 69b6206fef6dd986a554334b6519b0543cab4f5e (patch) | |
tree | 1092995ccf9aad86f4c3e43be94406c03d02a5cd /include/partition.h | |
parent | 929ce68fe67a171b2e3ff506450ca893ed6532b3 (diff) |
This commit was manufactured by cvs2svn to create branch 'binutils-
2_10-branch'.
Sprout from cygnus 2000-02-22 16:18:13 UTC Ian Lance Taylor <iant@google.com> 'import libiberty from egcs'
Cherrypick from master 2000-03-30 02:19:55 UTC Jason Merrill <jason@redhat.com> ' * configure.in: -linux-gnu*, not -linux-gnu.':
ChangeLog
Makefile.in
config.guess
config.sub
config/ChangeLog
config/mh-i370pic
config/mt-aix43
config/mt-i370pic
config/mt-wince
configure
configure.in
include/ChangeLog
include/ansidecl.h
include/aout/ChangeLog
include/aout/aout64.h
include/bfdlink.h
include/coff/ChangeLog
include/coff/arm.h
include/coff/internal.h
include/coff/mcore.h
include/coff/mipspe.h
include/coff/pe.h
include/coff/sh.h
include/dis-asm.h
include/elf/ChangeLog
include/elf/arm-oabi.h
include/elf/arm.h
include/elf/avr.h
include/elf/common.h
include/elf/dwarf.h
include/elf/dwarf2.h
include/elf/hppa.h
include/elf/i370.h
include/elf/i386.h
include/elf/i960.h
include/elf/m32r.h
include/elf/m68k.h
include/elf/mcore.h
include/elf/mips.h
include/elf/mn10300.h
include/elf/pj.h
include/elf/reloc-macros.h
include/elf/sh.h
include/elf/sparc.h
include/hashtab.h
include/hp-symtab.h
include/opcode/ChangeLog
include/opcode/alpha.h
include/opcode/cgen.h
include/opcode/d10v.h
include/opcode/d30v.h
include/opcode/hppa.h
include/opcode/i370.h
include/opcode/i386.h
include/opcode/m68k.h
include/opcode/mips.h
include/opcode/mn10300.h
include/opcode/pj.h
include/opcode/ppc.h
include/partition.h
include/remote-sim.h
include/sim-d10v.h
ltconfig
ltmain.sh
mkdep
texinfo/texinfo.tex
Cherrypick from master 2000-04-04 14:32:32 UTC Alan Modra <modra@gmail.com> 'Move translated part of bug report string back into .c files so':
include/bin-bugs.h
Delete:
config/mh-aix43
configure.bat
include/wait.h
makeall.bat
Diffstat (limited to 'include/partition.h')
-rw-r--r-- | include/partition.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/include/partition.h b/include/partition.h new file mode 100644 index 000000000..f49d67a8c --- /dev/null +++ b/include/partition.h @@ -0,0 +1,81 @@ +/* List implentation of a partition of consecutive integers. + Copyright (C) 2000 Free Software Foundation, Inc. + Contributed by CodeSourcery, LLC. + + This file is part of GNU CC. + + GNU CC 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, or (at your option) + any later version. + + GNU CC 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 GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* This package implements a partition of consecutive integers. The + elements are partitioned into classes. Each class is represented + by one of its elements, the canonical element, which is chosen + arbitrarily from elements in the class. The principal operations + on a partition are FIND, which takes an element, determines its + class, and returns the canonical element for that class, and UNION, + which unites the two classes that contain two given elements into a + single class. + + The list implementation used here provides constant-time finds. By + storing the size of each class with the class's canonical element, + it is able to perform unions over all the classes in the partition + in O (N log N) time. */ + +#ifndef _PARTITION_H +#define _PARTITION_H + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include <ansidecl.h> +#include <stdio.h> + +struct partition_elem +{ + /* The canonical element that represents the class containing this + element. */ + int class_element; + /* The next element in this class. Elements in each class form a + circular list. */ + struct partition_elem* next; + /* The number of elements in this class. Valid only if this is the + canonical element for its class. */ + unsigned class_count; +}; + +typedef struct partition_def +{ + /* The number of elements in this partition. */ + int num_elements; + /* The elements in the partition. */ + struct partition_elem elements[1]; +} *partition; + +extern partition partition_new PARAMS((int)); +extern void partition_delete PARAMS((partition)); +extern int partition_union PARAMS((partition, + int, + int)); +extern void partition_print PARAMS((partition, + FILE*)); + +/* Returns the canonical element corresponding to the class containing + ELEMENT__ in PARTITION__. */ + +#define partition_find(partition__, element__) \ + ((partition__)->elements[(element__)].class_element) + +#endif /* _PARTITION_H */ |