comp.lang.ada
 help / color / mirror / Atom feed
From: B_Gaffney@My-Deja.com (B.Gaffney)
Subject: Re: Looping over a tagged record?
Date: 22 Jun 2001 12:04:08 -0700
Date: 2001-06-22T19:04:09+00:00	[thread overview]
Message-ID: <9f6e2b77.0106221103.6ed4ea8e@posting.google.com> (raw)
In-Reply-To: Xns90C7A319CCC90charleshixsonearthli@207.217.77.21

An alternative to 'read and 'write (since in another post you relate
this to tagged types), is to use 'input and 'output.  This came up in
a thread about a month ago.

T'Output first writes the tag, then calls T'Write.  T'Input reads the
tag, determines the appropriate type, then calls the proper T'Read.

The problem I've found, at least with GNAT, is that 'Input/'Output use
the "external representation" of the tag, which for GNAT is the fully
qualified text name of the type (talk about long filenames -- unless
you're careful).  So, unless you have rather large objects or don't
care about storage efficiency, this method has significant overhead.


Charles Hixson <charleshixson@earthling.net> wrote in message news:<Xns90C7A319CCC90charleshixsonearthli@207.217.77.21>...
> tmoran@acm.org wrote in
> news:ltrY6.111132$%i7.79731461@news1.rdc1.sfba.home.com: 
> 
> >> basically need to do is examine the incoming data and
> >...
> >  Look at packages Ada.Streams and Ada.Stream_IO
> > Stream_IO lets you read an arbitrary number of bytes into a
> > Stream_Element_Array, and Streams lets you conveniently
> > convert those raw bytes into an object of type whatever.
> >   Suppose your data stream has a series of objects.  Each
> >   object 
> > is preceded by a single character identifying code.  Then
> > you could 
> >   Character'Read((Stream, ID_Code);
> >   case ID_Code is
> >     when 'A' => An_Object_Type'Read(Stream, An_Object);
> >     when 'B' => A_Different_Type'Read(Stream,
> >     A_Different_Object); ...
> > If An_Object_Type is a record, Ada will automatically read
> > it by a series of 'Read, of the correct type, on each
> > component - or you could override that and instead supply
> > your own 'Read. 
> > 
> That looks quite interesting.  I would definitely need to supply 
> my own read, and probably my own write too, since the objects 
> will likely need to be stored in non-contiguous areas of the 
> file. (If freed space can't be reused, the process would be 
> unacceptably inefficient.  And when dealing with small chunks of 
> data I would also need to be able to pack then into blocks.)
> 
> If I can make that work it will certainly be better than the 
> alternatives that had occurred to me. (Address mapped storage, 
> e.g., with arbitrary mappings needing to be defined.  Ugh!  Or 
> tagged types, with all of the basic types defined for every 
> possible offset into the block.  Ugh! again.)
> 
>  ...
> After looking at the package:  Perhaps I need to rethink things 
> to use arbitrary sized blocks rather than fixed size blocks.  
> Otherwise it looks like just what I was looking for!
> 
> 
> -- 
> Charles Hixson
> 
> Copy software legally, the GNU way!
> Use GNU software, and legally make and share copies of software.
> See http://www.gnu.org
>     http://www.redhat.com
>     http://www.linux-mandrake.com
>     http://www.calderasystems.com/
>     http://www.linuxapps.com/



  reply	other threads:[~2001-06-22 19:04 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-06-19 20:39 Looping over a tagged record? M R Goodwin
2001-06-19 21:31 ` Pascal Obry
2001-06-19 21:32 ` Pascal Obry
2001-06-19 22:20   ` Samuel T. Harris
2001-06-19 23:45     ` mgoodwinSPAMMY
2001-06-20  1:33 ` Pat Rogers
2001-06-20  3:13   ` Pat Rogers
2001-06-20  2:58 ` DuckE
2001-06-20 13:15 ` Ted Dennison
2001-06-20 15:01   ` M. A. Alves
2001-06-21  2:36     ` DuckE
2001-06-21 10:14       ` M. A. Alves
2001-06-21 13:24         ` Pat Rogers
2001-06-21 17:08     ` Charles Hixson
2001-06-21 18:58       ` tmoran
2001-06-21 23:02         ` Charles Hixson
2001-06-22 19:04           ` B.Gaffney [this message]
2001-06-22 20:36             ` Pascal Obry
2001-06-22  2:18       ` DuckE
2001-06-22 17:33         ` Charles Hixson
2001-06-22 18:24           ` tmoran
2001-09-13  0:29           ` Gnat Windows load error tmoran
2001-09-13 18:15             ` Jerry van Dijk
2001-09-13 23:17               ` tmoran
2001-09-13  3:58           ` Ada web crawler tmoran
2001-11-17 21:50           ` ada.strings.bounded slice errors tmoran
2001-11-18 17:16             ` Florian Weimer
2001-11-18 19:31               ` tmoran
2001-11-19  7:12                 ` Florian Weimer
2002-02-08 20:55           ` How to get a traceback in Gnat 3.14p tmoran
2002-02-08 21:24             ` Pascal Obry
2002-02-08 22:28               ` tmoran
2002-02-11  0:10           ` How to use gnatelim in Gnat 3.14p? tmoran
2002-02-15 17:23           ` does gnatelim work? tmoran
2002-02-15 18:18             ` Stephen Leake
2002-02-15 21:58               ` tmoran
2002-02-18  1:31                 ` Stephen Leake
2002-04-15  3:05           ` Announce: .rc files with Gnat tmoran
2002-04-15 14:48             ` Ted Dennison
2002-05-25  7:06           ` slice'access? tmoran
2002-05-25 16:47             ` slice'access? Robert Dewar
2002-05-25 18:28               ` slice'access? tmoran
2002-05-25 20:20                 ` slice'access? Jeffrey Carter
2002-05-25 23:39                   ` slice'access? tmoran
2002-05-26 14:22                     ` slice'access? Robert Dewar
2002-09-30  1:54           ` 'write of bounded string? tmoran
2002-09-30 16:06             ` Stephen Leake
2002-10-27 23:01           ` phone# etc bdean
2002-10-28  3:04             ` tmoran
2002-11-06  3:14           ` A little Ada app tmoran
2002-11-06 11:37             ` Larry Kilgallen
2002-11-06 15:08             ` Ted Dennison
2002-11-06 18:02               ` tmoran
2001-06-21  3:09 ` Looping over a tagged record? gresset1
replies disabled

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