OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [zlib/] [contrib/] [ada/] [zlib-streams.adb] - Blame information for rev 745

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 745 jeremybenn
----------------------------------------------------------------
2
--  ZLib for Ada thick binding.                               --
3
--                                                            --
4
--  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
5
--                                                            --
6
--  Open source license information is in the zlib.ads file.  --
7
----------------------------------------------------------------
8
 
9
--  $Id: zlib-streams.adb,v 1.10 2004/05/31 10:53:40 vagul Exp $
10
 
11
with Ada.Unchecked_Deallocation;
12
 
13
package body ZLib.Streams is
14
 
15
   -----------
16
   -- Close --
17
   -----------
18
 
19
   procedure Close (Stream : in out Stream_Type) is
20
      procedure Free is new Ada.Unchecked_Deallocation
21
         (Stream_Element_Array, Buffer_Access);
22
   begin
23
      if Stream.Mode = Out_Stream or Stream.Mode = Duplex then
24
         --  We should flush the data written by the writer.
25
 
26
         Flush (Stream, Finish);
27
 
28
         Close (Stream.Writer);
29
      end if;
30
 
31
      if Stream.Mode = In_Stream or Stream.Mode = Duplex then
32
         Close (Stream.Reader);
33
         Free (Stream.Buffer);
34
      end if;
35
   end Close;
36
 
37
   ------------
38
   -- Create --
39
   ------------
40
 
41
   procedure Create
42
     (Stream            :    out Stream_Type;
43
      Mode              : in     Stream_Mode;
44
      Back              : in     Stream_Access;
45
      Back_Compressed   : in     Boolean;
46
      Level             : in     Compression_Level := Default_Compression;
47
      Strategy          : in     Strategy_Type     := Default_Strategy;
48
      Header            : in     Header_Type       := Default;
49
      Read_Buffer_Size  : in     Ada.Streams.Stream_Element_Offset
50
                                    := Default_Buffer_Size;
51
      Write_Buffer_Size : in     Ada.Streams.Stream_Element_Offset
52
                                    := Default_Buffer_Size)
53
   is
54
 
55
      subtype Buffer_Subtype is Stream_Element_Array (1 .. Read_Buffer_Size);
56
 
57
      procedure Init_Filter
58
         (Filter   : in out Filter_Type;
59
          Compress : in     Boolean);
60
 
61
      -----------------
62
      -- Init_Filter --
63
      -----------------
64
 
65
      procedure Init_Filter
66
         (Filter   : in out Filter_Type;
67
          Compress : in     Boolean) is
68
      begin
69
         if Compress then
70
            Deflate_Init
71
              (Filter, Level, Strategy, Header => Header);
72
         else
73
            Inflate_Init (Filter, Header => Header);
74
         end if;
75
      end Init_Filter;
76
 
77
   begin
78
      Stream.Back := Back;
79
      Stream.Mode := Mode;
80
 
81
      if Mode = Out_Stream or Mode = Duplex then
82
         Init_Filter (Stream.Writer, Back_Compressed);
83
         Stream.Buffer_Size := Write_Buffer_Size;
84
      else
85
         Stream.Buffer_Size := 0;
86
      end if;
87
 
88
      if Mode = In_Stream or Mode = Duplex then
89
         Init_Filter (Stream.Reader, not Back_Compressed);
90
 
91
         Stream.Buffer     := new Buffer_Subtype;
92
         Stream.Rest_First := Stream.Buffer'Last + 1;
93
         Stream.Rest_Last  := Stream.Buffer'Last;
94
      end if;
95
   end Create;
96
 
97
   -----------
98
   -- Flush --
99
   -----------
100
 
101
   procedure Flush
102
     (Stream : in out Stream_Type;
103
      Mode   : in     Flush_Mode := Sync_Flush)
104
   is
105
      Buffer : Stream_Element_Array (1 .. Stream.Buffer_Size);
106
      Last   : Stream_Element_Offset;
107
   begin
108
      loop
109
         Flush (Stream.Writer, Buffer, Last, Mode);
110
 
111
         Ada.Streams.Write (Stream.Back.all, Buffer (1 .. Last));
112
 
113
         exit when Last < Buffer'Last;
114
      end loop;
115
   end Flush;
116
 
117
   -------------
118
   -- Is_Open --
119
   -------------
120
 
121
   function Is_Open (Stream : Stream_Type) return Boolean is
122
   begin
123
      return Is_Open (Stream.Reader) or else Is_Open (Stream.Writer);
124
   end Is_Open;
125
 
126
   ----------
127
   -- Read --
128
   ----------
129
 
130
   procedure Read
131
     (Stream : in out Stream_Type;
132
      Item   :    out Stream_Element_Array;
133
      Last   :    out Stream_Element_Offset)
134
   is
135
 
136
      procedure Read
137
        (Item : out Stream_Element_Array;
138
         Last : out Stream_Element_Offset);
139
 
140
      ----------
141
      -- Read --
142
      ----------
143
 
144
      procedure Read
145
        (Item : out Stream_Element_Array;
146
         Last : out Stream_Element_Offset) is
147
      begin
148
         Ada.Streams.Read (Stream.Back.all, Item, Last);
149
      end Read;
150
 
151
      procedure Read is new ZLib.Read
152
         (Read       => Read,
153
          Buffer     => Stream.Buffer.all,
154
          Rest_First => Stream.Rest_First,
155
          Rest_Last  => Stream.Rest_Last);
156
 
157
   begin
158
      Read (Stream.Reader, Item, Last);
159
   end Read;
160
 
161
   -------------------
162
   -- Read_Total_In --
163
   -------------------
164
 
165
   function Read_Total_In (Stream : in Stream_Type) return Count is
166
   begin
167
      return Total_In (Stream.Reader);
168
   end Read_Total_In;
169
 
170
   --------------------
171
   -- Read_Total_Out --
172
   --------------------
173
 
174
   function Read_Total_Out (Stream : in Stream_Type) return Count is
175
   begin
176
      return Total_Out (Stream.Reader);
177
   end Read_Total_Out;
178
 
179
   -----------
180
   -- Write --
181
   -----------
182
 
183
   procedure Write
184
     (Stream : in out Stream_Type;
185
      Item   : in     Stream_Element_Array)
186
   is
187
 
188
      procedure Write (Item : in Stream_Element_Array);
189
 
190
      -----------
191
      -- Write --
192
      -----------
193
 
194
      procedure Write (Item : in Stream_Element_Array) is
195
      begin
196
         Ada.Streams.Write (Stream.Back.all, Item);
197
      end Write;
198
 
199
      procedure Write is new ZLib.Write
200
         (Write       => Write,
201
          Buffer_Size => Stream.Buffer_Size);
202
 
203
   begin
204
      Write (Stream.Writer, Item, No_Flush);
205
   end Write;
206
 
207
   --------------------
208
   -- Write_Total_In --
209
   --------------------
210
 
211
   function Write_Total_In (Stream : in Stream_Type) return Count is
212
   begin
213
      return Total_In (Stream.Writer);
214
   end Write_Total_In;
215
 
216
   ---------------------
217
   -- Write_Total_Out --
218
   ---------------------
219
 
220
   function Write_Total_Out (Stream : in Stream_Type) return Count is
221
   begin
222
      return Total_Out (Stream.Writer);
223
   end Write_Total_Out;
224
 
225
end ZLib.Streams;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.