[net.lang] Pointer Rotation Reference?

robison@uiucdcsb.CS.UIUC.EDU (06/08/86)

I once saw an article on the virtues of the ``pointer rotation'' operation.
I can't remember where I saw it, and would appreciate if someone would
mail me a reference to it.  The general idea is described below.  

				robison@uiucdcs

				Arch D. Robison	
				University of Illinois at Urbana-Champaign

----------------------------------------------------------------------

Given a set of pointers, say P,Q, and R, the operation would rotate their
values, i.e.:

	procedure Rot (var P,Q,R: pointer);
	   var T:pointer;          
           begin
	      T:=P; P:=Q; Q:=R; R:=T;
	   end;

The operation is a structured assignment statement.  By using the rotations
instead of assignment, one could guarantee certain properties of a program.
E.g. that reference counts did not change.  The rotation operation also
makes many common algorithms more succinct, for example we can reverse a list
pointed to by R with:

	Q := nil;
        while R<>nil do Rot (R,R^.Next,Q);
	Swap (R,Q);				

(Swap is a two-way rotate.)  Since Q is initially nil, and nil after
the code finishs, we are guaranteed that we neither lost nor gained references.
I used rotates throughout a project of mine, and they greatly reduced
problems with maintaining reference counts.  Some 5-way rotations were
even useful.