aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/g-rewdat.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/g-rewdat.adb')
-rw-r--r--gcc/ada/g-rewdat.adb253
1 files changed, 0 insertions, 253 deletions
diff --git a/gcc/ada/g-rewdat.adb b/gcc/ada/g-rewdat.adb
deleted file mode 100644
index 855f787..0000000
--- a/gcc/ada/g-rewdat.adb
+++ /dev/null
@@ -1,253 +0,0 @@
------------------------------------------------------------------------------
--- GNAT COMPILER COMPONENTS --
--- --
--- G N A T . R E W R I T E _ D A T A --
--- --
--- B o d y --
--- --
--- Copyright (C) 2014, Free Software Foundation, 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 3, 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. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
-with Ada.Unchecked_Conversion;
-
-package body GNAT.Rewrite_Data is
-
- use Ada;
-
- subtype SEO is Stream_Element_Offset;
-
- procedure Do_Output
- (B : in out Buffer;
- Data : Stream_Element_Array;
- Output : not null access procedure (Data : Stream_Element_Array));
- -- Do the actual output. This ensures that we properly send the data
- -- through linked rewrite buffers if any.
-
- ------------
- -- Create --
- ------------
-
- function Create
- (Pattern, Value : String;
- Size : Stream_Element_Offset := 1_024) return Buffer
- is
-
- subtype SP is String (1 .. Pattern'Length);
- subtype SEAP is Stream_Element_Array (1 .. Pattern'Length);
-
- subtype SV is String (1 .. Value'Length);
- subtype SEAV is Stream_Element_Array (1 .. Value'Length);
-
- function To_SEAP is new Unchecked_Conversion (SP, SEAP);
- function To_SEAV is new Unchecked_Conversion (SV, SEAV);
-
- begin
- -- Return result (can't be smaller than pattern)
-
- return B : Buffer
- (SEO'Max (Size, SEO (Pattern'Length)),
- SEO (Pattern'Length),
- SEO (Value'Length))
- do
- B.Pattern := To_SEAP (Pattern);
- B.Value := To_SEAV (Value);
- B.Pos_C := 0;
- B.Pos_B := 0;
- end return;
- end Create;
-
- ---------------
- -- Do_Output --
- ---------------
-
- procedure Do_Output
- (B : in out Buffer;
- Data : Stream_Element_Array;
- Output : not null access procedure (Data : Stream_Element_Array))
- is
- begin
- if B.Next = null then
- Output (Data);
- else
- Write (B.Next.all, Data, Output);
- end if;
- end Do_Output;
-
- -----------
- -- Flush --
- -----------
-
- procedure Flush
- (B : in out Buffer;
- Output : not null access procedure (Data : Stream_Element_Array))
- is
- begin
- -- Flush output buffer
-
- if B.Pos_B > 0 then
- Do_Output (B, B.Buffer (1 .. B.Pos_B), Output);
- end if;
-
- -- Flush current buffer
-
- if B.Pos_C > 0 then
- Do_Output (B, B.Current (1 .. B.Pos_C), Output);
- end if;
-
- -- Flush linked buffer if any
-
- if B.Next /= null then
- Flush (B.Next.all, Output);
- end if;
-
- Reset (B);
- end Flush;
-
- ----------
- -- Link --
- ----------
-
- procedure Link (From : in out Buffer; To : Buffer_Ref) is
- begin
- From.Next := To;
- end Link;
-
- -----------
- -- Reset --
- -----------
-
- procedure Reset (B : in out Buffer) is
- begin
- B.Pos_B := 0;
- B.Pos_C := 0;
-
- if B.Next /= null then
- Reset (B.Next.all);
- end if;
- end Reset;
-
- -------------
- -- Rewrite --
- -------------
-
- procedure Rewrite
- (B : in out Buffer;
- Input : not null access procedure
- (Buffer : out Stream_Element_Array;
- Last : out Stream_Element_Offset);
- Output : not null access procedure (Data : Stream_Element_Array))
- is
- Buffer : Stream_Element_Array (1 .. B.Size);
- Last : Stream_Element_Offset;
-
- begin
- Rewrite_All : loop
- Input (Buffer, Last);
- exit Rewrite_All when Last = 0;
- Write (B, Buffer (1 .. Last), Output);
- end loop Rewrite_All;
-
- Flush (B, Output);
- end Rewrite;
-
- ----------
- -- Size --
- ----------
-
- function Size (B : Buffer) return Natural is
- begin
- return Natural (B.Pos_B + B.Pos_C);
- end Size;
-
- -----------
- -- Write --
- -----------
-
- procedure Write
- (B : in out Buffer;
- Data : Stream_Element_Array;
- Output : not null access procedure (Data : Stream_Element_Array))
- is
- procedure Need_Space (Size : Stream_Element_Offset);
- pragma Inline (Need_Space);
-
- ----------------
- -- Need_Space --
- ----------------
-
- procedure Need_Space (Size : Stream_Element_Offset) is
- begin
- if B.Pos_B + Size > B.Size then
- Do_Output (B, B.Buffer (1 .. B.Pos_B), Output);
- B.Pos_B := 0;
- end if;
- end Need_Space;
-
- -- Start of processing for Write
-
- begin
- if B.Size_Pattern = 0 then
- Do_Output (B, Data, Output);
-
- else
- for K in Data'Range loop
- if Data (K) = B.Pattern (B.Pos_C + 1) then
-
- -- Store possible start of a match
-
- B.Pos_C := B.Pos_C + 1;
- B.Current (B.Pos_C) := Data (K);
-
- else
- -- Not part of pattern, if a start of a match was found,
- -- remove it.
-
- if B.Pos_C /= 0 then
- Need_Space (B.Pos_C);
-
- B.Buffer (B.Pos_B + 1 .. B.Pos_B + B.Pos_C) :=
- B.Current (1 .. B.Pos_C);
- B.Pos_B := B.Pos_B + B.Pos_C;
- B.Pos_C := 0;
- end if;
-
- Need_Space (1);
- B.Pos_B := B.Pos_B + 1;
- B.Buffer (B.Pos_B) := Data (K);
- end if;
-
- if B.Pos_C = B.Size_Pattern then
-
- -- The pattern is found
-
- Need_Space (B.Size_Value);
-
- B.Buffer (B.Pos_B + 1 .. B.Pos_B + B.Size_Value) := B.Value;
- B.Pos_C := 0;
- B.Pos_B := B.Pos_B + B.Size_Value;
- end if;
- end loop;
- end if;
- end Write;
-
-end GNAT.Rewrite_Data;