<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6041171495992201265</id><updated>2011-07-31T03:04:31.160+08:00</updated><category term='C++'/><category term='GeoClipmap'/><category term='Ogre3D'/><category term='工作'/><category term='ASP.NET'/><title type='text'>Technetium's notepad</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tcnote.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tcnote.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Technetium</name><uri>http://www.blogger.com/profile/05663782273037453959</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_8gzMAG4iwMc/SbQN0OT810I/AAAAAAAAEgs/942JHVP--uM/S220/bamboo_panda.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6041171495992201265.post-1739149307942040712</id><published>2009-06-20T20:37:00.012+08:00</published><updated>2009-06-20T23:55:18.327+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工作'/><title type='text'>工作</title><content type='html'>不知不覺，已經工作了三個星期了。&lt;br/&gt;

自由的環境，友好、能幹且寬容的同事，工作環境真的非常不錯！&lt;br/&gt;

至於個人的表現，不算太好吧。&lt;br/&gt;

雖然我熟悉工作上需要的技術，但還是經常犯錯。&lt;br/&gt;

特別是犯了很多小錯誤... 例如：&lt;br/&gt;

不小心攪亂SVN&lt;br/&gt;

Debug時改了些東西，Release的時候忘記了回復原狀&lt;br/&gt;

前幾天才完成的工作，工作上重要的細節，一會兒就忘記了。同事比親自完成工作的我，記得還清楚 Orz...&lt;br/&gt;

我發現我的記憶力真的不是一般的弱呀。用同事的術語來說，就是我腦内的Stack非常細，常常overflow。不知是不是嗑藥過多的後遺症？&lt;br/&gt;

在這三個星期當中，總算對遊戲開發的過程有了初步的了解。做一個好的production pipeline... 談何容易。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6041171495992201265-1739149307942040712?l=tcnote.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tcnote.blogspot.com/feeds/1739149307942040712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6041171495992201265&amp;postID=1739149307942040712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/1739149307942040712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/1739149307942040712'/><link rel='alternate' type='text/html' href='http://tcnote.blogspot.com/2009/06/blog-post.html' title='工作'/><author><name>Technetium</name><uri>http://www.blogger.com/profile/05663782273037453959</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_8gzMAG4iwMc/SbQN0OT810I/AAAAAAAAEgs/942JHVP--uM/S220/bamboo_panda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6041171495992201265.post-698460377786629262</id><published>2009-05-12T23:41:00.005+08:00</published><updated>2009-05-13T00:24:39.994+08:00</updated><title type='text'>Parameters passing between C# and C++/CLI</title><content type='html'>In C#, parameters can be pass as "ref" or "out".
&lt;br/&gt;
When writing a C++/CLI library, for the sake of interoperability, we might need to use these features in C++/CLI too.
&lt;br/&gt;
Mapping:
&lt;table border="1"&gt;
&lt;tr&gt;
  &lt;th&gt;
    C#
  &lt;/th&gt;
  &lt;th&gt;
    C++/CLI
  &lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;
    ref x
  &lt;/td&gt;
  &lt;td&gt;
    x% // Managed type reference
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;
    out x
  &lt;/td&gt;
  &lt;td&gt;
    [System::Runtime::InteropServices::Out] x %
  &lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6041171495992201265-698460377786629262?l=tcnote.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tcnote.blogspot.com/feeds/698460377786629262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6041171495992201265&amp;postID=698460377786629262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/698460377786629262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/698460377786629262'/><link rel='alternate' type='text/html' href='http://tcnote.blogspot.com/2009/05/parameters-passing-between-c-and-ccli.html' title='Parameters passing between C# and C++/CLI'/><author><name>Technetium</name><uri>http://www.blogger.com/profile/05663782273037453959</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_8gzMAG4iwMc/SbQN0OT810I/AAAAAAAAEgs/942JHVP--uM/S220/bamboo_panda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6041171495992201265.post-3961834446846153568</id><published>2009-03-10T02:12:00.007+08:00</published><updated>2009-03-10T02:35:58.614+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ogre3D'/><title type='text'>Details of how compositor works</title><content type='html'>The compositor framework hooked into the Ogre rendering pipeline by setting up a RenderTargetListener(CompositorChain).&lt;br/&gt;
It is setup when the client call CompositorManager::addCompositor() -&gt; CompositorChain::addCompositor() -&gt; "mViewport-&gt;getTarget()-&gt;addListener(this);".&lt;br/&gt;
It is responsible for registering another listener: RenderQueueListener(CompositorChain::RQListener).&lt;br/&gt;
&lt;br/&gt;
When the "renderQueueStarted" event of RenderQueueListener is fired, it executes all the render operations inside that CompositorChain.&lt;br/&gt;
Render operations are represented by the class "CompositorInstance::TargetOperation".&lt;br/&gt;
It is the abstract class. The real render operations("clear", "stencil", "quad") are based on it.&lt;br/&gt;&lt;br/&gt;
The real rendering is executed immediately when CompositorInstance::TargetOperation::execute() is called. For example, in "quad" operation, it sets up the camera, viewport, the full screen quad object, and inject it into the SceneManager and render it.&lt;br/&gt;&lt;br/&gt;
In the compositor framework, CompositorInstance is just a render operations container, which enqueues the render operations into the CompositorChain. The CompositorChain is the real important class. &lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6041171495992201265-3961834446846153568?l=tcnote.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tcnote.blogspot.com/feeds/3961834446846153568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6041171495992201265&amp;postID=3961834446846153568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/3961834446846153568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/3961834446846153568'/><link rel='alternate' type='text/html' href='http://tcnote.blogspot.com/2009/03/details-of-how-compositor-works.html' title='Details of how compositor works'/><author><name>Technetium</name><uri>http://www.blogger.com/profile/05663782273037453959</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_8gzMAG4iwMc/SbQN0OT810I/AAAAAAAAEgs/942JHVP--uM/S220/bamboo_panda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6041171495992201265.post-2558594589104011279</id><published>2009-03-09T01:52:00.020+08:00</published><updated>2009-03-09T02:41:11.999+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeoClipmap'/><title type='text'>GPU Geoclipmap screenshots</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Solid mode:&lt;/span&gt;&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8gzMAG4iwMc/SbQGlQ8NwvI/AAAAAAAAEgQ/BVJxuZgm3do/s1600-h/screenshot_1.png"&gt;
 &lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_8gzMAG4iwMc/SbQGlQ8NwvI/AAAAAAAAEgQ/BVJxuZgm3do/s320/screenshot_1.png" alt="" id="BLOGGER_PHOTO_ID_5310877097849111282" border="0" /&gt;
&lt;/a&gt;&lt;br/&gt;&lt;span style="font-style:italic;"&gt;This is Mars&lt;/span&gt;&lt;br/&gt;
&lt;br/&gt;&lt;span style="font-weight:bold;"&gt;Wire frame:&lt;/span&gt;&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_8gzMAG4iwMc/SbQGl0SzGNI/AAAAAAAAEgg/ekd9r5BZBvo/s1600-h/screenshot_3.png"&gt;
 &lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 256px;" src="http://1.bp.blogspot.com/_8gzMAG4iwMc/SbQGl0SzGNI/AAAAAAAAEgg/ekd9r5BZBvo/s320/screenshot_3.png" alt="" id="BLOGGER_PHOTO_ID_5310877107339073746" border="0" /&gt;
&lt;/a&gt;&lt;br/&gt;&lt;span style="font-style:italic;"&gt;Grids across 2 faces&lt;/span&gt;&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_8gzMAG4iwMc/SbQGlow7goI/AAAAAAAAEgY/HiKaFFHKU6A/s1600-h/screenshot_2.png"&gt;
 &lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 256px;" src="http://4.bp.blogspot.com/_8gzMAG4iwMc/SbQGlow7goI/AAAAAAAAEgY/HiKaFFHKU6A/s320/screenshot_2.png" alt="" id="BLOGGER_PHOTO_ID_5310877104244228738" border="0" /&gt;
&lt;/a&gt;&lt;br/&gt;&lt;span style="font-style:italic;"&gt;Grids across 3 faces&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;
These are the screenshots of my geoclipmap demo.&lt;br/&gt;
The algorithm is based on the rectangle geoclipmap
[&lt;a href="http://research.microsoft.com/en-us/um/people/hoppe/gpugcm.pdf"&gt;paper link&lt;/a&gt;]&lt;br/&gt;
The grid of the sphere is indeed a grid cube, which composes of 6 rectangle geoclipmap patches, and the grid cube is then projected into sphere.&lt;br/&gt;
The inter-plane cracks are eliminated by my own algorithm. It is quite simple, but it works quite well.&lt;br/&gt;
The heightmap sampling and the sphere projection are all done on GPU. Therefore it requires a SM4.0+ GPU to run it.&lt;br/&gt;
The shading of the terrain is just a simple height to color mapping. I'm going to implement a more sophisticated shading scheme later. My current focus is to get the partial texture update working, which requires some modifications on Ogre3D.&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6041171495992201265-2558594589104011279?l=tcnote.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tcnote.blogspot.com/feeds/2558594589104011279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6041171495992201265&amp;postID=2558594589104011279' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/2558594589104011279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/2558594589104011279'/><link rel='alternate' type='text/html' href='http://tcnote.blogspot.com/2009/03/gpu-geoclipmap-screenshot.html' title='GPU Geoclipmap screenshots'/><author><name>Technetium</name><uri>http://www.blogger.com/profile/05663782273037453959</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_8gzMAG4iwMc/SbQN0OT810I/AAAAAAAAEgs/942JHVP--uM/S220/bamboo_panda.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_8gzMAG4iwMc/SbQGlQ8NwvI/AAAAAAAAEgQ/BVJxuZgm3do/s72-c/screenshot_1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6041171495992201265.post-4665760510022430294</id><published>2009-03-05T12:34:00.018+08:00</published><updated>2009-03-08T04:20:30.515+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ogre3D'/><title type='text'>The flow of renderOneFrame()</title><content type='html'>Root::renderOneFrame() -&gt; Root::_updateAllRenderTargets() -&gt; RenderTarget::update() -&gt; Viewport::update() -&gt; Camera::_renderScene() -&gt; SceneManager::_renderScene()&lt;br/&gt;
&lt;br/&gt;
SceneManager::_renderScene()&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;\ -&gt;SceneManager::_findVisibleObjects()&lt;br/&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;\ -&gt;SceneManager::_renderVisibleObjects() -&gt; SceneManager::_renderQueueGroupObjects() -&gt; SceneManager::renderObjects() -&gt; SceneMgrQueuedRenderableVisitor::visit() -&gt; SceneManager::renderSingleObject()&lt;br/&gt;&lt;br/&gt;

SceneManager::_renderScene() is the real rendering function.&lt;br/&gt;
Most importantly it calls SceneManager::_findVisibleObjects(), which traversals the scene graph and adds visible object to the render queue.&lt;br/&gt;
Then, after setting up the render system (e.g. matrices, lighting, etc), real rendering is started by calling SceneManager::_renderVisibleObjects().&lt;br/&gt;
&lt;br/&gt;
SceneManager::renderSingleObject() is the real function that render a object. It setup the render states of the object. (e.g matrices, materials, shaders, vertex/index buffers)&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6041171495992201265-4665760510022430294?l=tcnote.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tcnote.blogspot.com/feeds/4665760510022430294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6041171495992201265&amp;postID=4665760510022430294' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/4665760510022430294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/4665760510022430294'/><link rel='alternate' type='text/html' href='http://tcnote.blogspot.com/2009/03/how-ogre3d-render.html' title='The flow of renderOneFrame()'/><author><name>Technetium</name><uri>http://www.blogger.com/profile/05663782273037453959</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_8gzMAG4iwMc/SbQN0OT810I/AAAAAAAAEgs/942JHVP--uM/S220/bamboo_panda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6041171495992201265.post-6689122734277938470</id><published>2007-06-05T08:12:00.021+08:00</published><updated>2009-03-08T04:12:07.099+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Adding sort direction arrow into GridView</title><content type='html'>Call this function @ RowCreated event:
&lt;pre name="code" class="brush: csharp; gutter: false; toolbar: false;"&gt;
public static void AddSortingArrow(GridView gv, GridViewRowEventArgs e)
{
  if (e.Row.RowType != DataControlRowType.Header)
    return;
  foreach (TableCell tc in e.Row.Cells)
  {
    if (tc.HasControls())
    {
      LinkButton lnk = (LinkButton)tc.Controls[0];
      if (lnk != null)
      {
        Label lbl = new Label();
        lbl.Text = (gv.SortDirection == SortDirection.Ascending ? "▲" : "▼");
        if (gv.SortExpression == lnk.CommandArgument)
        {
            lbl.Text = " " + lbl.Text;
            tc.Controls.Add(lbl);
        }
      }
    }
  }
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6041171495992201265-6689122734277938470?l=tcnote.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tcnote.blogspot.com/feeds/6689122734277938470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6041171495992201265&amp;postID=6689122734277938470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/6689122734277938470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/6689122734277938470'/><link rel='alternate' type='text/html' href='http://tcnote.blogspot.com/2007/06/adding-sort-direction-arrow-into.html' title='Adding sort direction arrow into GridView'/><author><name>Technetium</name><uri>http://www.blogger.com/profile/05663782273037453959</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_8gzMAG4iwMc/SbQN0OT810I/AAAAAAAAEgs/942JHVP--uM/S220/bamboo_panda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6041171495992201265.post-2664989972107449785</id><published>2007-05-30T12:45:00.005+08:00</published><updated>2009-03-08T04:04:40.883+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>VC simple mem leak detection code</title><content type='html'>Add these lines into header:
&lt;pre name="code" class="brush: cpp; gutter: false; toolbar: false;"&gt;
#define _CRTDBG_MAP_ALLOC
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;crtdbg.h&amp;gt;
&lt;/pre&gt;
Call this function @ entry point
&lt;pre name="code" class="brush: cpp; gutter: false; toolbar: false;"&gt;
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6041171495992201265-2664989972107449785?l=tcnote.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tcnote.blogspot.com/feeds/2664989972107449785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6041171495992201265&amp;postID=2664989972107449785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/2664989972107449785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/2664989972107449785'/><link rel='alternate' type='text/html' href='http://tcnote.blogspot.com/2007/05/vc-simple-mem-leak-detection-code.html' title='VC simple mem leak detection code'/><author><name>Technetium</name><uri>http://www.blogger.com/profile/05663782273037453959</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_8gzMAG4iwMc/SbQN0OT810I/AAAAAAAAEgs/942JHVP--uM/S220/bamboo_panda.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6041171495992201265.post-8612617551762226806</id><published>2007-05-30T08:54:00.004+08:00</published><updated>2009-03-08T04:09:40.217+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Making std::pair work as the key of hash_map in VC</title><content type='html'>Simple hack:
&lt;pre name="code" class="brush: cpp; gutter: false; toolbar: false;"&gt;
namespace stdext
{
  template&amp;lt;typename T1, typename T2&amp;gt; inline size_t hash_value(const std::pair&amp;lt;T1, T2&amp;gt;&amp;amp; _Keyval)
  {
    return hash_value(_Keyval.first) * 196613 + hash_value(_Keyval.second);
  }
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6041171495992201265-8612617551762226806?l=tcnote.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tcnote.blogspot.com/feeds/8612617551762226806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6041171495992201265&amp;postID=8612617551762226806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/8612617551762226806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6041171495992201265/posts/default/8612617551762226806'/><link rel='alternate' type='text/html' href='http://tcnote.blogspot.com/2007/05/making-stdpair-work-as-key-of-hashmap.html' title='Making std::pair work as the key of hash_map in VC'/><author><name>Technetium</name><uri>http://www.blogger.com/profile/05663782273037453959</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/_8gzMAG4iwMc/SbQN0OT810I/AAAAAAAAEgs/942JHVP--uM/S220/bamboo_panda.jpg'/></author><thr:total>0</thr:total></entry></feed>
