comp.lang.ada
 help / color / mirror / Atom feed
From: Martin Krischik <krischik@users.sourceforge.net>
Subject: Re: variable lenght strings
Date: Tue, 26 Oct 2004 20:13:56 +0200
Date: 2004-10-26T20:13:56+02:00	[thread overview]
Message-ID: <1845042.MQgRItqYm2@linux1.krischik.com> (raw)
In-Reply-To: uwtxd9y9j.fsf@obry.org

Pascal Obry wrote:

> 
> Martin Krischik <krischik@users.sourceforge.net> writes:
> 
>> functionᅵGet_Lineᅵ(
>> Fileᅵ:ᅵinᅵIO.File_Type)
>> return
>> String
>> is
>> Bufferᅵ:ᅵStringᅵ(1ᅵ..ᅵBufferSize);
>> Lastᅵᅵᅵ:ᅵNatural;
>> begin
>> IO.Get_Lineᅵ(
>> Fileᅵ=>ᅵFile,
>> Itemᅵ=>ᅵBuffer,
>> Lastᅵ=>ᅵLast);
>> 
>> ifᅵLastᅵ<ᅵBuffer'Lastᅵthen
>> returnᅵBufferᅵ(1ᅵ..ᅵLast);
>> elsifᅵIO.End_Of_Fileᅵ(File)ᅵthen
>> returnï¿œBuffer;
>> else
>> returnᅵBufferᅵ&ᅵGet_Lineᅵ(File);
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^
>          
> This kind of recursivity is very dangerous and could cause a stack
> overflow. It is better to use a non recursive version and to store the
> result into an Unbounded_String for example.

In fact I have got an non recursive version returning an Unbounded_String 
as well:

ᅵᅵᅵfunctionᅵGet_Lineᅵ(
ᅵᅵᅵᅵᅵᅵFileᅵ:ᅵinᅵIO.File_Type)
ᅵᅵᅵreturn
ᅵᅵᅵᅵᅵᅵS_U.Unbounded_String
ᅵᅵᅵis

ᅵᅵᅵᅵᅵᅵRetvalᅵ:ᅵS_U.Unbounded_Stringᅵ:=ᅵS_U.Null_Unbounded_String;
ᅵᅵᅵᅵᅵᅵItemᅵᅵᅵ:ᅵStringᅵ(1ᅵ..ᅵBufferSize);
ᅵᅵᅵᅵᅵᅵLastᅵᅵᅵ:ᅵNatural;
ᅵᅵᅵbegin
ᅵᅵᅵᅵᅵᅵGetWholeLineᅵ:
ᅵᅵᅵᅵᅵᅵloop
ᅵᅵᅵᅵᅵᅵᅵᅵᅵIO.Get_Lineᅵ(
ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵFileᅵ=>ᅵFile,
ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵItemᅵ=>ᅵItem,
ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵLastᅵ=>ᅵLast);

ᅵᅵᅵᅵᅵᅵᅵᅵᅵS_U.Appendᅵ(
ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵSourceᅵᅵᅵ=>ᅵRetval,
ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵNew_Itemᅵ=>ᅵItemᅵ(1ᅵ..ᅵLast));

ᅵᅵᅵᅵᅵᅵᅵᅵᅵexitᅵGetWholeLineᅵwhenᅵLastᅵ<ᅵItem'Last
ᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵᅵorᅵᅵᅵIO.End_Of_Fileᅵ(File);

ᅵᅵᅵᅵᅵᅵendᅵloopᅵGetWholeLine;

ᅵᅵᅵᅵᅵᅵreturnᅵRetval;
ᅵᅵᅵendᅵGet_Line;

With Regards

Martin

-- 
mailto://krischik@users.sourceforge.net
http://www.ada.krischik.com




  parent reply	other threads:[~2004-10-26 18:13 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-21 17:52 variable lenght strings fabio de francesco
2004-10-21 21:22 ` Martin Dowie
2004-10-21 22:42 ` Marius Amado Alves
2004-10-21 23:14   ` Matthew Heaney
2004-10-22  7:38     ` Martin Krischik
2004-10-22 12:30     ` fabio de francesco
2004-10-22  7:29   ` Martin Krischik
2004-10-22 13:01     ` Matthew Heaney
2004-10-24 15:46       ` Martin Krischik
2004-10-24 19:54         ` Jeffrey Carter
2004-10-24 21:30           ` Larry Kilgallen
2004-10-25  4:02             ` Jeffrey Carter
2004-10-21 23:01 ` Marius Amado Alves
2004-10-21 23:05 ` Stephen Leake
2004-10-22  7:25 ` Martin Krischik
2004-10-22 11:11   ` Martin Dowie
2004-10-24 15:43     ` Martin Krischik
2004-10-24 17:39       ` Martin Dowie
2004-10-24 18:37       ` Björn Persson
2004-10-25  7:30         ` Martin Krischik
2004-10-26  0:06           ` Randy Brukardt
2004-10-26  1:53             ` Larry Kilgallen
2004-10-26  8:49               ` Martin Krischik
2004-10-26 11:18               ` Marius Amado Alves
2004-10-26 12:48                 ` variable length strings Larry Kilgallen
2004-10-26 16:11                   ` Warren W. Gay VE3WWG
2004-10-26 18:50                     ` Björn Persson
2004-10-26 19:46                       ` Larry Kilgallen
2004-10-26  8:43             ` variable lenght strings Jean-Pierre Rosen
2004-10-26 13:15               ` Martin Krischik
2004-10-26 17:37                 ` Pascal Obry
2004-10-26 18:07                   ` Hyman Rosen
2004-10-26 20:10                     ` Pascal Obry
2004-10-27 10:26                       ` variable length strings Jacob Sparre Andersen
2004-10-27 10:39                         ` Pascal Obry
2004-10-27 11:47                         ` Larry Kilgallen
2004-10-28  7:18                           ` Jacob Sparre Andersen
2004-10-27 11:50                         ` Larry Kilgallen
     [not found]                         ` <uwtxcla1n.fsf@obry.Organization: LJK Software <PTzuwe3GsIg6@eisner.encompasserve.org>
2004-10-27 12:12                           ` Samuel Tardieu
2004-10-27 12:58                             ` Pascal Obry
2004-10-27 13:04                           ` Pascal Obry
2004-10-27 14:54                             ` Dmitry A. Kazakov
2004-10-27 16:38                               ` Pascal Obry
2004-10-28  8:14                                 ` Dmitry A. Kazakov
2004-10-28  8:49                                   ` Pascal Obry
2004-10-28  9:06                                     ` Dmitry A. Kazakov
2004-10-28 16:07                                       ` Pascal Obry
2004-10-28 22:05                                         ` Jeffrey Carter
2004-10-28 22:41                                           ` Randy Brukardt
2004-10-29  1:11                                             ` Jeffrey Carter
2004-10-29  7:42                                         ` Dmitry A. Kazakov
2004-10-28 10:31                         ` Larry Kilgallen
2004-10-26 18:13                   ` Martin Krischik [this message]
2004-10-27 12:01                 ` variable lenght strings Jean-Pierre Rosen
2004-10-26 17:46             ` Jeffrey Carter
2004-10-28 22:50               ` Randy Brukardt
2004-10-28 23:01                 ` Larry Kilgallen
2004-10-29 21:52                   ` Randy Brukardt
2004-10-29  8:48                 ` Dale Stanbrough
2004-10-29  9:11                   ` Larry Kilgallen
2004-10-24 18:38     ` Why these "Drop" parameters? (was: variable lenght strings) Björn Persson
2004-10-26  0:13       ` Randy Brukardt
2004-11-01  1:02         ` Why these "Drop" parameters? Björn Persson
2004-11-01 19:59           ` Randy Brukardt
2004-10-24 18:57 ` variable lenght strings Jeffrey Carter
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox