comp.lang.ada
 help / color / mirror / Atom feed
From: hasan@emx.utexas.edu (David A. Hasan)
Subject: layered packages
Date: 15 Feb 91 16:18:21 GMT	[thread overview]
Message-ID: <44213@ut-emx.uucp> (raw)

I am having some trouble building generic components in layers.
My motivation is to contruct layers as *independent* generic packages 
by WITHing low layers into higher layers and then adding additional 
features and "reexporting" some of the old features.  I would certainly
appreciate any insight you expreienced Ada folks can give me.

My question is best asked in the context of an example.  Suppose 
I have the following package which exports a primitive
ADT and some fundamental operations on the ADT:

   GENERIC
      TYPE item IS PRIVATE;
      TYPE coord IS (<>);
   PACKAGE grid IS
      TYPE adt IS PRIVATE;
      FUNCTION fetch( from_adt   : IN adt;
                      at_y, at_x : IN coord ) RETURN item;
      PROCEDURE store( the_item   : IN item;
                       in_adt     : IN OUT adt;
                       at_y, at_x : IN coord );
   PRIVATE
      TYPE adt IS ...whatever...;
   END grid;

"grid.adt" could be used for a number of things, but suppose I want 
to build a numerical matrix layer on top.  Here's my attempt:

   WITH grid;
   GENERIC
      TYPE scalar IS PRIVATE;
      -- WITH "+", "-" etc...
      TYPE index  IS (<>);
   PACKAGE matrix IS
      TYPE adt IS PRIVATE;
      FUNCTION fetch( from_adt       : IN adt;
                      at_row, at_col : IN index  ) RETURN scalar;
      PROCEDURE store( in_adt         : IN OUT adt;
                       at_row, at_col : IN index  );
      FUNCTION invert( the_matrix : IN adt ) RETURN adt;
      -- etc...
   PRIVATE
      PACKAGE low_level IS NEW grid(scalar,index);
      TYPE adt IS NEW low_level.adt;
      -- the derived type comes complete with  of low_level
      --    subprograms "fetch" and "store"
   END matrix;

How can one implement "matrix.fetch" and "matrix.store" so that
they are the *same* as the derived subprograms fetch and store visible at the 
end of the PRIVATE part of the package (i.e., how do I reexport them)?
For that matter, how can they be implemented to *call* the derived subprograms?

Should I perhaps use a SUBTYPE instead of a derived type?

----------------------------------------------------------------
: david a hasan -- Univ. of Texas Ctr. for Space Research
:               -- hasan@emx.cc.utexas.edu

             reply	other threads:[~1991-02-15 16:18 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1991-02-15 16:18 David A. Hasan [this message]
1991-02-16 13:32 ` layered packages madmats
1991-02-18  0:16 ` Jim Showalter
replies disabled

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