]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - gcc/ada/g-hesora.adb
Imported gcc-4.4.3
[msp430-gcc.git] / gcc / ada / g-hesora.adb
diff --git a/gcc/ada/g-hesora.adb b/gcc/ada/g-hesora.adb
deleted file mode 100644 (file)
index 3ce67a4..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-------------------------------------------------------------------------------
---                                                                          --
---                         GNAT RUNTIME COMPONENTS                          --
---                                                                          --
---                     G N A T . H E A P _ S O R T _ A                      --
---                                                                          --
---                                 B o d y                                  --
---                                                                          --
---                            $Revision: 1.1.16.1 $
---                                                                          --
---           Copyright (C) 1995-1999 Ada Core Technologies, Inc.            --
---                                                                          --
--- GNAT is free software;  you can  redistribute it  and/or modify it under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 2,  or (at your option) any later ver- --
--- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT 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  distributed with GNAT;  see file COPYING.  If not, write --
--- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--- MA 02111-1307, USA.                                                      --
---                                                                          --
--- As a special exception,  if other files  instantiate  generics from this --
--- unit, or you link  this unit with other files  to produce an executable, --
--- this  unit  does not  by itself cause  the resulting  executable  to  be --
--- covered  by the  GNU  General  Public  License.  This exception does not --
--- however invalidate  any other reasons why  the executable file  might be --
--- covered by the  GNU Public License.                                      --
---                                                                          --
--- GNAT is maintained by Ada Core Technologies Inc (http://www.gnat.com).   --
---                                                                          --
-------------------------------------------------------------------------------
-
-package body GNAT.Heap_Sort_A is
-
-   ----------
-   -- Sort --
-   ----------
-
-   --  We are using the classical heapsort algorithm (i.e. Floyd's Treesort3)
-   --  as described by Knuth ("The Art of Programming", Volume III, first
-   --  edition, section 5.2.3, p. 145-147) with the modification that is
-   --  mentioned in exercise 18. For more details on this algorithm, see
-   --  Robert B. K. Dewar PhD thesis "The use of Computers in the X-ray
-   --  Phase Problem". University of Chicago, 1968, which was the first
-   --  publication of the modification, which reduces the number of compares
-   --  from 2NlogN to NlogN.
-
-   procedure Sort (N : Natural; Move : Move_Procedure; Lt : Lt_Function) is
-
-      Max : Natural := N;
-      --  Current Max index in tree being sifted
-
-      procedure Sift (S : Positive);
-      --  This procedure sifts up node S, i.e. converts the subtree rooted
-      --  at node S into a heap, given the precondition that any sons of
-      --  S are already heaps. On entry, the contents of node S is found
-      --  in the temporary (index 0), the actual contents of node S on
-      --  entry are irrelevant. This is just a minor optimization to avoid
-      --  what would otherwise be two junk moves in phase two of the sort.
-
-      procedure Sift (S : Positive) is
-         C      : Positive := S;
-         Son    : Positive;
-         Father : Positive;
-
-      begin
-         --  This is where the optimization is done, normally we would do a
-         --  comparison at each stage between the current node and the larger
-         --  of the two sons, and continue the sift only if the current node
-         --  was less than this maximum. In this modified optimized version,
-         --  we assume that the current node will be less than the larger
-         --  son, and unconditionally sift up. Then when we get to the bottom
-         --  of the tree, we check parents to make sure that we did not make
-         --  a mistake. This roughly cuts the number of comparisions in half,
-         --  since it is almost always the case that our assumption is correct.
-
-         --  Loop to pull up larger sons
-
-         loop
-            Son := 2 * C;
-            exit when Son > Max;
-
-            if Son < Max and then Lt (Son, Son + 1) then
-               Son := Son + 1;
-            end if;
-
-            Move (Son, C);
-            C := Son;
-         end loop;
-
-         --  Loop to check fathers
-
-         while C /= S loop
-            Father := C / 2;
-
-            if Lt (Father, 0) then
-               Move (Father, C);
-               C := Father;
-            else
-               exit;
-            end if;
-         end loop;
-
-         --  Last step is to pop the sifted node into place
-
-         Move (0, C);
-      end Sift;
-
-   --  Start of processing for Sort
-
-   begin
-      --  Phase one of heapsort is to build the heap. This is done by
-      --  sifting nodes N/2 .. 1 in sequence.
-
-      for J in reverse 1 .. N / 2 loop
-         Move (J, 0);
-         Sift (J);
-      end loop;
-
-      --  In phase 2, the largest node is moved to end, reducing the size
-      --  of the tree by one, and the displaced node is sifted down from
-      --  the top, so that the largest node is again at the top.
-
-      while Max > 1 loop
-         Move (Max, 0);
-         Move (1, Max);
-         Max := Max - 1;
-         Sift (1);
-      end loop;
-
-   end Sort;
-
-end GNAT.Heap_Sort_A;