I wrote this:
proc push_front (dl:&dlist_t, v:T) {
var oldfirst = dl*.first;
var node = new (data=v, next=oldfirst, prev=nullptr[dnode_t]);
dl.first <- Ptr node;
match oldfirst with
| nullptr => dl.last <- Ptr node;
| Ptr p => p.prev <- Ptr node;
endmatch;
}
This is for a doubly linked list. Now I will show you the beauty of the pointer
projection semantics:
match oldfirst with | nullptr => dl.last | Ptr p => p.prev endmatch <- Ptr
node;
In fact we can do better if we like convoluted expressions:
proc asgn2[T] (p: &T, q:&T) (var v:T) { p <- v; q <-v; }
to save writing "Ptr node" more than once :)
--
john skaller
[email protected]
http://felix-lang.org
------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Felix-language mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/felix-language