comp.lang.ada
 help / color / mirror / Atom feed
From: Jeff Carter <jrcarter@acm.org>
Subject: Reflection (was: Re: The best thing/greatest feature summary)
Date: Thu, 02 Nov 2000 03:45:24 GMT
Date: 2000-11-02T03:45:24+00:00	[thread overview]
Message-ID: <3A00E2D0.42440CB0@acm.org> (raw)
In-Reply-To: 3A00375E.19433DC0@worldnet.att.net

Ken Garlington wrote:
>
> This, of course, is the critical difference between your solution and the
> Java solution. "Package_Name" may, or may not, be the name of the Ada
> package -- its correctness is only enforced by the programmer's diligence
> (particularly in the face of changes). The Java method does not depend upon
> keeping the same information copied in two places, as in
>
> package MyPackage is -- [1]
>
>   package R is new Reflect("MyPackage"); -- [2]
>
> Given that a goal of Ada is to reduce errors due to copying, the argument
> that the Ada approach is not as desirable as the Java approach seems like a
> valid criticism to me.

I've been toying with this:

with Ada.Strings.Fixed;
with Ada.Tags;
with Mixed_Case;

use Ada.Strings.Fixed;
use Ada.Tags;
generic -- Reflection
   -- null;
package Reflection is
   Unit_Name : constant String;
   -- The full name of the unit in which this package is instantiated
   -- (the null string if instantiated at the library level).
   -- Unit_Name is in strict mixed-case form [1st character and every
   -- character after
   -- a dot ('.') or underline ('_') is in upper case, and all other
   -- characters are in lower case].
private -- Reflection
   type T is abstract tagged null record;
   
   Name : constant String := Expanded_Name (T'Tag);
   Dot  : constant String := ".";
   
   Direction : constant Ada.Strings.Direction := Ada.Strings.Backward;
   
   Dot_Location : constant Natural :=
      Index (Name (Name'First .. Index (Name, Dot, Direction) - 1),
             Dot, Direction);
   -- 1st Index finds dot before type name
   -- 2nd Index finds dot before instantiation name
   
   Unit_Name : constant String :=
      Mixed_Case (Name (Name'First .. Dot_Location - 1) );
      -- Trim off type name and instantiation name
end Reflection;

Mixed_Case is a simple function and is left as an exercise for the
reader.

This package indicates that this kind of information is available in
Ada. We just need an easier way to access it.

-- 
Jeff Carter
"Perfidious English mouse-dropping hoarders."
Monty Python & the Holy Grail



  parent reply	other threads:[~2000-11-02  3:45 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <39DCB9E3.EAE8F426@ftw.rsc.raytheon.com>
2000-10-27 22:08 ` The best thing/greatest feature summary Wes Groleau
2000-10-28  1:01   ` Lothar Scholz
2000-11-24  2:15     ` Peter Horan
2000-11-24  0:00       ` Lothar Scholz
2000-11-24  0:00         ` Friedrich Dominicus
2000-10-28  1:03   ` Lothar Scholz
2000-10-31 14:44     ` Tom Hargraves
2000-10-31 18:07       ` tmoran
2000-10-31 19:58         ` Larry Kilgallen
2000-11-01  1:56         ` Tom Hargraves
2000-10-31 19:28       ` James Rogers
2000-11-01  2:13         ` Tom Hargraves
2000-11-01  3:27           ` James Rogers
2000-11-01 12:48             ` Ken Garlington
2000-11-01 14:03               ` Pat Rogers
2000-11-01 15:30               ` James Rogers
2000-11-01 22:12                 ` Tom Hargraves
2000-11-01 22:44                   ` Ted Dennison
2000-11-01 22:54                   ` Pat Rogers
2000-11-01 23:47                     ` James Rogers
2000-11-02  5:25                       ` Pat Rogers
2000-11-02  5:28                       ` Pat Rogers
2000-11-02 22:00                       ` Wes Groleau
2000-11-02  3:45                 ` Jeff Carter [this message]
2000-11-02  6:57                   ` Reflection (was: Re: The best thing/greatest feature summary) Ray Blaak
2000-11-02  8:42                     ` tmoran
2000-11-02 11:19                       ` David C. Hoos, Sr.
2000-11-02 18:09                         ` tmoran
2000-11-02 12:51                       ` David C. Hoos, Sr.
2000-11-03  2:26                         ` Jeff Carter
2000-11-02 14:33                     ` Tucker Taft
2000-11-02 16:02                     ` Ted Dennison
2000-11-04  0:00                       ` Florian Weimer
2000-11-03  2:23                     ` Jeff Carter
2000-11-03  5:05                   ` Randy Brukardt
2000-11-03  5:28                     ` Ken Garlington
2000-11-04  4:13                     ` Jeff Carter
2000-11-10  0:00       ` The best thing/greatest feature summary jacob navia
2000-10-31 21:01   ` Wes Groleau
2000-10-30 20:19 ` Roger Browne
2000-10-31 16:24   ` Greg
2000-10-31 16:55   ` Roger Browne
replies disabled

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