<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" media="screen" href="/App_Themes/default/rss.xslt"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:evnet="http://www.mscommunities.com/rssmodule/"><channel><title>Comment Feed for David LeBlanc: Inside SafeInt (Going Deep on Channel 9)</title><atom:link rel="self" type="application/rss+xml" href="http://channel9.msdn.com/shows/going+deep/david-leblanc-inside-safeint/rss/default.aspx" /><image><url>http://mschnlnine.vo.llnwd.net/d1/Dev/App_Themes/C9/images/feedimage.png</url><title>Comment Feed for David LeBlanc: Inside SafeInt (Going Deep on Channel 9)</title><link>http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/</link></image><description>David LeBlanc: Inside SafeInt</description><link>http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/</link><language>en-us</language><pubDate>Wed, 23 Sep 2009 04:15:27 GMT</pubDate><lastBuildDate>Wed, 23 Sep 2009 04:15:27 GMT</lastBuildDate><generator>EvNet (EvNet, Version=1.0.3608.3122, Culture=neutral, PublicKeyToken=null)</generator><item><title>Re: David LeBlanc: Inside SafeInt</title><description>&lt;p&gt;Oh - I forgot to edit a couple of things - the suggested approach adds up to 5 clocks, not 6, which makes it 2.5x slower, not 3x.&lt;/p&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=493742</link><pubDate>Wed, 23 Sep 2009 04:15:30 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=493742</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/493742/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Oh - I forgot to edit a couple of things - the suggested approach adds up to 5 clocks, not 6, which makes it 2.5x slower, not 3x.</evnet:previewtext><dc:creator>David LeBlanc</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/493742/Trackback.aspx</trackback:ping></item><item><title>Re: David LeBlanc: Inside SafeInt</title><description>&lt;p&gt;Interesting question. I am not as good with perf as I would like, but in a situation like this, we're essentially counting instructions. Here's how it breaks down:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Method 1 (suggested) (11 instructions) 32-bit, not optimized&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; unsigned char tmp = (unsigned char)i;&lt;br /&gt;009A143E&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; al,byte ptr [i] &lt;br /&gt;009A1441&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte ptr [tmp],al &lt;br /&gt;&amp;nbsp;&amp;nbsp; if(tmp != i)&lt;br /&gt;009A1444&amp;nbsp; movzx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,byte ptr [tmp] &lt;br /&gt;009A1448&amp;nbsp; cmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,dword ptr [i] &lt;br /&gt;009A144B&amp;nbsp; je&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IntToUchar2+31h (9A1451h) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br /&gt;009A144D&amp;nbsp; xor&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; al,al &lt;br /&gt;009A144F&amp;nbsp; jmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IntToUchar2+3Bh (9A145Bh) &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; uc = (unsigned char)i;&lt;br /&gt;009A1451&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,dword ptr [uc] &lt;br /&gt;009A1454&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cl,byte ptr [i] &lt;br /&gt;009A1457&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte ptr [eax],cl &lt;br /&gt;&amp;nbsp;&amp;nbsp; return true;&lt;br /&gt;009A1459&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; al,1 &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Method 2 (original) (10 instructions)&lt;br /&gt;&amp;nbsp;&amp;nbsp; if(i &amp;lt; 0 || i &amp;gt; 255)&lt;br /&gt;009A13DE&amp;nbsp; cmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dword ptr [i],0 &lt;br /&gt;009A13E2&amp;nbsp; jl&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IntToUchar+2Dh (9A13EDh) &lt;br /&gt;009A13E4&amp;nbsp; cmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dword ptr [i],0FFh &lt;br /&gt;009A13EB&amp;nbsp; jle&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IntToUchar+31h (9A13F1h) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br /&gt;009A13ED&amp;nbsp; xor&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; al,al &lt;br /&gt;009A13EF&amp;nbsp; jmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IntToUchar+3Bh (9A13FBh) &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; uc = (unsigned char)i;&lt;br /&gt;009A13F1&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,dword ptr [uc] &lt;br /&gt;009A13F4&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cl,byte ptr [i] &lt;br /&gt;009A13F7&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte ptr [eax],cl &lt;br /&gt;&amp;nbsp;&amp;nbsp; return true;&lt;br /&gt;009A13F9&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; al,1 &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Suggested method in release build:&lt;/p&gt;
&lt;p&gt;01041050 0F B6 C8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; movzx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecx,al&amp;nbsp; (3 clock)&lt;br /&gt;01041053 3B C8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecx,eax&amp;nbsp; (1 clock)&lt;br /&gt;01041055 75 03&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jne&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main+5Ah (104105Ah) (1 clock)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Current method in release build:&lt;/p&gt;
&lt;p&gt;01041018 3D FF 00 00 00&amp;nbsp;&amp;nbsp; cmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,0FFh (1 clock)&lt;br /&gt;0104101D 77 06&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ja&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main+25h (1041025h)&amp;nbsp; (1 clock)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I also checked this in 64-bit, and it is the same instructions. In the suggested approach, we have an extra movzx, and it consumes a register, which would tend to cause surrounding code to optimize less efficiently on x86 (probably negligble on x64, but same effect). Due to the movzx being expensive (relative to cmp), the suggested approach is 6 cycles to the current approach's 2 cycles, or 3x worse. If the surrounding code were register constrained, as x86 often is, then you might need to push something on the stack to free a register, which would be more overhead.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To be fair, I chalk this up to pure, blind luck. While I did try to write the code to be as efficient as possible, readability and correctness were of higher importance. It is entirely possible that other operations may not be as efficient as possible. I think I did try to avoid temporary variables where possible, for just this reason, though in some cases it couldn't be avoided, and the effect would often be diluted by how expensive large multiplication and division operations are.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A large chunk of work that has not yet been done is to take all 64 combinations for each and every operation type and see exactly how they optimize, and dink with it to see if it can be better. As an aside, we considered using intrinsics for x64 multiplication, which would have been a lot faster, but decided not to in this release due to schedule constraints.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In addition, unless you happened to be using SafeInt inside of a rendering engine, or something else where a couple of cycles matter, a couple of cycles here and there are not going to add up to anything, considering that an allocation could cost several 10's of thousands of cycles, loading a COM object is much, much bigger, and so on.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks for the question - I got to learn a bit about assembly that I didn't know before today.&lt;/p&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=493741</link><pubDate>Wed, 23 Sep 2009 04:07:22 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=493741</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/493741/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Interesting question. I am not as good with perf as I would like, but in a situation like this, we're essentially counting instructions. Here's how it breaks down:
&amp;nbsp;
Method 1 (suggested) (11 instructions) 32-bit, not optimized
&amp;nbsp;&amp;nbsp; unsigned char tmp = (unsigned char)i;009A143E&amp;nbsp;&amp;#8230;</evnet:previewtext><dc:creator>David LeBlanc</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/493741/Trackback.aspx</trackback:ping></item><item><title>Re: David LeBlanc: Inside SafeInt</title><description>&lt;p&gt;Nice video! It is a bit of a pity so many people are moving away C++ just when we are finding out how powerful it really is. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;One question about the code though: &lt;/p&gt;
&lt;p&gt;When casting from a large signed type to a smaller type (int to unsigned char), SafeInt now does a two-sided compare. Why not cast the int to a uchar, and check if its the same when cast again to an int? That's one if statement less. Should be smaller and&amp;nbsp;a tiny bit faster. &lt;/p&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=489291</link><pubDate>Wed, 02 Sep 2009 20:50:03 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=489291</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/489291/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Nice video! It is a bit of a pity so many people are moving away C++ just when we are finding out how powerful it really is. 
&amp;nbsp;
One question about the code though: 
When casting from a large signed type to a smaller type (int to unsigned char), SafeInt now does a two-sided compare. Why not cast&amp;#8230;</evnet:previewtext><dc:creator>jan.devaan</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/489291/Trackback.aspx</trackback:ping></item><item><title>Re: Re: Re: David LeBlanc: Inside SafeInt</title><description>&lt;p&gt;Ale, thanks a&amp;nbsp;ton for the pointers! Now I have to read them :)&lt;/p&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=475075</link><pubDate>Tue, 23 Jun 2009 02:52:34 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=475075</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/475075/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Ale, thanks a&amp;nbsp;ton for the pointers! Now I have to read them :)</evnet:previewtext><dc:creator>sokhaty</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/475075/Trackback.aspx</trackback:ping></item><item><title>Re: Re: David LeBlanc: Inside SafeInt</title><description>&lt;p&gt;Hi sokhaty,&lt;/p&gt;
&lt;p&gt;A&amp;nbsp;book I really like on C++ templates is: C++ Templates: The Complete Guide (Hardcover), by David Vandevoorde, Nicolai M. Josuttis&lt;/p&gt;
&lt;p&gt;Also, the classic Effective STL, by Scott Meyers is another great book.&lt;/p&gt;
&lt;p&gt;David also suggests: STL Tutorial and Reference Guide, by David R. Musser, Gillmer J. Derge, Atul Saini.&lt;/p&gt;
&lt;p&gt;HTH, and glad you liked the video! :-)&lt;/p&gt;
&lt;p&gt;Ale Contenti&lt;br /&gt;VC++ Dev Lead.&lt;/p&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=474671</link><pubDate>Sat, 20 Jun 2009 01:00:11 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=474671</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/474671/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Hi sokhaty,
A&amp;nbsp;book I really like on C++ templates is: C++ Templates: The Complete Guide (Hardcover), by David Vandevoorde, Nicolai M. Josuttis
Also, the classic Effective STL, by Scott Meyers is another great book.
David also suggests: STL Tutorial and Reference Guide, by David R. Musser,&amp;#8230;</evnet:previewtext><dc:creator>alecont</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/474671/Trackback.aspx</trackback:ping></item><item><title>Re: David LeBlanc: Inside SafeInt</title><description>&lt;p&gt;Ah, wonders of computing. Ideas are simple, yet 90+% of all the&amp;nbsp;implementation work&amp;nbsp;is about discovering and handling all the border cases :)&lt;/p&gt;
&lt;p&gt;Btw, what were those&amp;nbsp;(two?) good books mentioned in passing on the subject of partial template specialization (a.k.a. template meta programming)?&lt;/p&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=474375</link><pubDate>Thu, 18 Jun 2009 18:53:52 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=474375</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/474375/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Ah, wonders of computing. Ideas are simple, yet 90+% of all the&amp;nbsp;implementation work&amp;nbsp;is about discovering and handling all the border cases :)
Btw, what were those&amp;nbsp;(two?) good books mentioned in passing on the subject of partial template specialization (a.k.a. template meta programming)?</evnet:previewtext><dc:creator>sokhaty</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/474375/Trackback.aspx</trackback:ping></item><item><title>Re: David LeBlanc: Inside SafeInt</title><description>&lt;p&gt;Nice interview! I love these kind of things :)&lt;/p&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=474343</link><pubDate>Thu, 18 Jun 2009 16:20:17 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=474343</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/474343/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Nice interview! I love these kind of things :)</evnet:previewtext><dc:creator>Christian Liensberger</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/474343/Trackback.aspx</trackback:ping></item><item><title>Re: David LeBlanc: Inside SafeInt</title><description>&lt;p&gt;Another really interesting C++ video, thank you Charles! This class is really useful and beautifully written. I'll definitely start using it from now on in my projects as it&amp;nbsp;is very easy to update&amp;nbsp;existing code to take advantage&amp;nbsp;of the&amp;nbsp;features this class provides.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The C++ world is decidedly full of surprises, I'm looking forward for more C/C++ videos!&lt;/p&gt;
&lt;p&gt;By the way, I'd love to see more videos&amp;nbsp;going deep into some&amp;nbsp;win32 stuff. There have been some&amp;nbsp;interesting changes&amp;nbsp;in these APIs during the last few years, and some new APIs will be included in Windows Seven (Web Service, Direct2D, etc.).&lt;/p&gt;</description><comments></comments><link>http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=474164</link><pubDate>Wed, 17 Jun 2009 12:33:10 GMT</pubDate><guid isPermaLink="false">http://channel9.msdn.com/shows/Going+Deep/David-LeBlanc-Inside-SafeInt/?CommentID=474164</guid><evnet:views>0</evnet:views><evnet:viewtrackingurl>http://channel9.msdn.com/474164/WebViewBug.aspx?EVT=0</evnet:viewtrackingurl><evnet:previewtext>Another really interesting C++ video, thank you Charles! This class is really useful and beautifully written. I'll definitely start using it from now on in my projects as it&amp;nbsp;is very easy to update&amp;nbsp;existing code to take advantage&amp;nbsp;of the&amp;nbsp;features this class provides.&amp;nbsp;
The C++&amp;#8230;</evnet:previewtext><dc:creator>LordKain</dc:creator><slash:comments>0</slash:comments><wfw:commentRss></wfw:commentRss><trackback:ping>http://channel9.msdn.com/474164/Trackback.aspx</trackback:ping></item></channel></rss>