home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.lang.modula3
- Path: sparky!uunet!walter!att-out!pacbell.com!ames!haven.umd.edu!decuac!pa.dec.com!src.dec.com!Roger Hoover <rhoover@watson.ibm.com>
- From: Roger Hoover <rhoover@watson.ibm.com>
- Subject: generics that use generics
- To: m3
- Message-ID: <9211121955.AA26627@trek.watson.ibm.com>
- Cc: rhoover@watson.ibm.com
- X-External-Networks: yes
- Date: Thu, 12 Nov 92 14:55:54 EST
- Lines: 53
-
-
- 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
-