comp.lang.ada
 help / color / mirror / Atom feed
From: stt@houdini.camb.inmet.com (Tucker Taft)
Subject: Re: How can I qualify the predefined logical operations
Date: 1998/07/16
Date: 1998-07-16T00:00:00+00:00	[thread overview]
Message-ID: <Ew6yrK.wu.0.-s@inmet.camb.inmet.com> (raw)
In-Reply-To: 6okcnl$n93$1@nnrp1.dejanews.com

hoyngj@my-dejanews.com wrote:

: I have the following problem, when trying to implement a function "and".

:  package Some_Package is
:    type Private_Type is private;
:    function "And" (Left, Right: Private_Type) return Private_Type ;
:  private
:    type Private_Type is array (0 .. 1023) of Boolean;
:  end Some_Package;


: -- I want to implement Some_Package."And" using the predefined logical
: -- operation "And" for any one-dimensional array type whose components
: -- are of a boolean type.
:  package body Some_Package is
:    function "And" (Left, Right: Private_Type) return Private_Type   is
:    begin
:      return Left and Right;  -- ERROR: AND is here Some_Package."AND",
:                              -- endless recursive
:    end "and";
:  end Some_Package;

: To fix the error in the implementation above, I need to qualify the
: predefined "And" operation:

The predefine "and" is declared at the point of the array type definition,
i.e. immediately inside "Some_Package."  However, you have a user-defined
"and" with the same profile, so the predefined "and" is hidden by
the user-defined one.

:  package body Some_Package is
:    function "And" (Left, Right: Private_Type) return Private_Type is
:    begin
:      return Standard."And" (Left, Right);  -- ERROR: not possible

This should not work (though it may work in some versions of GNAT),
because the predefined "and" is *not* declared in package Standard.

:    end "and";
:  end Some_Package;

: How is it possible to qualify the predefined logical operations to
: distinguish between Some_Package."and" and the predefined "and"?

You can't if they are both defined in the same scope.  Here is
a fix for your problem, involving converting to another array type
whose "and" has a different profile from the user-defined one:

    function "and" (Left, Right : Private_Type) return Private_Type is
       type Local_Array is array(0..1023) of Boolean;
       -- "and" for Local_Array implicitly declared here
    begin
       return Private_Type(Local_Array(Left) and Local_Array(Right));
    end "and";

: Thanks in advance

: --
: Juergen Hoyng,  RIO 62             |   email : Juergen.Hoyng@ri.dasa.de
: DASA/RI                            |   fax   : +49 421 539 4529
: Postfach 286156                    |   voice : +49 421 539 5348
: D-28361 Bremen                     |   Germany

--
-Tucker Taft   stt@inmet.com   http://www.inmet.com/~stt/
Intermetrics, Inc.  Burlington, MA  USA




  parent reply	other threads:[~1998-07-16  0:00 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1998-07-16  0:00 How can I qualify the predefined logical operations hoyngj
1998-07-16  0:00 ` hoyngj
1998-07-17  0:00   ` Robert Dewar
1998-07-16  0:00 ` Anonymous
1998-07-16  0:00 ` dennison
1998-07-16  0:00 ` Tucker Taft [this message]
1998-07-16  0:00 ` dennison
1998-07-17  0:00 ` Andreas Kalla
1998-07-19  0:00   ` Mats Weber
1998-07-25  0:00 ` Matthew Heaney
replies disabled

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