From: adambeneschan@gmail.com
Subject: Re: Binary and XML serialization of types
Date: Thu, 23 Jan 2014 11:15:56 -0800 (PST)
Date: 2014-01-23T11:15:56-08:00 [thread overview]
Message-ID: <9e27abb7-e944-4bd4-a10c-600fe4da7872@googlegroups.com> (raw)
In-Reply-To: <20a36d96-850e-4020-8dfa-777eb9c944f4@googlegroups.com>
On Thursday, January 23, 2014 10:53:23 AM UTC-8, han...@gmail.com wrote:
> Hello,
>
> I am an Ada beginner who is working on a private project.
>
> The project is to implement a protocol which either does binary or xml serialization of the different defined records.
>
> I have tried to separate all the "encoding" details from the type declaration in a sub package like this:
>
>
>
> package A.Types is
>
> type Guid_Array is array(1 .. 8) of Unsigned_8;
> type Guid is record
> Data1 : Unsigned_32;
> Data2 : Unsigned_16;
> Data3 : Unsigned_16;
> Data4 : Guid_Array;
> end record;
>
> end A.Types;
I think you simply want to do something like this. Put the declaration of Guid_Write and the "for" clause in A.Types. Then, in the body of A.Types:
with A.Types.BinaryEncoder;
package body A.Types is
-- other stuff as needed
procedure Guid_Write(
Stream : access Ada.Streams.Root_Stream_Type'Class; Item : Guid )
renames A.Types.BinaryEncoder.Guid_Write;
-- this is called a "renaming-as-body"
or this, which amounts to the same thing:
with A.Types.BinaryEncoder;
package body A.Types is
-- other stuff as needed
procedure Guid_Write(
Stream : access Ada.Streams.Root_Stream_Type'Class; Item : Guid ) is
begin
A.Types.BinaryEncoder.Guid_Write (Stream, Item);
end Guid_Write;
(Note: I think the "renames" will work, but I haven't tested it. The second one will definitely work.)
Now you declare and implement Guid_Write in A.Types.BinaryEncoder as you were trying to do. (You don't actually need to give it the same name. You can call your "implementation" procedure Guid_Write_Impl, or Any_Other_Name_You_Feel_Like.)
What's going on is that if some client package says "with A.Types" and uses the Guid_Write type, and uses Guid_Write'Write(...) or Guid_Write'Output(...), the client has to know that there's a Write routine that isn't the default. That's why the "for Guid_Write'Write use ..." has to be in the visible part of A.Types, so that other clients are allowed to know about it.
-- Adam
next prev parent reply other threads:[~2014-01-23 19:15 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-23 18:53 Binary and XML serialization of types hanslad
2014-01-23 19:15 ` adambeneschan [this message]
2014-01-23 19:17 ` adambeneschan
2014-01-23 19:58 ` hanslad
2014-01-23 20:03 ` adambeneschan
2014-01-23 21:00 ` Dmitry A. Kazakov
2014-01-24 8:54 ` hanslad
2014-01-24 10:01 ` Dmitry A. Kazakov
2014-01-24 14:44 ` hanslad
2014-01-24 15:22 ` Dmitry A. Kazakov
2014-01-31 9:51 ` hanslad
2014-01-31 10:49 ` Dmitry A. Kazakov
2014-02-04 10:33 ` AdaMagica
2014-02-04 11:14 ` Dmitry A. Kazakov
2014-02-04 11:20 ` AdaMagica
2014-02-04 13:04 ` Dmitry A. Kazakov
2014-02-04 17:16 ` AdaMagica
2014-02-04 17:57 ` Dmitry A. Kazakov
2014-02-04 22:34 ` Simon Wright
2014-02-05 9:02 ` AdaMagica
2014-02-05 9:39 ` Simon Wright
2014-02-05 10:35 ` Dmitry A. Kazakov
2014-02-05 13:03 ` AdaMagica
2014-02-05 13:44 ` G.B.
2014-02-05 15:34 ` Niklas Holsti
2014-02-06 1:32 ` adambeneschan
2014-01-24 17:36 ` Simon Wright
2014-01-24 8:44 ` Georg Bauhaus
2014-01-24 17:13 ` Simon Wright
2014-01-23 22:44 ` Simon Wright
2014-01-23 23:43 ` adambeneschan
2014-01-24 0:58 ` Randy Brukardt
2014-01-24 8:29 ` Oliver Kleinke
2014-01-24 16:22 ` adambeneschan
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox