diff options
| author | Ondrej Ille <ondrej.ille@gmail.com> | 2021-04-22 17:50:03 +0200 | 
|---|---|---|
| committer | tgingold <tgingold@users.noreply.github.com> | 2021-04-22 18:55:28 +0200 | 
| commit | e219923ae60f0b172d4d5f292af2bf847003f2d2 (patch) | |
| tree | 48aeaf8f6df2830f8a1df07493e36ebf168c53a0 /src | |
| parent | 533911923343c79875cff1d0301516bd1e535d76 (diff) | |
| download | ghdl-e219923ae60f0b172d4d5f292af2bf847003f2d2.tar.gz ghdl-e219923ae60f0b172d4d5f292af2bf847003f2d2.tar.bz2 ghdl-e219923ae60f0b172d4d5f292af2bf847003f2d2.zip  | |
grt: Use GRTs sort for dump table.
Diffstat (limited to 'src')
| -rw-r--r-- | src/grt/grt-waves.adb | 28 | 
1 files changed, 19 insertions, 9 deletions
diff --git a/src/grt/grt-waves.adb b/src/grt/grt-waves.adb index b3d575c3a..a2fc86356 100644 --- a/src/grt/grt-waves.adb +++ b/src/grt/grt-waves.adb @@ -45,7 +45,7 @@ with Grt.Ghw; use Grt.Ghw;  with Grt.Wave_Opt; use Grt.Wave_Opt;  with Grt.Wave_Opt.File; use Grt.Wave_Opt.File;  with Grt.Wave_Opt.Design; use Grt.Wave_Opt.Design; -with Ada.Containers.Generic_Array_Sort; +with Grt.Algos; use Grt.Algos;  pragma Elaborate_All (Grt.Rtis_Utils);  pragma Elaborate_All (Grt.Table); @@ -1782,15 +1782,26 @@ package body Grt.Waves is     procedure Wave_Cycle     is -      type Arr_Type is array (Dump_Table_Index range <>) of Ghdl_Signal_Ptr; - -      function Cmp (Left, Right : Ghdl_Signal_Ptr) return Boolean is +      function Lt (Op1, Op2 : Natural) return Boolean is +         Left : Ghdl_Signal_Ptr; +         Right : Ghdl_Signal_Ptr;        begin +         Left := Changed_Sig_Table.Table (Op1); +         Right := Changed_Sig_Table.Table (Op2);           return Left.Dump_Table_Idx < Right.Dump_Table_Idx; -      end Cmp; +      end Lt; +      pragma Inline (Lt); + +      procedure Swap (From, To : Natural) is +         Tmp : Ghdl_Signal_Ptr; +      begin +         Tmp := Changed_Sig_Table.Table (From); +         Changed_Sig_Table.Table (From) := Changed_Sig_Table.Table (To); +         Changed_Sig_Table.Table (To) := Tmp; +      end Swap; +      pragma Inline (Swap); -      procedure Sort is new Ada.Containers.Generic_Array_Sort -        (Dump_Table_Index, Ghdl_Signal_Ptr, Arr_Type, "<" => Cmp); +      procedure Sort is new Grt.Algos.Heap_Sort (Lt => Lt, Swap => Swap);        Diff : Std_Time;        Sig : Ghdl_Signal_Ptr; @@ -1809,8 +1820,7 @@ package body Grt.Waves is        --  Dump signals.        Last := 0;        if Changed_Sig_Table.First <= Changed_Sig_Table.Last then -         Sort (Arr_Type (Changed_Sig_Table.Table -                         (Changed_Sig_Table.First .. Changed_Sig_Table.Last))); +         Sort (Changed_Sig_Table.Last);           for I in Changed_Sig_Table.First .. Changed_Sig_Table.Last loop              Sig := Changed_Sig_Table.Table(I);              if Sig.Flags.RO_Event then  | 
