home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.lang.modula3
- Path: sparky!uunet!newsgate.watson.ibm.com!yktnews2.watson.ibm.com!yktnews!admin!rhoover
- From: rhoover@watson.ibm.com (Roger Hoover)
- Subject: generics that use generics
- Sender: news@watson.ibm.com (NNTP News Poster)
- Message-ID: <1993Jan25.142856.18843@watson.ibm.com>
- Date: Mon, 25 Jan 1993 14:28:56 GMT
- Disclaimer: This posting represents the poster's views, not necessarily those of IBM
- Nntp-Posting-Host: trek.watson.ibm.com
- Organization: IBM T.J. Watson Research Center
- Lines: 56
-
-
- I'd like to write a generic that extends another generic. For
- example, consider the generic List:
-
- --
- GENERIC INTERFACE List(El);
-
- TYPE T <: REFANY;
-
- PROCEDURE RemoveFirst(VAR l: T): El.T;
- PROCEDURE InsertFirst(VAR l: T, x: El.T);
-
- END List.
-
- --
- GENERIC MODULE List(El);
-
- REVEAL
- T = BRANDED OBJECT
- el: El.T;
- next: T := NIL;
- END;
-
- PROCEDURE RemoveFirst(VAR l: T): El.T =
- VAR r: El.T;
- BEGIN
- <*ASSERT l # NIL*>
- r := l.el
- l := l.next;
- RETURN r
- END RemoveFirst;
-
- PROCEDURE InsertFirst(VAR l: T, x: El.T) =
- BEGIN
- l := NEW(T, el := x, next := l)
- END InsertFirst;
-
- END List.
-
- --
- I'd like to create a generic Stack that uses List:
- GENERIC INTERFACE Stack(El);
-
- TYPE T <: REFANY;
-
- PROCEDURE Pop(VAR l: T): El.T;
- PROCEDURE Push(VAR l: T, x: El.T);
-
- END Stack.
-
- Is there any way to write GENERIC MODULE Stack(El) using the
- List.RemoveFirst procedure for Pop and ListInsertFirst for
- Push?
-
- roger
- rhoover@watson.ibm.com
-