comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Renaming of procedures in a generic instantiation
Date: Sun, 26 Sep 2010 12:11:14 +0300
Date: 2010-09-26T12:11:14+03:00	[thread overview]
Message-ID: <8g8h1iF1fbU1@mid.individual.net> (raw)
In-Reply-To: <828w2orizl.fsf@stephe-leake.org>

Stephen Leake wrote:
> Gene <gene.ressler@gmail.com> writes:
> 
>> I'm confused about an aspect of renaming. It boils out to this little
>> example:
>>
>> with Ada.Containers.Ordered_Sets;
>>
>> package Foo is
>>
>>   type Queue is private;
>>
>>   procedure Add(Q : in out Queue; Item : in Integer);
>>
>>   function Is_Empty(Q : Queue) return Boolean;
>>
>> private
>>
>>   package Queues is
>>     new Ada.Containers.Ordered_Sets(Integer, "<", "=");
>>   type Queue is new Queues.Set with null record;
> 
> All primitive operations of Queues.Set are implicitly declared here,
> with Queue replacing Queues.Set; that includes Set and Is_Empty. That's
> what derived types are for.
> 
>> end Foo;
>>
>> package body Foo is
>>
>>    procedure Add(Q : in out Queue; Item : in Integer)
>>       renames Insert;
> 
> This 'Insert' resolves to Foo.Insert (Container : in out Foo.Queue; ...);
> 
>>    function Is_Empty(Q : Queue) return Boolean
>>       renames Queues.Is_Empty;
> 
> Queues.Is_Empty expects a Constainer of type Foo.Queues.Set, not Foo.Queue.
> 
> If you replace 
> 
>    type Queue is new Queues.Set with null record;
> 
> with 
> 
>    subtype Queue is Queues.Set;
> 
> Then the Add renames will fail (because the primitive operations are not
> derived), and the Is_Empty will succeed.

But the subtype declaration of Queue cannot complete the initial 
declaration of Queue as private, so the subtype declaration must be the 
first and only (and public) declaration of type Queue.

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .



  reply	other threads:[~2010-09-26  9:11 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-26  0:43 Renaming of procedures in a generic instantiation Gene
2010-09-26  6:54 ` Niklas Holsti
2010-09-26  7:40   ` Jeffrey Carter
2010-09-26  8:41     ` Niklas Holsti
2010-09-26 17:07       ` Jeffrey Carter
2010-09-26 14:52   ` Gene
2010-09-26 15:04     ` Dmitry A. Kazakov
2010-09-26  8:45 ` Stephen Leake
2010-09-26  9:11   ` Niklas Holsti [this message]
2010-09-27  1:18   ` Gene
2010-09-28 11:36     ` Stephen Leake
2010-09-29  1:25       ` Gene
2010-09-27 19:23 ` Adam Beneschan
replies disabled

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