comp.lang.ada
 help / color / mirror / Atom feed
From: tmoran@acm.org
Subject: Re: Ada and Internet stuff
Date: Wed, 29 Aug 2001 18:51:01 GMT
Date: 2001-08-29T18:51:01+00:00	[thread overview]
Message-ID: <pQaj7.28143$sa.14123276@news1.rdc1.sfba.home.com> (raw)
In-Reply-To: 3B8D181E.8C9523D@san.rr.com

> Do people generally treat Ada.Streams.Stream_Element_Array as the
> equivalent of an array of octets without further checking?
  They shouldn't.  Base64 encoding conceptually takes 24 bit chunks
of input and encodes it in 4 output text characters.  But the code
to automagically adjust to Stream_Elements that aren't 8 bits wide
would, I suspect, be substantally less clear, and rarely used, so
my base64 routine doesn't do it.  I thought about putting in
a test that Stream_Element'size=8, but decided, again for simplicity
and clarity vs frequency of use, to settle for a comment instead.
Full generality might be an interesting exercise.

> Also, what's the mechanism for dealing with things like UTF-8?
  Base64 is specifically designed to work across various character
encodings.  Thus an 'A' means 6 bits of zeroes, regardless of how
that 'A' is represented.  You *should* be able to replace String
with Wide_String and Character with Wide_Character appropriately
and have it work.  Of course your 24 bits of input would then be
64, rather than 32 bits, encoded, for an expansion factor of 2.66,
which would rather argue against it.

>   -- Target'length must be at least:
>   -- Output_Quad_Count: constant := (Source'length + 2) / 3;
>   -- Output_Byte_Count: constant := 4 * Output_Quad_Count;
>   -- Target'length = Output_Byte_Count + 2 * (Output_Byte_Count / 76)
>
> This should be a function. :-) Probably, it would be best to have a
> function that takes an input length and returns the output length in
> both directions, so you can allocate your buffers properly before
> calling the functions.
  Extra whitespace and missing line breaks are both allowed in encoded
data, so you can't tell without looking at it, ie running the decoding,
just what it will decode into.  No such problem on encoding.

You could make
    function Encode(X : Stream_Element_Array) return String;
    function Decode(S : String) return Stream_Element_Array;
and let them generate and return the correct size results.  That's
not terribly hard but is surely less speedy, which may matter.

> I'd be happy to tackle this. :-)
  Looking forward to it!



  parent reply	other threads:[~2001-08-29 18:51 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-08-24 19:22 Ada and Internet stuff Darren New
2001-08-24 19:39 ` Ted Dennison
2001-08-24 20:30   ` Pascal Obry
2001-08-24 22:03     ` Ehud Lamm
2001-08-26 15:52       ` David Botton
2001-08-26 20:32         ` Pascal Obry
2001-08-27  1:40           ` David Botton
2001-08-27  6:31             ` Ehud Lamm
2001-08-24 20:32 ` Pascal Obry
2001-08-24 23:36   ` Darren New
2001-08-24 20:39 ` Larry Kilgallen
2001-08-24 22:08 ` Marc A. Criley
2001-08-25  7:07   ` Pascal Obry
2001-08-27  1:49 ` tmoran
2001-08-27 11:04   ` Tarjei T. Jensen
2001-08-27 11:28     ` Ehud Lamm
2001-08-27 20:09       ` Pascal Obry
2001-08-27 23:10   ` David Botton
2001-08-29  5:52     ` tmoran
2001-08-29 16:28       ` Darren New
2001-08-29 17:12         ` David Botton
2001-08-29 17:32         ` Ted Dennison
2001-08-29 18:51         ` tmoran [this message]
2001-08-29 19:00           ` Darren New
2001-08-29 19:53             ` tmoran
2001-08-29 20:03               ` Darren New
2001-08-29 20:08           ` Ted Dennison
2001-08-30  7:08             ` tmoran
2001-08-31  2:39               ` tmoran
2001-08-31 13:34                 ` Ted Dennison
2001-08-31 13:46                   ` Marin David Condic
2001-08-31 17:37                     ` tmoran
2001-08-31 17:59                       ` Marin David Condic
2001-09-01 17:56                         ` tmoran
2001-08-31 13:34                 ` Marin David Condic
2001-08-31 17:52                   ` Ted Dennison
2001-08-31 18:09                     ` Marin David Condic
2001-08-31  2:53               ` compile time Least Common Multiple, was " tmoran
2001-08-31 13:43                 ` Ted Dennison
2001-08-31 17:37                   ` tmoran
2001-08-31 18:08                     ` Ted Dennison
replies disabled

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