comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: String filtering
Date: Wed, 28 Sep 2005 10:15:12 +0200
Date: 2005-09-28T10:14:44+02:00	[thread overview]
Message-ID: <1gdgwjo7aini9.1qzlnlpq5gsa$.dlg@40tude.net> (raw)
In-Reply-To: m38xxi6oob.fsf@rr.trudgett

On Wed, 28 Sep 2005 10:06:44 +1000, David Trudgett wrote:

> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> writes:
> 
>> On Tue, 27 Sep 2005 14:42:02 +0100, Martin Dowie wrote:
>>> 2nd sentence of ARM 95 A.4.5 (76) reads:
>>> 
>>>   "The function To_Unbounded_String(Length : in Natural)
>>>     returns an Unbounded_String that represents an uninitialized
>>>     String whose length is Length."
>>
>> Ah, now I see what you meant!
> 
> Yep, that's what I meant, too.

No. What Martin meant is that:

   X : Unbounded_String := To_Unbounded_String (Count);

is filled with rubbish

What I meant is that:

   X : Unbounded_String;

is an empty string, being formally uninitialized. You can imagine it as
Unbounded_Strings having a default constructor setting them empty.

> I've made some revisions based on various comments, and this is what I
> have at the moment (incorporating both a string and unbounded_string
> version):
> 
>     Space_Char  : constant Character_Range := (' ', ' ');
>     Lower_Chars : constant Character_Range := ('a', 'z');
>     Upper_Chars : constant Character_Range := ('A', 'Z');
>     Numer_Chars : constant Character_Range := ('0', '9');
>     Alpha_Num_Space : constant Character_Ranges
>       := (Space_Char, Lower_Chars, Upper_Chars, Numer_Chars);
>     Alpha_Num_Space_Set : constant Character_Set
>       := To_Set(Alpha_Num_Space);
> 
> 
>    function Strip_Non_Alphanumeric
>      (Str : in Unbounded_String) return Unbounded_String
>    is
>       Dest_Size : Natural := Count(Str, Alpha_Num_Space_Set);
>       New_Str : Unbounded_String := Null_Unbounded_String;

You don't need initialization here. Or you can do with Dest_Size. The
parameter of To_Unbounded_String is a Natural.

>       Dest_Char : Natural := 0;
>    begin
>       if Dest_Size > 0 then

You don't need this if. Ada's loops are safe for zero-run.

>          New_Str := To_Unbounded_String(Dest_Size);
>          for Src_Char in 1 .. Length(Str) loop
>             if Is_In(Element(Str, Src_Char), Alpha_Num_Space_Set) then
>                Dest_Char := Dest_Char + 1;
>                Replace_Element
>                  (New_Str, Dest_Char, Element(Str, Src_Char));
>             end if;
>          end loop;
>       end if;
>       return New_Str;
>    end Strip_Non_Alphanumeric;
> 
> 
>    function Strip_Non_Alphanumeric
>      (Str : in String) return String
>    is
>       New_Str : String(1 .. Count(Str, Alpha_Num_Space_Set));

You also can do instead:

   New_Str : String(1 .. Length (Str));

and save one extra scan of the string by Count. Memory is cheap and in
worst case scenario you will allocate that amount anyway.

>       Dest_Char : Natural := 0;
>    begin
>       if New_Str'Last > 0 then

No need in this if.

>          for Src_Char in Str'Range loop
>             if Is_In(Str(Src_Char), Alpha_Num_Space_Set) then
>                Dest_Char := Dest_Char + 1;
>                New_Str(Dest_Char) := Str(Src_Char);
>             end if;
>          end loop;

here you do:

   return New_Str (1..Dest_Char);

Ada strings has slices!

>       else
>          New_Str := "";
>       end if;
>       return New_Str;
>    end Strip_Non_Alphanumeric;
> 
>> Because, assignment might reclaim the memory allocated by
>> To_Unbounded_String (Count).
> 
> I assume this is left up to the compiler implementation?

Yes

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2005-09-28  8:15 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-27  6:27 String filtering David Trudgett
2005-09-27  7:38 ` Jacob Sparre Andersen
2005-09-27  9:13   ` David Trudgett
2005-09-27  9:49     ` Dmitry A. Kazakov
2005-09-27 11:01       ` Martin Dowie
2005-09-27 11:12         ` Martin Dowie
2005-09-27 12:54           ` Dmitry A. Kazakov
2005-09-27 13:42             ` Martin Dowie
2005-09-27 14:24               ` Dmitry A. Kazakov
2005-09-28  0:06                 ` David Trudgett
2005-09-28  8:15                   ` Dmitry A. Kazakov [this message]
2005-09-28 10:39                     ` David Trudgett
2005-09-28 20:55                       ` Simon Wright
2005-09-28 21:53                         ` Martin Dowie
2005-09-28  9:08                   ` Jacob Sparre Andersen
2005-09-28  9:54                     ` David Trudgett
2005-09-29 14:05                       ` Georg Bauhaus
2005-10-01 19:02                         ` tmoran
2005-10-02  6:38                           ` David Trudgett
2005-10-02 14:11                             ` Martin Dowie
2005-10-02 22:40                               ` David Trudgett
2005-10-03  5:56                                 ` Martin Dowie
2005-10-03 10:33                           ` Georg Bauhaus
2005-09-28 18:21                   ` Jeffrey R. Carter
2005-09-28 21:00                   ` Simon Wright
2005-09-27 11:22         ` David Trudgett
2005-09-27 11:15       ` David Trudgett
2005-09-27 13:21         ` Dmitry A. Kazakov
2005-09-27 13:43           ` Martin Dowie
2005-09-28  0:51           ` David Trudgett
2005-09-28 12:02             ` Dmitry A. Kazakov
2005-09-28 13:25             ` Marc A. Criley
2005-09-29 22:42           ` Randy Brukardt
2005-09-30 17:54             ` Robert A Duff
2005-10-02  6:57               ` Steve Whalen
2005-10-02 14:14                 ` Martin Dowie
2005-10-03  1:21                 ` Robert A Duff
2005-10-03  7:44                   ` Jacob Sparre Andersen
2005-10-03  8:56                     ` Dmitry A. Kazakov
2005-10-03  9:25                       ` Jean-Pierre Rosen
2005-10-03 20:17                         ` Ada Notation Jeffrey R. Carter
2005-10-03 20:41                           ` Georg Bauhaus
2005-10-05 17:16                             ` Andre
2005-10-05 18:23                               ` Ludovic Brenta
2005-10-05 18:24                               ` Jeffrey R. Carter
2005-10-04 15:13                           ` brian.b.mcguinness
2005-10-04 17:00                     ` String filtering Robert A Duff
2005-10-05  8:19                       ` Jean-Pierre Rosen
2005-10-05 11:25                         ` Robert A Duff
2005-10-04 19:47                     ` Björn Persson
2005-10-05 14:14                       ` Dmitry A. Kazakov
2005-10-03 10:06                   ` Steve Whalen
2005-10-03 17:43                   ` tmoran
2005-10-03 17:59                     ` Robert A Duff
2005-10-05 23:04                       ` Randy Brukardt
2005-09-27 13:52         ` Jacob Sparre Andersen
2005-09-28  1:01           ` David Trudgett
2005-09-28  1:50             ` David Trudgett
2005-09-27 14:08         ` Georg Bauhaus
2005-09-27 14:09         ` Marc A. Criley
2005-09-28  1:09           ` David Trudgett
2005-09-28 21:09           ` Simon Wright
2005-09-27 17:59         ` tmoran
2005-09-28  1:20           ` David Trudgett
2005-09-27 17:47     ` Jeffrey R. Carter
2005-09-28  1:29       ` David Trudgett
2005-09-28 18:32         ` Jeffrey R. Carter
2005-09-27  7:41 ` tmoran
2005-09-27  9:17   ` David Trudgett
2005-09-28  1:54 ` Steve
2005-09-28  2:20   ` David Trudgett
replies disabled

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