<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="http://www.codeplex.com/rss.xsl"?><rss version="2.0"><channel><title>nstl Wiki &amp; Documentation Rss Feed</title><link>http://www.codeplex.com/Wiki/View.aspx?ProjectName=nstl&amp;title=Home</link><description>nstl Wiki Rss Description</description><item><title>Updated Wiki: Documentation</title><link>http://nstl.codeplex.com/documentation?version=1</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Documentation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The current documentation does not reflect the 3.0 features yet. &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://nstl.codeplex.com/wikipage?title=FAQs&amp;referringTitle=Documentation"&gt;FAQs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nstl.codeplex.com/wikipage?title=Intro%20to%20NSTL&amp;referringTitle=Documentation"&gt;An Introduction to the concepts of the &amp;#40;N&amp;#41;STL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nstl.codeplex.com/wikipage?title=Code%20Examples&amp;referringTitle=Documentation"&gt;Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nstl.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=7794"&gt;A compiled help file can be downloaded from the release page&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>AndyM</author><pubDate>Tue, 20 Oct 2009 18:04:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20091020060401P</guid></item><item><title>Updated Wiki: Documentation Overview</title><link>http://nstl.codeplex.com/Wiki/View.aspx?title=Documentation Overview&amp;version=11</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Documentation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The current documentation does not reflect the 3.0 features yet. &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://nstl.codeplex.com/Wiki/View.aspx?title=FAQs&amp;referringTitle=Home"&gt;FAQs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nstl.codeplex.com/Wiki/View.aspx?title=Intro%20to%20NSTL&amp;referringTitle=Home"&gt;An Introduction to the concepts of the &amp;#40;N&amp;#41;STL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nstl.codeplex.com/Wiki/View.aspx?title=Code%20Examples&amp;referringTitle=Home"&gt;Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nstl.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=7794"&gt;A compiled help file can be downloaded from the release page&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>AndyM</author><pubDate>Fri, 02 Oct 2009 17:17:47 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation Overview 20091002051747P</guid></item><item><title>Updated Wiki: Home</title><link>http://nstl.codeplex.com/Wiki/View.aspx?title=Home&amp;version=16</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;The NSTL Project&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The NSTL project is originally a port and adaptation of the C++ STL to the .NET world. The main focus is to preserve the concepts and the power of the STL, especially in the area of algorithms and extensibility. It features the complete set of the STL's algorithms, a set of containers that are missing in the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace and the full range of adapters, binders and functors. It is fully compatible with the .NET collections and concepts and integrates well with them.&lt;br /&gt;&lt;br /&gt;Further documentation can be found &lt;a href="http://nstl.codeplex.com/Wiki/View.aspx?title=Documentation%20Overview"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Current Status&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The current &lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx" class="externalLink"&gt;release&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;version is 3.0, implemented in .NET 3.5. A .NET 2.0 version is still available, too. &lt;a href="http://nstl.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=6148"&gt;Latest Builds&lt;/a&gt; are posted on a regular basis. As they are have undergone a full automated release build, they can be considered as stable as a regular release.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Road map&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The current release integrates the NSTL tightly with the .NET collections and LINQ. The next step will try to evolve this integration and simplify the use of the NSTL by providing the algorithms of the NSTL as extension methods to omplement the LINQ query operators.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>AndyM</author><pubDate>Fri, 02 Oct 2009 17:15:43 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20091002051543P</guid></item><item><title>Updated Wiki: Home</title><link>http://nstl.codeplex.com/Wiki/View.aspx?title=Home&amp;version=15</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;The NSTL Project&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The NSTL project is a port and adaptation of the C++ STL to the .NET world. The main focus is to preserve the concepts and the power of the STL, especially in the area of algorithms and extensibility. It features the complete set of the STL's algorithms, a set of containers that are missing in the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace and the full range of adapters, binders and functors. It is fully compatible with the .NET collections and concepts.&lt;br /&gt;&lt;br /&gt;Further documentation can be found &lt;a href="http://nstl.codeplex.com/Wiki/View.aspx?title=Documentation%20Overview"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Current Status&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The current &lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx" class="externalLink"&gt;release&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;version is 2.7, implemented in .NET 2.0. &lt;a href="http://nstl.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=6148"&gt;Latest Builds&lt;/a&gt; are posted on a regular basis. As they are have undergone a full automated release build, they can be considered as stable as a regular release.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Road map&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In the next minor releases some missing algorithms from different STL implementations will be added and overloads will be provided to make the use of adapters for the .NET &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; classes unnecessary.&lt;br /&gt;&lt;br /&gt;With &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx" class="externalLink"&gt;LINQ&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, .NET 3.5 offers a comprehensive and powerfull algorithm and data structure library. The next major release 3.0 will integrate tightly with it. Additional to the full orthogonal decoupled power of the NSTL's  algorithms, those that can not be replaced by &lt;a href="http://msdn.microsoft.com/en-us/library/bb394939.aspx" class="externalLink"&gt;LINQ standard query operators&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, will be offered as such query operators. .NETcollections will be enriched with extension methods to let them closely interact with the NSTL's feature, without using the bulky adapters that are necessary right now. The plan is a seamless transition between LINQ and the NSTL in both directions.&lt;br /&gt;&lt;br /&gt;A stable pre release can be found in the &lt;a href="http://nstl.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=6148"&gt;Latest Builds&lt;/a&gt; section.&lt;/div&gt;</description><author>AndyM</author><pubDate>Mon, 01 Jun 2009 11:26:07 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20090601112607A</guid></item><item><title>Updated Wiki: Home</title><link>http://nstl.codeplex.com/Wiki/View.aspx?title=Home&amp;version=14</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;The NSTL Project&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The NSTL project is a port and adaptation of the {C++} STL to the .NET world. The main focus is to preserve the concepts and the power of the STL, especially in the area of algorithms and extensibility. It features the complete set of the STL's algorithms, a set of containers that are missing in the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace and the full range of adapters, binders and functors. It is fully compatible with the .NET collections and concepts.&lt;br /&gt;&lt;br /&gt;Further documentation can be found &lt;a href="http://nstl.codeplex.com/Wiki/View.aspx?title=Documentation%20Overview"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Current Status&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The current &lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx" class="externalLink"&gt;release&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;version is 2.7, implemented in .NET 2.0. &lt;a href="http://nstl.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=6148"&gt;Latest Builds&lt;/a&gt; are posted on a regular basis. As they are have undergone a full automated release build, they can be considered as stable as a regular release.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Road map&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In the next minor releases some missing algorithms from different STL implementations will be added and overloads will be provided to make the use of adapters for the .NET &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; classes unnecessary.&lt;br /&gt;&lt;br /&gt;With &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx" class="externalLink"&gt;LINQ&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, .NET 3.5 offers a comprehensive and powerfull algorithm and data structure library. The next major release 3.0 will integrate tightly with it. Additional to the full orthogonal decoupled power of the NSTL's  algorithms, those that can not be replaced by &lt;a href="http://msdn.microsoft.com/en-us/library/bb394939.aspx" class="externalLink"&gt;LINQ standard query operators&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, will be offered as such query operators. .NETcollections will be enriched with extension methods to let them closely interact with the NSTL's feature, without using the bulky adapters that are necessary right now. The plan is a seamless transition between LINQ and the NSTL in both directions.&lt;br /&gt;&lt;br /&gt;A first stable alpha can be found in the &lt;a href="http://nstl.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=6148"&gt;Latest Builds&lt;/a&gt; section.&lt;/div&gt;</description><author>AndyM</author><pubDate>Mon, 01 Jun 2009 11:24:49 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20090601112449A</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Home&amp;version=13</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;The NSTL Project&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The NSTL project is a port and adaptation of the C++ STL to the .NET world. The main focus is to preserve the concepts and the power of the STL, especially in the area of algorithms and extensibility. It features the complete set of the STL's algorithms, a set of containers that are missing in the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace and the full range of adapters, binders and functors. It is fully compatible with the .NET collections and concepts.&lt;br /&gt; &lt;br /&gt;Further documentation can be found &lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Documentation%20Overview&amp;amp;referringTitle=Home"&gt;here&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Status&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current &lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx" class="externalLink"&gt;release&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;version is 2.7, implemented in .NET 2.0. &lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx?ReleaseId=6148"&gt; Latest Builds&lt;/a&gt; are posted on a regular basis. As they are have undergone a full automated release build, they can be considered as stable as a regular release.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Road map&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;In the next minor releases some missing algorithms from different STL implementations will be added and overloads will be provided to make the use of adapters for the .NET &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; classes unnecessary.&lt;br /&gt; &lt;br /&gt;With &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx" class="externalLink"&gt;LINQ&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, .NET 3.5 offers a comprehensive and powerfull algorithm and data structure library. The next major release 3.0 will integrate tightly with it. Additional to the full orthogonal decoupled power of the NSTL's  algorithms, those that can not be replaced by &lt;a href="http://msdn.microsoft.com/en-us/library/bb394939.aspx" class="externalLink"&gt;LINQ standard query operators&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, will be offered as such query operators. .NETcollections will be enriched with extension methods to let them closely interact with the NSTL's feature, without using the bulky adapters that are necessary right now. The plan is a seamless transition between LINQ and the NSTL in both directions.&lt;br /&gt; &lt;br /&gt;A first stable alpha can be found in the &lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx?ReleaseId=6148"&gt; Latest Builds&lt;/a&gt; section.&lt;br /&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Wed, 24 Sep 2008 19:10:22 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080924071022P</guid></item><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Home&amp;version=12</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;The NSTL Project&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The NSTL project is a port and adaptation of the C++ STL to the .NET world. The main focus is to preserve the concepts and the power of the STL, especially in the area of algorithms and extensibility. It features the complete set of the STL's algorithms, a set of containers that are missing in the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace and the full range of adapters, binders and functors. It is fully compatible with the .NET collections and concepts.&lt;br /&gt; &lt;br /&gt;Further documentation can be found &lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Documentation%20Overview&amp;amp;referringTitle=Home"&gt;here&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Status&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current &lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx" class="externalLink"&gt;release&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;version is 2.7, implemented in .NET 2.0. &lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx?ReleaseId=6148"&gt; Latest Builds&lt;/a&gt; are posted on a regular basis. As they are have undergone a full automated release build, they can be considered as stable as a regular release.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Road map&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;In the next minor releases some missing algorithms from different STL implementations will be added and overloads will be provided to make the use of adapters for the .NET &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; classes unnecessary.&lt;br /&gt; &lt;br /&gt;With &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx" class="externalLink"&gt;LINQ&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, .NET 3.5 offers a comprehensive and powerfull algorithm and data structure library. The next major release 3.0 will integrate tightly with it. Additional to the full orthogonal decoupled power of the NSTL's  algorithms, those that can not be replaced by &lt;a href="http://msdn.microsoft.com/en-us/library/bb394939.aspx" class="externalLink"&gt;LINQ standard query operators&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, will be offered as such query operators. .NETcollections will be enriched with extension methods to let them closely interact with the NSTL's feature, without using the bulky adapters that are necessary right now. The plan is a seamless transition between LINQ and the NSTL in both directions.&lt;br /&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Sun, 21 Sep 2008 13:45:52 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080921014552P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Home&amp;version=11</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;The NSTL Project&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The NSTL project is a port and adaptation of the C++ STL to the .NET world. The main focus is to preserve the concepts and the power of the STL, especially in the area of algorithms and extensibility. It features the complete set of the STL's algorithms, a set of containers that are missing in the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace and the full range of adapters, binders and functors. It is fully compatible with the .NET collections and concepts.&lt;br /&gt; &lt;br /&gt;Further documentation can be found &lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Documentation%20Overview&amp;amp;referringTitle=Home"&gt;here&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Status&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current &lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx" class="externalLink"&gt;release&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;version is 2.6, implemented in .NET 2.0. &lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx?ReleaseId=6148"&gt; Latest Builds&lt;/a&gt; are posted on a regular basis. As they are have undergone a full automated release build, they can be considered as stable as a regular release.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Road map&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;In the next minor releases some missing algorithms from different STL implementations will be added and overloads will be provided to make the use of adapters for the .NET &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; classes unnecessary.&lt;br /&gt; &lt;br /&gt;With &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx" class="externalLink"&gt;LINQ&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, .NET 3.5 offers a comprehensive and powerfull algorithm and data structure library. The next major release 3.0 will integrate tightly with it. Additional to the full orthogonal decoupled power of the NSTL's  algorithms, those that can not be replaced by &lt;a href="http://msdn.microsoft.com/en-us/library/bb394939.aspx" class="externalLink"&gt;LINQ standard query operators&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, will be offered as such query operators. .NETcollections will be enriched with extension methods to let them closely interact with the NSTL's feature, without using the bulky adapters that are necessary right now. The plan is a seamless transition between LINQ and the NSTL in both directions.&lt;br /&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Wed, 07 May 2008 18:29:30 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080507062930P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Home&amp;version=10</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;The NSTL Project&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The NSTL project is a port and adaptation of the C++ STL to the .NET world. The main focus is to preserve the concepts and the power of the STL, especially in the area of algorithms and extensibility. It features the complete set of the STL's algorithms, a set of containers that are missing in the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace and the full range of adapters, binders and functors. It is fully compatible with the .NET collections and concepts.&lt;br /&gt; &lt;br /&gt;Further documentation can be found &lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Documentation%20Overview&amp;amp;referringTitle=Home"&gt;here&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Status&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current release version is 2.5, implemented in .NET 2.0. &lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx?ReleaseId=6148"&gt; Latest Builds&lt;/a&gt; are posted on a regular basis. As they are have undergone a full automated release build, they can be considered as stable as a regular release.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Road map&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;In the next minor releases some missing algorithms from different STL implementations will be added and overloads will be provided to make the use of adapters for the .NET &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; classes unnecessary.&lt;br /&gt; &lt;br /&gt;With &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx" class="externalLink"&gt;LINQ&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, .NET 3.5 offers a comprehensive and powerfull algorithm and data structure library. The next major release 3.0 will integrate tightly with it. Additional to the full orthogonal decoupled power of the NSTL's  algorithms, those that can not be replaced by &lt;a href="http://msdn.microsoft.com/en-us/library/bb394939.aspx" class="externalLink"&gt;LINQ standard query operators&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, will be offered as such query operators. .NETcollections will be enriched with extension methods to let them closely interact with the NSTL's feature, without using the bulky adapters that are necessary right now. The plan is a seamless transition between LINQ and the NSTL in both directions.&lt;br /&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Wed, 07 May 2008 07:34:05 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080507073405A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Home&amp;version=9</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;The NSTL Project&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The NSTL project is a port and adaptation of the C++ STL to the .NET world. The main focus is to preserve the concepts and the power of the STL, especially in the area of algorithms and extensibility. It features the complete set of the STL's algorithms, a set of containers that are missing in the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace and the full range of adapters, binders and functors. It is fully compatible with the .NET collections and concepts.&lt;br /&gt; &lt;br /&gt;Further documentation can be found &lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Documentation%20Overview&amp;amp;referringTitle=Home"&gt;here&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Status&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current release version is 2.5, implemented in .NET 2.0. &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Road map&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;In the next minor releases some missing algorithms from different STL implementations will be added and overloads will be provided to make the use of adapters for the .NET &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; classes unnecessary.&lt;br /&gt; &lt;br /&gt;With &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx" class="externalLink"&gt;LINQ&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, .NET 3.5 offers a comprehensive and powerfull algorithm and data structure library. The next major release 3.0 will integrate tightly with it. Additional to the full orthogonal decoupled power of the NSTL's  algorithms, those that can not be replaced by &lt;a href="http://msdn.microsoft.com/en-us/library/bb394939.aspx" class="externalLink"&gt;LINQ standard query operators&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, will be offered as such query operators. .NETcollections will be enriched with extension methods to let them closely interact with the NSTL's feature, without using the bulky adapters that are necessary right now. The plan is a seamless transition between LINQ and the NSTL in both directions.&lt;br /&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Mon, 05 May 2008 22:09:59 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080505100959P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Home&amp;version=8</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;The NSTL Project&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The NSTL project is a port and adaptation of the C++ STL to the .NET world. The main focus is to preserve the concepts and the power of the STL, especially in the area of algorithms and extensibility. It features the complete set of the STL's algorithms, a set of containers that are missing in the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace and the full range of adapters, binders and functors. It is fully compatible with the .NET collections and concepts.&lt;br /&gt; &lt;br /&gt;Further documentation can be found &lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Documentation%20Overview&amp;amp;referringTitle=Home"&gt;here&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Status&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current release version is 2.6, implemented in .NET 2.0. &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Road map&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;In the next minor releases some missing algorithms from different STL implementations will be added and overloads will be provided to make the use of adapters for the .NET &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; classes unnecessary.&lt;br /&gt; &lt;br /&gt;With &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx" class="externalLink"&gt;LINQ&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, .NET 3.5 offers a comprehensive and powerfull algorithm and data structure library. The next major release 3.0 will integrate tightly with it. Additional to the full orthogonal decoupled power of the NSTL's  algorithms, those that can not be replaced by &lt;a href="http://msdn.microsoft.com/en-us/library/bb394939.aspx" class="externalLink"&gt;LINQ standard query operators&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, will be offered as such query operators. .NETcollections will be enriched with extension methods to let them closely interact with the NSTL's feature, without using the bulky adapters that are necessary right now. The plan is a seamless transition between LINQ and the NSTL in both directions.&lt;br /&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Mon, 05 May 2008 22:09:40 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080505100940P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Home&amp;version=7</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;The NSTL Project&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The NSTL project is a port and adaptation of the C++ STL to the .NET world. The main focus is to preserve the concepts and the power of the STL, especially in the area of algorithms and extensibility. It features the complete set of the STL's algorithms, a set of containers that are missing in the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace and the full range of adapters, binders and functors. It is fully compatible with the .NET collections and concepts.&lt;br /&gt; &lt;br /&gt;Further documentation can be found &lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Documentation%20Overview&amp;amp;referringTitle=Home"&gt;here&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Current Status&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;The current release version is 2.6, implemented in .NET 2.0. &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Road map&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;In the next minor releases some missing algorithms from different STL implementations will be added and overloads will be provided to make the use of adapters for the .NET &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; classes unnecessary.&lt;br /&gt; &lt;br /&gt;With &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx" class="externalLink"&gt;LINQ&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, .NET 3.5 offers a comprehensive and powerfull algorithm and data structure library. The next major release 3.0 will integrate tightly with it. Additional to the full orthogonal decoupled power of the NSTL's  algorithms, those that can not be replaced by &lt;a href="http://msdn.microsoft.com/en-us/library/bb394939.aspx" class="externalLink"&gt;LINQ standard query operators&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, will be offered as such query operators. .NETcollections will be enriched with extension methods to let them closely interact with the NSTL's feature, without using the bulky adapters that are necessary right now. The plan is a seamless transition between LINQ and the NSTL. in both directions.&lt;br /&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Mon, 05 May 2008 22:08:10 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20080505100810P</guid></item><item><title>UPDATED WIKI: Documentation Overview</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Documentation Overview&amp;version=10</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Documentation&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=FAQs&amp;amp;referringTitle=Documentation%20Overview"&gt;FAQs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Intro%20to%20NSTL&amp;amp;referringTitle=Documentation%20Overview"&gt;An Introduction to the concepts of the (N)STL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Code%20Examples&amp;amp;referringTitle=Documentation%20Overview"&gt;Examples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx?ReleaseId=7794"&gt;A compiled help file can be downloaded from the release page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Fri, 14 Mar 2008 22:05:10 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Documentation Overview 20080314100510P</guid></item><item><title>UPDATED WIKI: Documentation Overview</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Documentation Overview&amp;version=9</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Documentation&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=FAQs&amp;amp;referringTitle=Documentation%20Overview"&gt;FAQs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Intro%20to%20NSTL&amp;amp;referringTitle=Documentation%20Overview"&gt;An Introduction to the concepts of the (N)STL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Code%20Examples&amp;amp;referringTitle=Documentation%20Overview"&gt;Examples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Release/ProjectReleases.aspx?ReleaseId=7794"&gt;A compiled Help file can be downloaded from the release page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Fri, 14 Mar 2008 22:04:28 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Documentation Overview 20080314100428P</guid></item><item><title>UPDATED WIKI: Code Examples</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Code Examples&amp;version=12</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
Examples
&lt;/h1&gt;The following example finds the intersection of two collections of &lt;span class="codeInline"&gt;System.Type&lt;/span&gt; objects. It uses the adapter functionality of the &lt;span class="codeInline"&gt;NstlUtil&lt;/span&gt; class to be able to use standard .NET collections from the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace.&lt;br /&gt;&lt;pre&gt;
using System;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class A { }
    class B : A { }
    class C : A { }
    class D : B { }
    class E { }
 
    class LessByName&amp;lt;T&amp;gt; : BinaryPredicate&amp;lt;T, T&amp;gt;
    {
        bool BinaryFunction&amp;lt;T, T, bool&amp;gt;.Execute(T lhs, T rhs)
        {
            return lhs.ToString().CompareTo(rhs.ToString()) &amp;lt; 0;
        }
    }
 
    class Program
    {
        static void Main()
        {
            Type[] tps1 = new Type[] { typeof(A), typeof(B), typeof(E) };
            Type[] tps2 = new Type[] { typeof(A), typeof(B), typeof(D) };
 
            Algorithm.Sort(NstlUtil.Begin(tps1), NstlUtil.End(tps1),
                           new LessByName&amp;lt;Type&amp;gt;());
            Algorithm.Sort(NstlUtil.Begin(tps2), NstlUtil.End(tps2),
                           new LessByName&amp;lt;Type&amp;gt;());
 
            List&amp;lt;Type&amp;gt; result = new List&amp;lt;Type&amp;gt;();
 
            Algorithm.SetIntersection(NstlUtil.Begin(tps1), NstlUtil.End(tps1),
                     NstlUtil.Begin(tps2), NstlUtil.End(tps2),
                     NstlUtil.BackInserter(result), new LessByName&amp;lt;Type&amp;gt;());
 
        }
    }
}
&lt;/pre&gt;The next code block does exactly the same as the first one. The difference is that instead of implementing a functor to compare two Types, it uses a anonymous delegate which is adapted by the &lt;span class="codeInline"&gt;Functional.PtrFun(...)&lt;/span&gt; method.&lt;br /&gt;&lt;pre&gt;
using System;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class A { }
    class B : A { }
    class C : A { }
    class D : B { }
    class E { }
 
    class Program
    {
        static void Main()
        {
            BinaryFunction&amp;lt;Type, Type, bool&amp;gt; lessByName = 
                Functional.PtrFun&amp;lt;Type, Type, bool&amp;gt;(delegate(Type lhs, Type rhs){
                                        return lhs.ToString().CompareTo(rhs.ToString()) &amp;lt; 0;
                                                                                 });
            Type[] tps1 = new Type[] { typeof(A), typeof(B), typeof(E) };
            Type[] tps2 = new Type[] { typeof(A), typeof(B), typeof(D) };
 
            Algorithm.Sort(NstlUtil.Begin(tps1), NstlUtil.End(tps1), lessByName);
            Algorithm.Sort(NstlUtil.Begin(tps2), NstlUtil.End(tps2), lessByName);
 
            List&amp;lt;Type&amp;gt; result = new List&amp;lt;Type&amp;gt;();
            Algorithm.SetIntersection(NstlUtil.Begin(tps1), NstlUtil.End(tps1),
                     NstlUtil.Begin(tps2), NstlUtil.End(tps2),
                     NstlUtil.BackInserter(result), lessByName);
 
        }
    }
}
&lt;/pre&gt;In the next example all values are extracted from a collection of key value pairs using the &lt;span class="codeInline"&gt;Algorithm.Transform&lt;/span&gt; algorithm and the &lt;span class="codeInline"&gt;Select.SecondFromKeyValuePair&lt;/span&gt; functor and inserted into a &lt;span class="codeInline"&gt;LinkedList&lt;/span&gt;.&lt;br /&gt;&lt;pre&gt;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class Program
    {
        static void Main()
        {
            List&amp;lt;KeyValuePair&amp;lt;int, string&amp;gt;&amp;gt; int2str = new List&amp;lt;KeyValuePair&amp;lt;int, string&amp;gt;&amp;gt;();
 
            // … file the list
            for (int i = 0; i &amp;lt; 10; ++i)
                int2str.Add(new KeyValuePair&amp;lt;int, string&amp;gt;(i, i.ToString()));
 
            LinkedList&amp;lt;string&amp;gt; strs = new LinkedList&amp;lt;string&amp;gt;();
 
            Algorithm.Transform(NstlUtil.Begin(int2str), NstlUtil.End(int2str),
                NstlUtil.BackInserter(strs), Select.SecondFromKeyValuePair&amp;lt;int, string&amp;gt;());
 
        }
    }
}
&lt;/pre&gt;In the next example the value of 10 is searched in a custom NSTL collection using an existing static function and the &lt;span class="codeInline"&gt;Algorithm.Find(...)&lt;/span&gt; linear search algorithm.&lt;br /&gt;&lt;pre&gt;
using System;
using NStl;
 
namespace NstlExamples
{
    class Program
    {
        static bool Equals10(int par)
        {
            return par == 10;
        }
        static void Main()
        {
            DList&amp;lt;int&amp;gt; ints = new DList&amp;lt;int&amp;gt;();
            for (int i = 0; i &amp;lt; 20; ++i)
                ints.PushBack(i);
 
            DList&amp;lt;int&amp;gt;.Iterator found = 
                Algorithm.FindIf(ints.Begin(), ints.End(), 
                            Functional.PtrFun&amp;lt;int, bool&amp;gt;(Equals10));
 
            if (!found.Equals(ints.End()))
                Console.WriteLine(&amp;quot;Found value: &amp;quot; + found.Value.ToString());
        }
    }
}
&lt;/pre&gt;The above sample can also be implemented without a custom function at all by using the provided binary function returned by the &lt;span class="codeInline"&gt;Compare.EqualTo&amp;lt;T&amp;gt;()&lt;/span&gt; factory method and a so called binder. The &lt;span class="codeInline"&gt;Bind.Second &lt;/span&gt;binder factory method returns an adapter object that will store the value of 10 and pass it as the second parameter into the &lt;span class="codeInline"&gt;EqualTo&lt;/span&gt; binary function for each item in the &lt;span class="codeInline"&gt;DList&amp;lt;T&amp;gt;&lt;/span&gt;.&lt;br /&gt;&lt;pre&gt;
using System;
using NStl;
 
namespace NstlExamples
{
    class Program
    {
        static void Main()
        {
            DList&amp;lt;int&amp;gt; ints = new DList&amp;lt;int&amp;gt;();
            for (int i = 0; i &amp;lt; 20; ++i)
                ints.PushBack(i);
 
            UnaryPredicate&amp;lt;int&amp;gt; equals10 = 
                Bind.Second(Compare.EqualTo&amp;lt;int&amp;gt;(), 10);
            
            DList&amp;lt;int&amp;gt;.Iterator found = 
                Algorithm.FindIf(ints.Begin(), ints.End(), equals10);
 
            if (!found.Equals(ints.End()))
                Console.WriteLine(&amp;quot;Found value: &amp;quot; + found.Value.ToString());
        }
    }
}
&lt;/pre&gt;It is possible to combine existing functors using the so called composition binders. Basically these are functors that execute a given functor and use the result as input for other functors. The following example evaluates as &lt;span class="codeInline"&gt;string&lt;/span&gt; property, converts the result to an integer and appends it to a target collection.&lt;br /&gt;&lt;pre&gt;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class Something
    {
        public Something(string name)
        {
            this.name = name;
        }
        public string Name
        {
            get { return name; }
        }
        private readonly string name;
    }
    class Program
    {
        static void Main()
        {
            IList&amp;lt;Something&amp;gt; somethings = new List&amp;lt;Something&amp;gt;();
            for (int i = 0; i &amp;lt; 20; ++i)
                somethings.Add(new Something(i.ToString()));
 
            // ... evaluate string property
            UnaryFunction&amp;lt;Something, string&amp;gt; somethingsPropName =
                Functional.PtrFun&amp;lt;Something, string&amp;gt;(delegate(Something s) { return s.Name; });
            
            // ... convert a string to an integer
            UnaryFunction&amp;lt;string, int&amp;gt; convertToInt =
                Functional.PtrFun&amp;lt;string, int&amp;gt;(delegate(string s) { return int.Parse(s); });
 
            // ... combine both functors to convert the name property to an integer
            UnaryFunction&amp;lt;Something, int&amp;gt; somethingsName2Int =
                Compose.FGx(convertToInt, somethingsPropName);
 
            ICollection&amp;lt;int&amp;gt; namesAsInts = new LinkedList&amp;lt;int&amp;gt;();
 
            Algorithm.Transform(NstlUtil.Begin(somethings), NstlUtil.End(somethings), 
                                NstlUtil.BackInserter(namesAsInts), somethingsName2Int);
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Wed, 02 Jan 2008 18:58:26 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Code Examples 20080102065826P</guid></item><item><title>UPDATED WIKI: Documentation Overview</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Documentation Overview&amp;version=8</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Documentation&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=FAQs&amp;amp;referringTitle=Documentation%20Overview"&gt;FAQs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Intro%20to%20NSTL&amp;amp;referringTitle=Documentation%20Overview"&gt;An Introduction to the concepts of the (N)STL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Code%20Examples&amp;amp;referringTitle=Documentation%20Overview"&gt;Examples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="javascript:window.location.href='http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nstl&amp;amp;DownloadId=22086';"&gt;Compiled Help File&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Thu, 15 Nov 2007 22:39:58 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Documentation Overview 20071115103958P</guid></item><item><title>UPDATED WIKI: Code Examples</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Code Examples&amp;version=11</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
Examples
&lt;/h1&gt;The following example finds the intersection of two collections of &lt;span class="codeInline"&gt;System.Type&lt;/span&gt; objects. It uses the adapter functionality of the &lt;span class="codeInline"&gt;NstlUtil&lt;/span&gt; class to be able to use standard .NET collections from the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace.&lt;br /&gt;&lt;pre&gt;
using System;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class A { }
    class B : A { }
    class C : A { }
    class D : B { }
    class E { }
 
    class LessByName&amp;lt;T&amp;gt; : BinaryPredicate&amp;lt;T, T&amp;gt;
    {
        bool BinaryFunction&amp;lt;T, T, bool&amp;gt;.Execute(T lhs, T rhs)
        {
            return lhs.ToString().CompareTo(rhs.ToString()) &amp;lt; 0;
        }
    }
 
    class Program
    {
        static void Main()
        {
            Type[] tps1 = new Type[] { typeof(A), typeof(B), typeof(E) };
            Type[] tps2 = new Type[] { typeof(A), typeof(B), typeof(D) };
 
            Algorithm.Sort(NstlUtil.Begin(tps1), NstlUtil.End(tps1),
                           new LessByName&amp;lt;Type&amp;gt;());
            Algorithm.Sort(NstlUtil.Begin(tps2), NstlUtil.End(tps2),
                           new LessByName&amp;lt;Type&amp;gt;());
 
            List&amp;lt;Type&amp;gt; result = new List&amp;lt;Type&amp;gt;();
 
            Algorithm.SetIntersection(NstlUtil.Begin(tps1), NstlUtil.End(tps1),
                     NstlUtil.Begin(tps2), NstlUtil.End(tps2),
                     NstlUtil.BackInserter(result), new LessByName&amp;lt;Type&amp;gt;());
 
        }
    }
}
&lt;/pre&gt;The next code block does exactly the same as the first one. The difference is that instead of implementing a functor to compare two Types, it uses a anonymous delegate which is adapted by the &lt;span class="codeInline"&gt;Functional.PtrFun(...)&lt;/span&gt; method.&lt;br /&gt;&lt;pre&gt;
using System;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class A { }
    class B : A { }
    class C : A { }
    class D : B { }
    class E { }
 
    class Program
    {
        static void Main()
        {
            BinaryFunction&amp;lt;Type, Type, bool&amp;gt; lessByName = 
                Functional.PtrFun&amp;lt;Type, Type, bool&amp;gt;(delegate(Type lhs, Type rhs){
                                        return lhs.ToString().CompareTo(rhs.ToString()) &amp;lt; 0;
                                                                                 });
            Type[] tps1 = new Type[] { typeof(A), typeof(B), typeof(E) };
            Type[] tps2 = new Type[] { typeof(A), typeof(B), typeof(D) };
 
            Algorithm.Sort(NstlUtil.Begin(tps1), NstlUtil.End(tps1), lessByName);
            Algorithm.Sort(NstlUtil.Begin(tps2), NstlUtil.End(tps2), lessByName);
 
            List&amp;lt;Type&amp;gt; result = new List&amp;lt;Type&amp;gt;();
            Algorithm.SetIntersection(NstlUtil.Begin(tps1), NstlUtil.End(tps1),
                     NstlUtil.Begin(tps2), NstlUtil.End(tps2),
                     NstlUtil.BackInserter(result), lessByName);
 
        }
    }
}
&lt;/pre&gt;In the next example all values are extracted from a collection of key value pairs using the &lt;span class="codeInline"&gt;Algorithm.Transform&lt;/span&gt; algorithm and the &lt;span class="codeInline"&gt;Functional.Select2nd&lt;/span&gt; functor and inserted into a &lt;span class="codeInline"&gt;LinkedList&lt;/span&gt;.&lt;br /&gt;&lt;pre&gt;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class Program
    {
        static void Main()
        {
            List&amp;lt;KeyValuePair&amp;lt;int, string&amp;gt;&amp;gt; int2str = new List&amp;lt;KeyValuePair&amp;lt;int, string&amp;gt;&amp;gt;();
 
            // … file the list
            for (int i = 0; i &amp;lt; 10; ++i)
                int2str.Add(new KeyValuePair&amp;lt;int, string&amp;gt;(i, i.ToString()));
 
            LinkedList&amp;lt;string&amp;gt; strs = new LinkedList&amp;lt;string&amp;gt;();
 
            Algorithm.Transform(NstlUtil.Begin(int2str), NstlUtil.End(int2str),
                NstlUtil.BackInserter(strs), Functional.Select2nd&amp;lt;int, string&amp;gt;());
 
        }
    }
}
&lt;/pre&gt;In the next example the value of 10 is searched in a custom NSTL collection using an existing static function and the &lt;span class="codeInline"&gt;Algorithm.Find(...)&lt;/span&gt; linear search algorithm.&lt;br /&gt;&lt;pre&gt;
using System;
using NStl;
 
namespace NstlExamples
{
    class Program
    {
        static bool Equals10(int par)
        {
            return par == 10;
        }
        static void Main()
        {
            DList&amp;lt;int&amp;gt; ints = new DList&amp;lt;int&amp;gt;();
            for (int i = 0; i &amp;lt; 20; ++i)
                ints.PushBack(i);
 
            DList&amp;lt;int&amp;gt;.Iterator found = 
                Algorithm.FindIf(ints.Begin(), ints.End(), 
                            Functional.PtrFun&amp;lt;int, bool&amp;gt;(Equals10));
 
            if (!found.Equals(ints.End()))
                Console.WriteLine(&amp;quot;Found value: &amp;quot; + found.Value.ToString());
        }
    }
}
&lt;/pre&gt;The above sample can also be implemented without a custom function at all by using the provided binary function returned by the &lt;span class="codeInline"&gt;Functional.EqualTo&amp;lt;T&amp;gt;()&lt;/span&gt; factory method and a so called binder. The &lt;span class="codeInline"&gt;Functional.Bind2nd &lt;/span&gt;binder factory method returns an adapter object that will store the value of 10 and pass it as the second parameter into the &lt;span class="codeInline"&gt;EqualTo&lt;/span&gt; binary function for each item in the &lt;span class="codeInline"&gt;DList&amp;lt;T&amp;gt;&lt;/span&gt;.&lt;br /&gt;&lt;pre&gt;
using System;
using NStl;
 
namespace NstlExamples
{
    class Program
    {
        static void Main()
        {
            DList&amp;lt;int&amp;gt; ints = new DList&amp;lt;int&amp;gt;();
            for (int i = 0; i &amp;lt; 20; ++i)
                ints.PushBack(i);
 
            UnaryPredicate&amp;lt;int&amp;gt; equals10 = 
                Functional.Bind2nd(Functional.EqualTo&amp;lt;int&amp;gt;(), 10);
            
            DList&amp;lt;int&amp;gt;.Iterator found = 
                Algorithm.FindIf(ints.Begin(), ints.End(), equals10);
 
            if (!found.Equals(ints.End()))
                Console.WriteLine(&amp;quot;Found value: &amp;quot; + found.Value.ToString());
        }
    }
}
&lt;/pre&gt;It is possible to combine existing functors using the so called composition binders. Basically these are functors that execute a given functor and use the result as input for other functors. The following example evaluates as &lt;span class="codeInline"&gt;string&lt;/span&gt; property, converts the result to an integer and appends it to a target collection.&lt;br /&gt;&lt;pre&gt;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class Something
    {
        public Something(string name)
        {
            this.name = name;
        }
        public string Name
        {
            get { return name; }
        }
        private readonly string name;
    }
    class Program
    {
        static void Main()
        {
            IList&amp;lt;Something&amp;gt; somethings = new List&amp;lt;Something&amp;gt;();
            for (int i = 0; i &amp;lt; 20; ++i)
                somethings.Add(new Something(i.ToString()));
 
            // ... evaluate string property
            UnaryFunction&amp;lt;Something, string&amp;gt; somethingsPropName =
                Functional.PtrFun&amp;lt;Something, string&amp;gt;(delegate(Something s) { return s.Name; });
            
            // ... convert a string to an integer
            UnaryFunction&amp;lt;string, int&amp;gt; convertToInt =
                Functional.PtrFun&amp;lt;string, int&amp;gt;(delegate(string s) { return int.Parse(s); });
 
            // ... combine both functors to convert the name property to an integer
            UnaryFunction&amp;lt;Something, int&amp;gt; somethingsName2Int =
                Functional.ComposeFGx(convertToInt, somethingsPropName);
 
            ICollection&amp;lt;int&amp;gt; namesAsInts = new LinkedList&amp;lt;int&amp;gt;();
 
            Algorithm.Transform(NstlUtil.Begin(somethings), NstlUtil.End(somethings), 
                                NstlUtil.BackInserter(namesAsInts), somethingsName2Int);
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Mon, 21 May 2007 01:37:37 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Code Examples 20070521013737A</guid></item><item><title>UPDATED WIKI: Code Examples</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Code Examples&amp;version=10</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
Examples
&lt;/h1&gt;The following example finds the intersection of two collections of &lt;span class="codeInline"&gt;System.Type&lt;/span&gt; objects. It uses the adapter functionality of the &lt;span class="codeInline"&gt;NstlUtil&lt;/span&gt; class to be able to use standard .NET collections from the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace.&lt;br /&gt;&lt;pre&gt;
using System;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class A { }
    class B : A { }
    class C : A { }
    class D : B { }
    class E { }
 
    class LessByName&amp;lt;T&amp;gt; : BinaryPredicate&amp;lt;T, T&amp;gt;
    {
        bool BinaryFunction&amp;lt;T, T, bool&amp;gt;.Execute(T lhs, T rhs)
        {
            return lhs.ToString().CompareTo(rhs.ToString()) &amp;lt; 0;
        }
    }
 
    class Program
    {
        static void Main()
        {
            Type[] tps1 = new Type[] { typeof(A), typeof(B), typeof(E) };
            Type[] tps2 = new Type[] { typeof(A), typeof(B), typeof(D) };
 
            Algorithm.Sort(NstlUtil.Begin(tps1), NstlUtil.End(tps1),
                           new LessByName&amp;lt;Type&amp;gt;());
            Algorithm.Sort(NstlUtil.Begin(tps2), NstlUtil.End(tps2),
                           new LessByName&amp;lt;Type&amp;gt;());
 
            List&amp;lt;Type&amp;gt; result = new List&amp;lt;Type&amp;gt;();
 
            Algorithm.SetIntersection(NstlUtil.Begin(tps1), NstlUtil.End(tps1),
                     NstlUtil.Begin(tps2), NstlUtil.End(tps2),
                     NstlUtil.BackInserter(result), new LessByName&amp;lt;Type&amp;gt;());
 
        }
    }
}
&lt;/pre&gt;The next code block does exactly the same as the first one. The difference is that instead of implementing a functor to compare two Types, it uses a anonymous delegate which is adapted by the &lt;span class="codeInline"&gt;Functional.PtrFun(...)&lt;/span&gt; method.&lt;br /&gt;&lt;pre&gt;
using System;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class A { }
    class B : A { }
    class C : A { }
    class D : B { }
    class E { }
 
    class Program
    {
        static void Main()
        {
            BinaryFunction&amp;lt;Type, Type, bool&amp;gt; lessByName = 
                Functional.PtrFun&amp;lt;Type, Type, bool&amp;gt;(delegate(Type lhs, Type rhs){
                                        return lhs.ToString().CompareTo(rhs.ToString()) &amp;lt; 0;
                                                                                 });
            Type[] tps1 = new Type[] { typeof(A), typeof(B), typeof(E) };
            Type[] tps2 = new Type[] { typeof(A), typeof(B), typeof(D) };
 
            Algorithm.Sort(NstlUtil.Begin(tps1), NstlUtil.End(tps1), lessByName);
            Algorithm.Sort(NstlUtil.Begin(tps2), NstlUtil.End(tps2), lessByName);
 
            List&amp;lt;Type&amp;gt; result = new List&amp;lt;Type&amp;gt;();
            Algorithm.SetIntersection(NstlUtil.Begin(tps1), NstlUtil.End(tps1),
                     NstlUtil.Begin(tps2), NstlUtil.End(tps2),
                     NstlUtil.BackInserter(result), lessByName);
 
        }
    }
}
&lt;/pre&gt;In the next example all values are extracted from a collection of key value pairs using the &lt;span class="codeInline"&gt;Algorithm.Transform&lt;/span&gt; algorithm and the &lt;span class="codeInline"&gt;Functional.Select2nd&lt;/span&gt; functor and insert them into a &lt;span class="codeInline"&gt;LinkedList&lt;/span&gt;.&lt;br /&gt;&lt;pre&gt;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class Program
    {
        static void Main()
        {
            List&amp;lt;KeyValuePair&amp;lt;int, string&amp;gt;&amp;gt; int2str = new List&amp;lt;KeyValuePair&amp;lt;int, string&amp;gt;&amp;gt;();
 
            // … file the list
            for (int i = 0; i &amp;lt; 10; ++i)
                int2str.Add(new KeyValuePair&amp;lt;int, string&amp;gt;(i, i.ToString()));
 
            LinkedList&amp;lt;string&amp;gt; strs = new LinkedList&amp;lt;string&amp;gt;();
 
            Algorithm.Transform(NstlUtil.Begin(int2str), NstlUtil.End(int2str),
                NstlUtil.BackInserter(strs), Functional.Select2nd&amp;lt;int, string&amp;gt;());
 
        }
    }
}
&lt;/pre&gt;In the next example the value of 10 is searched in a custom NSTL collection using an existing static function and the &lt;span class="codeInline"&gt;Algorithm.Find(...)&lt;/span&gt; linear search algorithm.&lt;br /&gt;&lt;pre&gt;
using System;
using NStl;
 
namespace NstlExamples
{
    class Program
    {
        static bool Equals10(int par)
        {
            return par == 10;
        }
        static void Main()
        {
            DList&amp;lt;int&amp;gt; ints = new DList&amp;lt;int&amp;gt;();
            for (int i = 0; i &amp;lt; 20; ++i)
                ints.PushBack(i);
 
            DList&amp;lt;int&amp;gt;.Iterator found = 
                Algorithm.FindIf(ints.Begin(), ints.End(), 
                            Functional.PtrFun&amp;lt;int, bool&amp;gt;(Equals10));
 
            if (!found.Equals(ints.End()))
                Console.WriteLine(&amp;quot;Found value: &amp;quot; + found.Value.ToString());
        }
    }
}
&lt;/pre&gt;The above sample can also be implemented without a custom function at all by using the provided binary function returned by the &lt;span class="codeInline"&gt;Functional.EqualTo&amp;lt;T&amp;gt;()&lt;/span&gt; factory method and a so called binder. The &lt;span class="codeInline"&gt;Functional.Bind2nd &lt;/span&gt;binder factory method returns an adapter object that will store the value of 10 and pass it as the second parameter into the &lt;span class="codeInline"&gt;EqualTo&lt;/span&gt; binary function for each item in the &lt;span class="codeInline"&gt;DList&amp;lt;T&amp;gt;&lt;/span&gt;.&lt;br /&gt;&lt;pre&gt;
using System;
using NStl;
 
namespace NstlExamples
{
    class Program
    {
        static void Main()
        {
            DList&amp;lt;int&amp;gt; ints = new DList&amp;lt;int&amp;gt;();
            for (int i = 0; i &amp;lt; 20; ++i)
                ints.PushBack(i);
 
            UnaryPredicate&amp;lt;int&amp;gt; equals10 = 
                Functional.Bind2nd(Functional.EqualTo&amp;lt;int&amp;gt;(), 10);
            
            DList&amp;lt;int&amp;gt;.Iterator found = 
                Algorithm.FindIf(ints.Begin(), ints.End(), equals10);
 
            if (!found.Equals(ints.End()))
                Console.WriteLine(&amp;quot;Found value: &amp;quot; + found.Value.ToString());
        }
    }
}
&lt;/pre&gt;It is possible to combine existing functors using the so called composition binders. Basically these are functors that execute a given functor and use the result as input for other functors. The following example evaluates as &lt;span class="codeInline"&gt;string&lt;/span&gt; property, converts the result to an integer and appends it to a target collection.&lt;br /&gt;&lt;pre&gt;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class Something
    {
        public Something(string name)
        {
            this.name = name;
        }
        public string Name
        {
            get { return name; }
        }
        private readonly string name;
    }
    class Program
    {
        static void Main()
        {
            IList&amp;lt;Something&amp;gt; somethings = new List&amp;lt;Something&amp;gt;();
            for (int i = 0; i &amp;lt; 20; ++i)
                somethings.Add(new Something(i.ToString()));
 
            // ... evaluate string property
            UnaryFunction&amp;lt;Something, string&amp;gt; somethingsPropName =
                Functional.PtrFun&amp;lt;Something, string&amp;gt;(delegate(Something s) { return s.Name; });
            
            // ... convert a string to an integer
            UnaryFunction&amp;lt;string, int&amp;gt; convertToInt =
                Functional.PtrFun&amp;lt;string, int&amp;gt;(delegate(string s) { return int.Parse(s); });
 
            // ... combine both functors to convert the name property to an integer
            UnaryFunction&amp;lt;Something, int&amp;gt; somethingsName2Int =
                Functional.ComposeFGx(convertToInt, somethingsPropName);
 
            ICollection&amp;lt;int&amp;gt; namesAsInts = new LinkedList&amp;lt;int&amp;gt;();
 
            Algorithm.Transform(NstlUtil.Begin(somethings), NstlUtil.End(somethings), 
                                NstlUtil.BackInserter(namesAsInts), somethingsName2Int);
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Mon, 21 May 2007 01:34:55 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Code Examples 20070521013455A</guid></item><item><title>UPDATED WIKI: Code Examples</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Code Examples&amp;version=9</link><description>&lt;div class="wikidoc"&gt;
&lt;h1&gt;
Examples
&lt;/h1&gt;The following example finds the intersection of two collections of &lt;span class="codeInline"&gt;System.Type&lt;/span&gt; objects. It uses the adapter functionality of the &lt;span class="codeInline"&gt;NstlUtil&lt;/span&gt; class to be able to use standard .NET collections from the &lt;span class="codeInline"&gt;System.Collections.Generic&lt;/span&gt; namespace.&lt;br /&gt;&lt;pre&gt;
using System;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class A { }
    class B : A { }
    class C : A { }
    class D : B { }
    class E { }
 
    class LessByName&amp;lt;T&amp;gt; : BinaryPredicate&amp;lt;T, T&amp;gt;
    {
        bool BinaryFunction&amp;lt;T, T, bool&amp;gt;.Execute(T lhs, T rhs)
        {
            return lhs.ToString().CompareTo(rhs.ToString()) &amp;lt; 0;
        }
    }
 
    class Program
    {
        static void Main()
        {
            Type[] tps1 = new Type[] { typeof(A), typeof(B), typeof(E) };
            Type[] tps2 = new Type[] { typeof(A), typeof(B), typeof(D) };
 
            Algorithm.Sort(NstlUtil.Begin(tps1), NstlUtil.End(tps1),
                           new LessByName&amp;lt;Type&amp;gt;());
            Algorithm.Sort(NstlUtil.Begin(tps2), NstlUtil.End(tps2),
                           new LessByName&amp;lt;Type&amp;gt;());
 
            List&amp;lt;Type&amp;gt; result = new List&amp;lt;Type&amp;gt;();
 
            Algorithm.SetIntersection(NstlUtil.Begin(tps1), NstlUtil.End(tps1),
                     NstlUtil.Begin(tps2), NstlUtil.End(tps2),
                     NstlUtil.BackInserter(result), new LessByName&amp;lt;Type&amp;gt;());
 
        }
    }
}
&lt;/pre&gt;The next code block does exactly the same as the first one. The difference is that instead of implementing a functor to compare two Types, it uses a anonymous delegate which is adapted by the &lt;span class="codeInline"&gt;Functional.PtrFun(...)&lt;/span&gt;.&lt;br /&gt;&lt;pre&gt;
using System;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class A { }
    class B : A { }
    class C : A { }
    class D : B { }
    class E { }
 
    class Program
    {
        static void Main()
        {
            BinaryFunction&amp;lt;Type, Type, bool&amp;gt; lessByName = 
                Functional.PtrFun&amp;lt;Type, Type, bool&amp;gt;(delegate(Type lhs, Type rhs){
                                        return lhs.ToString().CompareTo(rhs.ToString()) &amp;lt; 0;
                                                                                 });
            Type[] tps1 = new Type[] { typeof(A), typeof(B), typeof(E) };
            Type[] tps2 = new Type[] { typeof(A), typeof(B), typeof(D) };
 
            Algorithm.Sort(NstlUtil.Begin(tps1), NstlUtil.End(tps1), lessByName);
            Algorithm.Sort(NstlUtil.Begin(tps2), NstlUtil.End(tps2), lessByName);
 
            List&amp;lt;Type&amp;gt; result = new List&amp;lt;Type&amp;gt;();
            Algorithm.SetIntersection(NstlUtil.Begin(tps1), NstlUtil.End(tps1),
                     NstlUtil.Begin(tps2), NstlUtil.End(tps2),
                     NstlUtil.BackInserter(result), lessByName);
 
        }
    }
}
&lt;/pre&gt;In the next example all values are extracted from a collection of key value pairs using the &lt;span class="codeInline"&gt;Algorithm.Transform&lt;/span&gt; algorithm and the &lt;span class="codeInline"&gt;Functional.Select2nd&lt;/span&gt; functor and insert them into a &lt;span class="codeInline"&gt;LinkedList&lt;/span&gt;.&lt;br /&gt;&lt;pre&gt;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class Program
    {
        static void Main()
        {
            List&amp;lt;KeyValuePair&amp;lt;int, string&amp;gt;&amp;gt; int2str = new List&amp;lt;KeyValuePair&amp;lt;int, string&amp;gt;&amp;gt;();
 
            // … file the list
            for (int i = 0; i &amp;lt; 10; ++i)
                int2str.Add(new KeyValuePair&amp;lt;int, string&amp;gt;(i, i.ToString()));
 
            LinkedList&amp;lt;string&amp;gt; strs = new LinkedList&amp;lt;string&amp;gt;();
 
            Algorithm.Transform(NstlUtil.Begin(int2str), NstlUtil.End(int2str),
                NstlUtil.BackInserter(strs), Functional.Select2nd&amp;lt;int, string&amp;gt;());
 
        }
    }
}
&lt;/pre&gt;In the next example the value of 10 is searched in a custom NSTL collection using an existing static function and the &lt;span class="codeInline"&gt;Algorithm.Find(...)&lt;/span&gt; linear search algorithm.&lt;br /&gt;&lt;pre&gt;
using System;
using NStl;
 
namespace NstlExamples
{
    class Program
    {
        static bool Equals10(int par)
        {
            return par == 10;
        }
        static void Main()
        {
            DList&amp;lt;int&amp;gt; ints = new DList&amp;lt;int&amp;gt;();
            for (int i = 0; i &amp;lt; 20; ++i)
                ints.PushBack(i);
 
            DList&amp;lt;int&amp;gt;.Iterator found = 
                Algorithm.FindIf(ints.Begin(), ints.End(), 
                            Functional.PtrFun&amp;lt;int, bool&amp;gt;(Equals10));
 
            if (!found.Equals(ints.End()))
                Console.WriteLine(&amp;quot;Found value: &amp;quot; + found.Value.ToString());
        }
    }
}
&lt;/pre&gt;The above sample can also be implemented without a custom function at all by using the provided binary function returned by the &lt;span class="codeInline"&gt;Functional.EqualTo&amp;lt;T&amp;gt;()&lt;/span&gt; factory method and a so called binder. The &lt;span class="codeInline"&gt;Functional.Bind2nd &lt;/span&gt;binder factory method returns an adapter object that will store the value of 10 and pass it as the second parameter into the &lt;span class="codeInline"&gt;EqualTo&lt;/span&gt; binary function for each item in the &lt;span class="codeInline"&gt;DList&amp;lt;T&amp;gt;&lt;/span&gt;.&lt;br /&gt;&lt;pre&gt;
using System;
using NStl;
 
namespace NstlExamples
{
    class Program
    {
        static void Main()
        {
            DList&amp;lt;int&amp;gt; ints = new DList&amp;lt;int&amp;gt;();
            for (int i = 0; i &amp;lt; 20; ++i)
                ints.PushBack(i);
 
            UnaryPredicate&amp;lt;int&amp;gt; equals10 = 
                Functional.Bind2nd(Functional.EqualTo&amp;lt;int&amp;gt;(), 10);
            
            DList&amp;lt;int&amp;gt;.Iterator found = 
                Algorithm.FindIf(ints.Begin(), ints.End(), equals10);
 
            if (!found.Equals(ints.End()))
                Console.WriteLine(&amp;quot;Found value: &amp;quot; + found.Value.ToString());
        }
    }
}
&lt;/pre&gt;It is possible to combine existing functors using the so called composition binders. Basically these are functors that execute a given functor and use the result as input for other functors. The following example evaluates as &lt;span class="codeInline"&gt;string&lt;/span&gt; property, converts the result to an integer and appends it to a target collection.&lt;br /&gt;&lt;pre&gt;
using System.Collections.Generic;
using NStl;
 
namespace NstlExamples
{
    class Something
    {
        public Something(string name)
        {
            this.name = name;
        }
        public string Name
        {
            get { return name; }
        }
        private readonly string name;
    }
    class Program
    {
        static void Main()
        {
            IList&amp;lt;Something&amp;gt; somethings = new List&amp;lt;Something&amp;gt;();
            for (int i = 0; i &amp;lt; 20; ++i)
                somethings.Add(new Something(i.ToString()));
 
            // ... evaluate string property
            UnaryFunction&amp;lt;Something, string&amp;gt; somethingsPropName =
                Functional.PtrFun&amp;lt;Something, string&amp;gt;(delegate(Something s) { return s.Name; });
            
            // ... convert a string to an integer
            UnaryFunction&amp;lt;string, int&amp;gt; convertToInt =
                Functional.PtrFun&amp;lt;string, int&amp;gt;(delegate(string s) { return int.Parse(s); });
 
            // ... combine both functors to convert the name property to an integer
            UnaryFunction&amp;lt;Something, int&amp;gt; somethingsName2Int =
                Functional.ComposeFGx(convertToInt, somethingsPropName);
 
            ICollection&amp;lt;int&amp;gt; namesAsInts = new LinkedList&amp;lt;int&amp;gt;();
 
            Algorithm.Transform(NstlUtil.Begin(somethings), NstlUtil.End(somethings), 
                                NstlUtil.BackInserter(namesAsInts), somethingsName2Int);
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Mon, 21 May 2007 01:34:29 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Code Examples 20070521013429A</guid></item><item><title>UPDATED WIKI: Documentation Overview</title><link>http://www.codeplex.com/nstl/Wiki/View.aspx?title=Documentation Overview&amp;version=7</link><description>&lt;div class="wikidoc"&gt;
&lt;b&gt;Documentation&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=FAQs&amp;amp;referringTitle=Documentation%20Overview"&gt;FAQs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Intro%20to%20NSTL&amp;amp;referringTitle=Documentation%20Overview"&gt;An Introduction to the concepts of the (N)STL&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/nstl/Wiki/View.aspx?title=Code%20Examples&amp;amp;referringTitle=Documentation%20Overview"&gt;Examples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="javascript:window.location.href='http://www.codeplex.com/nstl/Project/FileDownload.aspx?DownloadId=7843';"&gt;Compiled Help File&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>AndyM</author><pubDate>Sun, 04 Mar 2007 20:58:46 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Documentation Overview 20070304085846P</guid></item></channel></rss>