[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sc-dev] SF.net SVN: supercollider:[8241] trunk/build



Revision: 8241
          http://supercollider.svn.sourceforge.net/supercollider/?rev=8241&view=rev
Author:   jrhb
Date:     2008-12-22 14:33:43 +0000 (Mon, 22 Dec 2008)

Log Message:
-----------
minor improvement of Pair.

Modified Paths:
--------------
    trunk/build/Help/Collections/Pair.html
    trunk/build/SCClassLibrary/Common/Collections/Pair.sc

Modified: trunk/build/Help/Collections/Pair.html
===================================================================
--- trunk/build/Help/Collections/Pair.html	2008-12-22 09:40:51 UTC (rev 8240)
+++ trunk/build/Help/Collections/Pair.html	2008-12-22 14:33:43 UTC (rev 8241)
@@ -9,16 +9,17 @@
 <style type="text/css">
 p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
 p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
-p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #0021e7}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Helvetica}
-p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000; min-height: 12.0px}
-p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
-p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000; min-height: 12.0px}
-p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000}
+p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Helvetica}
+p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #ad140d; min-height: 12.0px}
+p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #bf0000}
+p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000; min-height: 12.0px}
+p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000}
+p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
 span.s1 {font: 18.0px Helvetica}
-span.s2 {color: #000000}
-span.s3 {text-decoration: underline}
+span.s2 {text-decoration: underline ; color: #0021e7}
+span.s3 {text-decoration: underline ; color: #002fe0}
 span.s4 {color: #0000bf}
+span.s5 {color: #bf0000}
 span.Apple-tab-span {white-space:pre}
 </style>
 </head>
@@ -26,12 +27,20 @@
 <p class="p1"><span class="s1"><b>Pair</b></span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><b>LISP-like two element cells</b></p>
 <p class="p2"><br></p>
 <p class="p1"><b>superclass: Collection</b></p>
-<p class="p2"><b></b><br></p>
-<p class="p3"><span class="s2"><b>(implementation incomplete! Use </b><a href="../Language/J_concepts_in_SC.html"><span class="s3">J Concepts In SC</span></a></span><span class="s3"> </span>for similar functionality<span class="s2">)</span></p>
 <p class="p2"><br></p>
+<p class="p1">(implementation incomplete. See<b> </b><a href="../Language/J_concepts_in_SC.html"><span class="s2">J Concepts In SC</span></a><span class="s3"> </span>for similar functionality)</p>
 <p class="p2"><br></p>
-<p class="p4"><b>Instance Methods</b></p>
+<p class="p3"><b>Class Methods</b></p>
 <p class="p2"><br></p>
+<p class="p2"><br></p>
+<p class="p1"><b>*new(linkDown, linkAcross) <span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span></b>return new instance</p>
+<p class="p2"><br></p>
+<p class="p1"><b>*newFrom(collection)</b><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>convert collection (e.g. arrays of arrays) to pairs.</p>
+<p class="p2"><br></p>
+<p class="p2"><br></p>
+<p class="p2"><br></p>
+<p class="p3"><b>Instance Methods</b></p>
+<p class="p2"><br></p>
 <p class="p1">Most methods are inherited from the superclasses.</p>
 <p class="p2"><br></p>
 <p class="p1"><b>size</b></p>
@@ -46,14 +55,22 @@
 <p class="p2"><br></p>
 <p class="p1"><b>depthFirstPostOrderTraversal(function)</b></p>
 <p class="p2"><br></p>
-<p class="p5"><br></p>
-<p class="p6">// example</p>
-<p class="p7"><br></p>
-<p class="p8">a = <span class="s4">Pair</span>(<span class="s4">Pair</span>(<span class="s4">Pair</span>(1, 2), 4), <span class="s4">Pair</span>(5, 6));</p>
-<p class="p7"><br></p>
-<p class="p8">a.size;</p>
-<p class="p8">a.depth;</p>
-<p class="p8">a.do { <span class="s4">|x|</span> x.postln };</p>
-<p class="p8">a.traverse { <span class="s4">|x|</span> x.postln };</p>
+<p class="p4"><br></p>
+<p class="p5">// example</p>
+<p class="p6"><br></p>
+<p class="p7">a = <span class="s4">Pair</span>(<span class="s4">Pair</span>(<span class="s4">Pair</span>(1, 2), 4), <span class="s4">Pair</span>(5, 6));</p>
+<p class="p6"><br></p>
+<p class="p7">a.size;</p>
+<p class="p7">a.depth;</p>
+<p class="p7">a.do { <span class="s4">|x|</span> x.postln };</p>
+<p class="p7">a.traverse { <span class="s4">|x|</span> x.postln };</p>
+<p class="p6"><br></p>
+<p class="p7"><span class="s4">Pair</span>.newFrom([1, [2, [[4, 5], 6]]]);</p>
+<p class="p6"><br></p>
+<p class="p7">[1, [2, [[4, 5], 6]]].as(<span class="s4">Pair</span>); <span class="s5">// equivalent.</span></p>
+<p class="p6"><br></p>
+<p class="p6"><br></p>
+<p class="p8"><br></p>
+<p class="p8"><br></p>
 </body>
 </html>

Modified: trunk/build/SCClassLibrary/Common/Collections/Pair.sc
===================================================================
--- trunk/build/SCClassLibrary/Common/Collections/Pair.sc	2008-12-22 09:40:51 UTC (rev 8240)
+++ trunk/build/SCClassLibrary/Common/Collections/Pair.sc	2008-12-22 14:33:43 UTC (rev 8241)
@@ -8,7 +8,16 @@
 		^super.newCopyArgs(linkDown, linkAcross)
 	}
 	
+	// create from nested array
+	*newFrom { arg collection;
+		var linkDown = collection.at(0);
+		var linkAcross = collection.at(1);
+		if(linkDown.isKindOf(Collection)) { linkDown = this.newFrom(linkDown) };
+		if(linkAcross.isKindOf(Collection)) { linkAcross = this.newFrom(linkAcross) };
+		^this.new(linkDown, linkAcross)
+	}
 	
+	
 	size { var i = 0, link;
 		link = linkAcross;
 		while ({ link.respondsTo('linkAcross') },{
@@ -50,10 +59,13 @@
 		link = linkAcross;
 		while ({ link.notNil },{
 			function.value(link);
-			if ( link.linkDown.respondsTo('depthFirstPreOrderTraversal'), {
-				link.linkDown.depthFirstPreOrderTraversal(function);
+			if (link.respondsTo(\linkDown) and:
+				{ link.linkDown.respondsTo('depthFirstPreOrderTraversal') }, {
+					link.linkDown.depthFirstPreOrderTraversal(function);
 			});
-			link = link.linkAcross;
+			if(link.respondsTo('linkAcross')) {
+				link = link.linkAcross;
+			} { link = nil };
 		});
 	}
 	depthFirstPostOrderTraversal { arg function;
@@ -65,13 +77,26 @@
 		// iterate linkAcross to conserve stack depth
 		link = linkAcross;
 		while ({ link.notNil },{
-			if ( link.linkDown.respondsTo('depthFirstPostOrderTraversal'), {
+			if (link.respondsTo(\linkDown) and:
+				{ link.linkDown.respondsTo('depthFirstPostOrderTraversal') }, {
 				link.linkDown.depthFirstPostOrderTraversal(function);
 			});
 			function.value(link);
-			link = link.linkAcross;
+			if(link.respondsTo('linkAcross')) {
+				link = link.linkAcross;
+			} { link = nil };
 		});
 	}
 	
+	storeArgs { arg stream;
+		^[linkDown, linkAcross]
+	}
+	
+	printOn { arg stream;
+		stream << this.class.name << "(" <<* this.storeArgs << ")"
+	}
+	storeOn { arg stream;
+		stream << this.class.name << "(" <<<* this.storeArgs << ")"
+	}
 }
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

_______________________________________________
sc-dev mailing list

info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: https://listarc.bham.ac.uk/marchives/sc-dev/
search: https://listarc.bham.ac.uk/lists/sc-dev/search/