tag:blogger.com,1999:blog-19040152156734603162024-02-21T06:33:16.080+02:00James Saunders' BlogA Blog about whatever I think needs to be blogged about, including books, travel, tech and plans, with the occasional comic.James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.comBlogger83125tag:blogger.com,1999:blog-1904015215673460316.post-3367235259923920872011-05-02T13:04:00.000+02:002011-05-02T13:04:12.126+02:00All there is to know about Osama Bin Laden<div dir="ltr" style="text-align: left;" trbidi="on">
<span class="Apple-style-span" style="border-collapse: collapse;"></span><br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit;"><b>All There Is To Know About <s>Adolph Eichmann</s> Osama Bin Laden</b></span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-style-span" style="font-family: 'Times New Roman';"><br /></span></span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">EYES Medium</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">HAIR Medium</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">WEIGHT Medium</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">HEIGHT Medium</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">DISTINGUISHING FEATURES None</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">NUMBER OF FINGERS Ten</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">NUMBER OF TOES Ten</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">INTELLIGENCE Medium</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<br /></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit;">What did you expect?</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit;">Talons?</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit;">Oversize Incisors?</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit;">Green saliva?</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit;">Madness?</span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit;"><br /></span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit;"><i>(Poem by <a href="http://en.wikipedia.org/wiki/Leonard_Cohen">Leonard Cohen</a>)</i></span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit;"><br /></span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-family: inherit;">Lest we forget.</span></div>
</div>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-46376676076037997792011-05-02T09:29:00.003+02:002011-05-02T09:35:22.742+02:00Watching the world wake up<div dir="ltr" style="text-align: left;" trbidi="on">
<span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"></span><br />
<div>
I'm sitting here at my little metal café table in my flat, looking out my window. It's 7:37 and I have been sitting here sipping tea for about an hour just watching the world wake up and unfold. I had forgotten how peaceful the early morning is. It's been so long since I saw one. It's a time of day I have always loved, even if it is one I am rarely awake for. I have always enjoyed the slow metamorphosis that unfolds. </div>
<div>
<br /></div>
<div>
It starts as the dead of night, quiet. All of the revelry has been sedated, all of the shop lights are off and the clubs are closed. The streets are completely empty. The only movement is the occasional flicker of the yellow street lights. The first signs of morning are dually the faint glow on the horizon signalling the slow advance of the sun and the sluggish movements of the first delivery trucks doing their pre-dawn rounds. The slow meander of the trucks seems to made even slower in the pre-dawn haze, as if the light itself is viscous and the minimal traffic has to push through it, as if through the ether. </div>
<div>
<br /></div>
<div>
The first taxi's signal the start of the human activity. One taxi, maybe two go by, still sedately. There aren't any people on the roads yet, so there are no shouts, no aggressive competition. With no other cars to avoid or out manoeuvre even the taxi's seem peaceful. The few passengers that disembark move quickly out of sight, into their stores to set things up for the coming days.</div>
<div>
<br /></div>
<div>
It's at this point where the light is becoming strong enough to over power the street lights, but they will stay on for another few minutes. This leaves an image of a world on the cusp of transition. The lights appear as the last guardians of the peace of night from the impending chaos of the day. </div>
<div>
<br /></div>
<div>
I can see the first cars now, proper cars, private vehicles. The side walks are still empty though, save for the occasional ex-taxi passenger. It's going to be a cloudy day, the clouds have blocked the glare of the sunrise leaving the landscape tinged with a blue-grey hue. I think it'll be a calm day. The city seems to have absorbed the weather, settling into its rhythm. But it will slowly speed up, just like the clouds will slowly burn off.</div>
<div>
<br /></div>
<div>
I hear my alarm clock go off, it is time for me to wake up. It is time for the day to begin. </div>
</div>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-16613534288889263372011-04-29T19:57:00.000+02:002011-04-29T19:57:51.897+02:00Road signs I wish I would see<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyMhqE830p6KTvAXUsknvNdigR21kpQu7oa5nhYAnfU-MjnAREvdU3wJ7G1fCl7CAroSROZ9X_7NoB5UOlqRPKuMmxrZEMaTv0WvJwSMK7jIr2-BH31OMxkps7gHOsRzgj89dKzB7CaaU/s1600/zombie-sign.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="425" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyMhqE830p6KTvAXUsknvNdigR21kpQu7oa5nhYAnfU-MjnAREvdU3wJ7G1fCl7CAroSROZ9X_7NoB5UOlqRPKuMmxrZEMaTv0WvJwSMK7jIr2-BH31OMxkps7gHOsRzgj89dKzB7CaaU/s640/zombie-sign.jpg" width="640" /></a></div>
<br /></div>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-24251042365757091622011-04-25T16:19:00.000+02:002011-04-25T16:19:49.486+02:00The Jolly Exclusive Whisky Society Website<div dir="ltr" style="text-align: left;" trbidi="on">
The gentlemen of the <i>The Jolly Exclusive Whisky Society</i> have commissioned a website. It can be seen here at <a href="http://www.whiskysociety.co.za/">http://www.whiskysociety.co.za</a>. </div>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-60549350514284782712011-03-18T05:22:00.000+02:002011-03-18T05:22:53.772+02:00dumb_ptr, a smart_ptr conversion class in C++ (only for programmers)<div dir="ltr" style="text-align: left;" trbidi="on">
<b>Everyone reading this who is not a programmer, </b><br />
<b><span class="Apple-style-span" style="font-size: large;"><span class="Apple-style-span" style="color: red;">STOP READING NOW!!</span></span></b><br />
Seriously this post will make no sense to you, do something you will enjoy like going swimming. For those who are programmers this may interest you.<br />
<br />
I have been using a lot of different boost smart pointers lately, as well as normal pointers. I have noticed that as you develop you tend to realise that you have to switch pointer types and memory management mechanism because you overlooks some circular dependency or some othe small annoying thing. When this happens and you change your pointer type you have to either go and change a whole bunch of you method signatures to take the new pointer type, or at each call site you have to convert between pointer types. You also have a problem if you have the same function but want it to take multiple pointer types.<br />
<br />
I was wondering if there already existed a generic way to deal with this, i.e. write methods that are agnostic of the pointer type you pass to it?
<br />
<div>
The obvious answer is write all your simple methods (methods that don't manipulate ownership of the pointer and don't return it to anything) to take raw pointers (T*) or references (T&) as parameters. But this still means that you have to write code at each call site to extract the raw pointer, and if you change the type of smart pointers you are using then you have to change code at every call site. That's a hassle, I like to avoid hassles.<br />
<br />
You could also overload your methods for different pointer types, but thats a huge waste of time and makes the more code difficult to read. Another way is to use a template style solution with some type inference, but this would cause some significant bloat in the compiled code and is likely to start throwing strange unsolvable template errors.<br />
<br />
My idea was to write a new class any_ptr<T> with conversion constructors from all the major pointer types, say, T*, shared_ptr<T>, auto_ptr<T>, scoped_ptr<T> and weak_ptr<T>and then have it expose the * and -> operators. In this way it could be used in any function that does not return the pointer outside of the function and could be called with any combination of common pointer types.<br />
<br />
The class ended up being really simple, here it is:</div>
<div>
<span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px;"></span><br />
<pre class="lang-c prettyprint" style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; vertical-align: baseline; width: auto;"><span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px;"><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">template</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">typename</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> T</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">class</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> dumb_ptr </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">public</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
dumb_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">const</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> dumb_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">T</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">&</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> dm_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">dm_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">.</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
dumb_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">T</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
dumb_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">const</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> boost</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">::</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">shared_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">T</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">&</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> sh_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">sh_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">.</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">get</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">())</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
dumb_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">const</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> boost</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">::</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">weak_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">T</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">&</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> wk_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">wk_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">.</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">lock</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">().</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">get</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">())</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
dumb_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">const</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> boost</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">::</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">scoped_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">T</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">&</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> sc_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">sc_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">.</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">get</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">())</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
dumb_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">const</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> std</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">::</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">auto_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">T</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">&</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> au_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">au_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">.</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">get</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">())</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
T</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">&</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">operator</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*()</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">return</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
T </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">operator</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">->()</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">return</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">operator</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> T</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*()</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">return</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">private</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
dumb_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">()</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
dumb_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">T</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">operator</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=(</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">const</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> dumb_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">T</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">&</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> x</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
T</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> raw_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">};</span></code></span></pre>
<span class="Apple-style-span" style="border-collapse: collapse; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px;">
</span></div>
<div>
<br /></div>
<div>
It can convert from the common smart pointers automatically and can be treated as a raw T* pointer, further it can be converted automatically to a T*. The default constructor and the assignment operator (=) have been hidden to deter people from using it for anything other than function arguments. When used as a function argument the following can be done.</div>
<div>
<br />
<pre class="lang-c prettyprint" style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-collapse: collapse; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; vertical-align: baseline; width: auto;"><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">void</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> some_fn</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">dumb_ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">A</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
B </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">-></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">b</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
A a </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
A</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">*</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> raw </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">==</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">raw</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
ptr</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">+</span><span class="lit" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">1</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">;</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-size: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span></code></pre>
<div>
<br /></div>
Which is pretty much everything you would want to do with a pointer. It has the exact same semantics as a raw pointer T*. But now it can be used with any smart pointer as the parameter without having to repeat the conversion code (.get,.lock) at each call site. Also if you change your smart pointers you don't have to go around fixing each call site.<br />
<br />
So I think this is a pretty neat solution. The idea and most of the content for this post come from a <a href="http://stackoverflow.com/questions/5325471/">Stackoverflow question</a> I asked, where I presented this idea and asked if anyone saw any major problems with it. The answering parties didn't think much of it, but I think they missed the point (No offence intended) . The point is that it should be less of a hassle to program, even in languages like C++.<br />
<br />
Well that's it, I hope someone finds it useful</div>
</div>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com3tag:blogger.com,1999:blog-1904015215673460316.post-71870743407332139752011-03-13T16:28:00.000+02:002011-03-13T16:28:18.636+02:00Counting your way out of hell<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN4P0wAFBxlLuJCHyP90g0xhZydYwOHn8k-rsqLnUfaChNzkVrLaLOuylu8EYIvq7Bwz2N9yf45bxAD_vygaLlAMjH-EVkkMsT_6l6TC5JLtPRRz47devo_8COCZQ15oPRdNP6Qmq6jz8/s1600/waits-devil.jpg" imageanchor="1" style="clear:right; float:right; margin-left:1em; margin-bottom:1em"><img border="0" height="320" width="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN4P0wAFBxlLuJCHyP90g0xhZydYwOHn8k-rsqLnUfaChNzkVrLaLOuylu8EYIvq7Bwz2N9yf45bxAD_vygaLlAMjH-EVkkMsT_6l6TC5JLtPRRz47devo_8COCZQ15oPRdNP6Qmq6jz8/s320/waits-devil.jpg" /><br/>Tom Waits as your tormenting Devil</a>
</div>
<p>
Today I have some riddles and games for you. The game is called <strong>counting your way out of hell</strong> and involves a simple a little story. You have died and been banished to hell for the many transgressions you have committed during your life (such as <a href=http://www.biblegateway.com/passage/?search=Leviticus+19:19&version=KJV">this</a> or <a href="http://www.biblegateway.com/passage/?search=Leviticus+19:27&version=KJV">this</a>). In any case Satan (played by <a href="http://en.wikipedia.org/wiki/Tom_Waits">Tom Waits</a>) offers you a way out. He proposes a challenge (said in a classic Waitsian drawl):
<blockquote><strong>
I'm gonna think of a number, it's gonna be positive whole number like 1,2,3 or 57823. It can be as big as I want. Now you have to guess what it is, but you have as many guesses as you want.
</strong></blockquote>
So you think to yourself, this is a pretty sweet deal. Since you have been damned for all eternity you have time for quite a few guesses. So how do you do it?
</p>
<p>
So this is an easy one. I'm sure you've figured it out. So you start at 1, and the 2, 3, 4 and so on. And you know that eventually you are gonna get there. It may take a long time but eventually you'll get there, and you do. The Devil is marginally impressed and stroking his pointy beard proposes a slightly more difficult challenge:
<blockquote><strong>
So now I'm gonna think of another number, this time it can be positive or negative. Same rules, you get as many guess as you want.
</strong></blockquote>
This one's a bit more difficult. If you try your original strategy and Old Nick guesses a negative number you are never gonna get there. But with just a simple modification you figure it out. If you follow every positive guess with a negative one then you get there, something like 1,-1,2,-2,3,-3 and so on. Once again whatever the number is you are guaranteed to eventually guess it.
</p>
<p>
Satan grins, knowing that he has just been warming you up. He gives his final challenge:
<blockquote><strong>
This time I'm going to think of a fraction. It can be any positive fraction, proper or improper (i.e. <sup>1</sup>⁄<sub>4</sub> or <sup>7</sup>⁄<sub>3</sub>). You get as many guesses as you want. If you guess the right number then you get go to back to your life.
</strong></blockquote>
Now this one is tricky, and it takes a bit of thought. Think about it for a few minutes.
</p>
<p>
There are a couple of (wrong) ways you could try this. You could try every simple fraction with a numerator of 1, something like <sup>1</sup>⁄<sub>1</sub>, <sup>1</sup>⁄<sub>2</sub>, <sup>1</sup>⁄<sub>3</sub>, <sup>1</sup>⁄<sub>4</sub> and so on. But then if the Devil guesses <sup>2</sup>⁄<sub>3</sub> you are never gonna guess it and you'll be spending all of eternity in the fiery abyss. Similarly if you pick any other single Numerator (the top number in a fraction) or Denominator (the bottom number in a fraction) and try all of possibilities. However, there is a way.
</p>
<p>
Imagine the fractions on a grid, with the one axis being all the denominators and the other being all the numerators, such as the one shown below. Then all you have to do is count them off on each diagonal starting at the top left corner. Below is a little animation of this system for numerators and denominators between 1 and 9. Click the "Go!" Button to start it.
</p>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
var cn = cn || {}
cn.step = function(){
td=$("#cantor tr:nth-child("+(cn.row+1)+") td:nth-child("+(cn.col+1)+")")
td.css("background-color","#369")
if (1==cn.row) {
cn.row = cn.col+1
cn.col = 1
} else {
cn.col+=1
cn.row-=1
}
if (cn.row>cn.width)
try { clearInterval(cn.interval) } catch(err){}
}
cn.init = function() {
cn.width = 9
cn.table = $("#cantor")
for (row = 0;row<cn.width+1;row++) {
cn.table.append("<tr/>")
}
tr = $("#cantor tr:nth-child(1+1n)")
tr.append("<th/>")
for (col = 0;col<cn.width;col++) {
tr.append("<td/>")
}
$("#cantor tr:first td").remove()
tr = $("#cantor tr:first")
for (row = 0;row<cn.width;row++) {
tr.append("<th/>")
}
for (row = 1;row<=cn.width;row++) {
$("#cantor tr:first>th:nth-child("+(row+1)+")").text(""+row)
$("#cantor tr:nth-child("+(row+1)+")>th:first").text(""+row)
for (col = 1;col<=cn.width;col++) {
td = $("#cantor tr:nth-child("+(row+1)+") td:nth-child("+(col+1)+")")
td.html("<sup>"+row+"</sup>⁄<sub>"+col+"</sub>")
td.width(td.height())
}
}
$('#cn-reset').click(cn.reset)
}
cn.reset = function() {
$("#cantor tr:nth-child(1+n) td:nth-child(1+n)").css("background-color","white")
cn.row = 1
cn.col = 1
try { clearInterval(cn.interval) } catch(err){}
cn.interval = setInterval("cn.step()",500)
}
$(document).ready(cn.init)
</script>
<div style="margin:0 auto; width:300px;">
<table style="font-family:monospace; text-align:center; margin:0 auto;">
<tr><td/><th>Denominators</th></tr>
<tr>
<th>N</br>u</br>m</br>e</br>r</br>a</br>t</br>o</br>r</br>s</th>
<td><table id="cantor" style="border: solid 1px grey;"></table></td>
</tr>
</table>
<button id="cn-reset">Go!</button>
</div>
<p>
It should be clear that if you continued this pattern for long enough you would eventually reach any fraction. Realising this you eventually guess the correct fraction (and really no matter how long it takes you it's a lot shorter than eternity). Reluctantly the Devil has to let you go, strangely the Devil seems bound by verbal contracts just like everyone else. And that's how you count your way out of hell.
</p>
<p>
Mathematically this is all possible because <a href="http://en.wikipedia.org/wiki/Natural_number">Natural Numbers</a>, <a href="http://en.wikipedia.org/wiki/Integer">Integers</a> and <a href="http://en.wikipedia.org/wiki/Rational_number">Rational Numbers</a>(Fractions) are all <a href="http://en.wikipedia.org/wiki/Countable_set">Countable</a>. What this essentially means is that you can create a system (a bijection technically) that can assign a Natural Number (1,2,3,etc.) to each and every Integer and Rational Number. With Integers it was pretty obvious how to do it but with the Rational Numbers the system explained above is called a <a href="http://en.wikipedia.org/wiki/Cantor_pairing_function">Cantor Pairing</a>, after the Mathematician <a>Georg Cantor</a>.
</p>
<p>
Countability is an important concept when we want to talk about the size of infinitely large sets. There are an infinite amount of Natural Numbers and Real Numbers, but in some sense we feel that there should be "more" Real Numbers than Natural Numbers. To define this idea we use the idea of countability. In some sense we say that the infinite amount of Natural Numbers is the same as the infinite amount of Integers and is also the same as the infinite amount of Rational Numbers - they are all countable. However, we can prove that the Real Numbers are not countable (which I will not show here, but has a simple elegant proof you can look up <a href="http://en.wikipedia.org/wiki/Cantor%27s_diagonal_argument">here</a>), they are uncountable and strictly larger than than a countable set. The fact that Rational Numbers are countable is surprising since in between 0 and 1 there are infinitely many Rational Numbers, yet despite that we consider the set of all Natural Numbers and the set of all Rational Numbers to be the same size.
</p>
<p>
Cantor's pairing function can be seen as a way of encoding two numbers into one number, which you can see if you consider a fraction <sup>a</sup>⁄<sub>b</sub> to just be a pair of numbers (a,b). The function can easily be extended to encode any amount of numbers, for example (a,b,c). It can even be used to encode tuples where you don't know the length by first encoding the length of the tuple and then encoding the the tuple in a single number and then taking the cantor pairing of those. The consequence of this is that a surprisingly large amount of sets turn out to be countable. For example:
<ul>
<li>Rational Numbers</li>
<li>Polynomials</li>
<li>Algebraic numbers</li>
<li>All polygons with integers length sides (I'm guessing on this but it seems obvious)</li>
<li>All Computer programs</li>
</ul>
Because we can number all these things we can use them much more easily in proofs, and we sometimes make very surprising relations between one and the other.
</p>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-39076883871851154282011-02-28T18:10:00.002+02:002011-03-30T17:42:09.535+02:00Thought Factory - A friend's new blog<div dir="ltr" style="text-align: left;" trbidi="on">
A friend of mine, Camaren, has started a blog, <a href="http://thoughtfactory-cam.blogspot.com/">Thought Factory</a>, that those interested in<br />
<blockquote>
"Thoughts on the new millenium; people, politics,economics, environment and technology. What kind of world do we live in and where is it leading to?"</blockquote>
should check out. The posts a well thought out and offer more analysis than the usual blogger fair of just splurging out whatever you have seen on the news. The latest posts have followed the middle east obviously and offer a good review of whats been happening as well as contextualizing some of the events more broadly.</div>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-87400761740930530572011-02-28T18:01:00.001+02:002011-02-28T18:47:03.795+02:00Post-Oedipul remembrance<div dir="ltr" style="text-align: left;" trbidi="on">
Today I was reminded by the <a href="http://www.thedailymaverick.co.za/">Daily Maverick</a> how swift we are to re-imagine our past to appease our consciences. Talking about Libya in this case they point that its about as <a href="http://www.thedailymaverick.co.za/article/2011-02-28-shades-of-apartheid-libyans-and-many-others-struggle-to-justify-past-gaddafi-support">hard to find a person that supported the Gaddafi regime</a> as it is to find a person that voted for the National Party government during apartheid. The great re-visioning of personal histories that acts as the precursor to greater rewriting of the past has begun in earnest all through the middle east. We've seen this many times before, an obvious example being the claims of ignorance of the Nazi population with regard to the holocaust. Soon it will true that everyone was secretly working against Gaddafi, and those that supported him were only doing so out of fear. Perhaps this reinvention of the past is a requirement to move on, a type of survivalist double-think that we need to live with what many people should feel as overwhelming guilt. This sort of thinking is no stranger to South Africa.<br />
<br />
I have no desire to see anger fester, and I hope that their will be a swift reconciliation of the middle east with out to many Salem style witch hunts. But still the inevitable and willful destruction of the truth bothers me. I am reminded of a great line from <i><a href="http://en.wikipedia.org/wiki/The_Unbearable_Lightness_of_Being">The unbearable lightness of being</a> </i>(actually i stole this line form the movie, but i am sure its the same). It is not exactly relevant but touches on somethign I am feeling. It is the protagonist Tomas talking about the former Czech leaders:<br />
<blockquote>
"I've been thinking about Oedipus. Good King Oedipus. When Oedipus realized that he had killed his father- unknowingly, unknowingly killed his father - and was sleeping with his mother and that because of his crime plagues were ravaging his city, he couldn't bear the sight of what he'd done.He plucked out his own eyes and left.He did not feel innocent.He felt he had to punish himself.</blockquote>
<blockquote>
But our leaders, unlike Oedipus, they felt they were innocent. And when the atrocities of the Stalinist period became known,they cried,"We didn't know! We weren't aware of what was going on. Our conscience is clear". </blockquote>
<blockquote>
But the important difference is they stayed in power. And they should have plucked their eyes out. All I'm saying is that morality has changed since Oedipus." </blockquote>
</div>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-30493224546045414552011-02-15T17:12:00.000+02:002011-02-18T01:15:59.412+02:00The Barnsley fern<p>So I am getting into my masters again. Which means I have lots of time to distract myself with pointless side projects. Hence we are delving again into the wonderful world of fractals. This time the fractals is called the <a href="http://en.wikipedia.org/wiki/Barnsley_fern">Barnsley Fern</a>. It's also a very famous fractal (as far as fractals can be famous. I don't think its famous like Tom Cruise. But how could a lowly mathematical object compete with the crown prince of Scientology).
</p>
<p>The fractal, unsurprisingly, looks like a fern plant, or rather a leaf of a fern. Like many fractals it is made up of smaller versions of itself that have been scaled and rotated. It is also an infinitely complex object. If you had the computational power then in theory you could zoom into any part of it and find infinitely many copies of itself.
</p>
<p>So here it is. It is set to keep drawing in more detail. To start it from scratch again click the redraw button.</p>
<div>
<canvas id="bf" width="450" height="450" style="border:solid 1px black;"></canvas>
</div>
<button id="bf-reset" type="button">Redraw</button>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
var bf = bf || {}
bf.point = function(x,y){p={};p.x=x;p.y=y;return p}
bf.co = [
{"a":0,"b":0,"c":0,"d":0.16,"e":0,"f":0,"p":0.01},
{"a":0.85,"b":0.04,"c":-0.04,"d":0.85,"e":0,"f":1.6,"p":0.85},
{"a":0.2,"b":-0.26,"c":0.23,"d":0.22,"e":0,"f":1.6,"p":0.07},
{"a":-0.15,"b":0.28,"c":0.26,"d":0.24,"e":0,"f":0.44,"p":0.07}
]
bf.transform = function(p,co) {
nx = co.a*p.x+co.b*p.y+co.e
ny = co.c*p.x+co.d*p.y+co.f
return bf.point(nx,ny)
}
bf.draw = function()
{
var canvas = document.getElementById("bf")
var ctx = canvas.getContext("2d")
var done = true
for(x=0;x<50;x++){
ctx.fillStyle = "rgba("+0+",255,"+0+", 0.5)"
ctx.beginPath()
ctx.arc(bf.width/2+bf.p.x*40, bf.height-bf.p.y*40, 0.6, 0, Math.PI*2, true)
ctx.closePath()
ctx.fill()
r = Math.random()
cumprob = 0
t=0
for (i = 0;i<4;i++) {
cumprob+=bf.co[i].p
if(r<cumprob) {
t=i
break
}
}
bf.op = bf.p
bf.p = bf.transform(p,bf.co[t])
bf.c++
}
}
bf.init = function()
{
width = $('#bf').width()
height = $('#bf').height()
bf.width = width
bf.height = height
$('#bf-reset').click(bf.reset)
bf.reset()
}
bf.reset = function()
{
var canvas = document.getElementById("bf")
var ctx = canvas.getContext("2d")
ctx.fillStyle = "rgba(0, 0, 0, 1)"
ctx.fillRect(0, 0, bf.width, bf.height)
bf.p = bf.point(0.0,0.0)
bf.op = bf.p
bf.c = 0
try { clearInterval(bf.interval) } catch(err){}
bf.interval = setInterval("bf.draw()",1)
}
$(document).ready(bf.init)
</script>
<p>This fractal was discovered by <a href="http://en.wikipedia.org/wiki/Michael_Barnsley">Michael Barnsley</a> who was really into fractals. It is an example of a Iterated Function System(IFS). The interesting thing about it (which you can see in the animation) is that it is drawn one point at a time, and that how this point moves around is randomly chosen. But never the less it always draws the same picture. The <a href="http://en.wikipedia.org/wiki/Barnsley_fern">Wikipedia article</a> has a reasonably detailed explanation of how it is constructed (which really is simple). Check it out if you are interested.</p>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-11600940561107337462010-12-18T17:17:00.000+02:002010-12-18T17:17:38.761+02:00Mumbai risingMumbai is massive. That's really the best way to describe it. Its spans endlessly in seemingly all directions. Getting your bearings seems impossible. The scale of the place compounded with the traffic mean that getting from one side of town to the other can easily take 2 or 3 hours. And the traffic, it almost defies description. I know that the traffic in India is renowned, but it really lives up to its reputation. A South African driving here would break down crying in about the first city block, thank fully I had a driver (thank you Paramin) and so had the luxury of being a fairly passive observer. The roads are a constant melee. It does not matter the time of day or night, there is a gridlock. Trucks and Buses vie for position with auto-rickshaws and scooters. The auto-rickshaws flock down the roads like huge beetles, they are really something to see.<br />
<br />
What appeared to me at first to be complete chaos I later realised was the only workable system for traffic of this nature. The rule seems to be, take any opportunity you have (no matter how slight), but be constantly conscious that everyone else is trying to do the same. Thus if some one else has gotten there first you give up and let them through, its kind of like having right of way being set as whoever has there nose in front first. The maneuvers are death defying. Three lane roads can easily have five lanes of vehicles on them, all of different and varying size. To make a three point turn in the middle of this traffic is a completely valid maneuver. If construction barriers are too close to your car its fine to stick your hand out and push them away. But its strangely nonthreatening, perhaps I don't so easily, but the system just seems to flow. This stop start bump and bash seems to have a logic and life of its own. <br />
<br />
The motorbikes are incredible. Families of three (or even four) jet down the road, all on a little Hero Honda 125cc. They weave through traffic with a reckless abandon, deftly avoiding certain collisions with buses and cars. The roads are full of pretty young women straddling the back of a bike holding onto their boyfriends or husbands in front, and older women behind there husbands. These women sit side saddle because they are wearing Saree's, and modesty (I think) stops them from holding onto the rider in front, so instead they just hold onto the seat they are on. No matter how sharp the turn or sudden a maneuver they never seem to to be anything but perfectly upright on the bike. It is like there is some invisible gravity that makes sure they just float along in perfect unison with the bike beneath then. It is an almost eerie sight.<br />
<br />
The skyline is impressive. In all directions there are towering constructions of new residential towers or massive office blocks, all 50+ stories high. From my previous apartments (I am now in New Delhi) window I could see 10 of these huge towers within a few blocks, some are still being built but none of them are more than 3 years old. It is as if the city can no longer grow out (since it is on a peninsula) and the continual massive growth of the Indian economy is driving it up out of the ground.<br />
<br />
The most striking thing about Mumbai though is the is the tangible sense of ambition. It electrifies the air, along with the scramble to survive. All the young men walk around in collared shirts, good pants and (ironically) leather shoes. They look like fields or accountants (though most of them I think work in call centers). It is so important to them to look successful and to constantly work to improve their position in life. Where western advertisers try to sell the idea of "cool", here they try to sell the idea of "success". You can see it on TV, on billboards and in the shops. The driving ambition permeates everything. Perhaps this is what America used to feel like when everyone started striving towards the American dream? In any case it is a monumentally powerful force, with a huge, young, educated workforce this ambitious it is no wonder that India grows year on year. It is an almost humbling realisation. <br />
<br />
I wonder what Mumbai will look like in 20 years? it has the potential to become a beautiful city, right now the private spaces are exquisitely maintained but almost all the public spaces a dirty and broken. The obvious wealth of the city juxtaposed against the dirt and poverty is not strange for a person coming from South Africa, but is far more immediate a contrast. But perhaps the rising wealth will uplift the public areas, clean the streets, repaint the disastrously dirty old walls of old apartments (which are very nice inside). Right now Mumbai needs a bit of photo-shopping, but its electric will to succeed is irrepressible. This cannot but be one of the cities of the future.James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com1tag:blogger.com,1999:blog-1904015215673460316.post-85924613957171551342010-11-15T17:56:00.001+02:002011-02-14T17:17:20.485+02:00Why I hate C++I was doing some C++ work today, as I do. Everything was going fine, I was making good progress. I had just recompiled, but when I ran this is the error message I got.<br />
<br />
<div style="background-color: black; color: green; font-family: monospace; margin: 5px;">
ideaengine: /usr/include/boost/variant/detail/visitation_impl.hpp:203: typename Visitor::result_type boost::detail::variant::visitation_impl(int, int, Visitor&, VPCV, mpl_::true_, NBF, W*, S*) [with W = boost::detail::variant::visitation_impl(int, int, Visitor&, VoidPtrCV, mpl_::false_, NoBackupFlag, Which*, step0*) [with Which = boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>::internal_apply_visitor_impl(int, int, Visitor&, VoidPtrCV) [with Visitor = boost::detail::variant::copy_into, VoidPtrCV = const void*, T0_ = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, T1 = boost::recursive_wrapper<std::vector<json_spirit::Pair_impl<json_spirit::Config_vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::allocator<json_spirit::Pair_impl<json_spirit::Config_vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, T2 = boost::recursive_wrapper<std::vector<json_spirit::Value_impl<json_spirit::Config_vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::allocator<json_spirit::Value_impl<json_spirit::Config_vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >, T3 = bool, T4 = long long int, T5 = double, T6 = boost::detail::variant::void_, T7 = boost::detail::variant::void_, T8 = boost::detail::variant::void_, T9 = boost::detail::variant::void_, T10 = boost::detail::variant::void_, T11 = boost::detail::variant::void_, T12 = boost::detail::variant::void_, T13 = boost::detail::variant::void_, T14 = boost::detail::variant::void_, T15 = boost::detail::variant::void_, T16 = boost::detail::variant::void_, T17 = boost::detail::variant::void_, T18 = boost::detail::variant::void_, T19 = boost::detail::variant::void_]::first_which, step0 = boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>::internal_apply_visitor_impl(int, int, Visitor&, VoidPtrCV) [with Visitor = ....
</div>
Now what the hell are you meant to do with that. Its ridiculous.James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com2tag:blogger.com,1999:blog-1904015215673460316.post-7748219318223270172010-11-15T00:58:00.001+02:002010-11-15T00:59:00.998+02:00Its wiki-charity time again.<p>
<a style="margin:0px 10px; float:right;" href="http://wikimediafoundation.org/wiki/Support_Wikipedia/en"><img border="0" alt="Support Wikipedia" src="http://upload.wikimedia.org/wikipedia/commons/2/26/Fundraising_2009-square-thanks-en.png" /></a>
Its that time of the year the again. By which I mean its Wikipedia donation time again. I doubt anyone reading this doesn't frequently use Wikipedia. I know its made an enormous contribution to my life (and help me pass a maths degree). So I've donated a little, you should to.</p>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com1tag:blogger.com,1999:blog-1904015215673460316.post-61314637280906834802010-09-22T00:42:00.000+02:002010-09-22T00:42:45.815+02:00The Splitting Spira Mirablis<p>
Here is another spiral tree related post. This time I have used a logarithmic spiral, also known as the <i><a href="http://en.wikipedia.org/wiki/Logarithmic_spiral">Spira Mirablis</a></i> (Latin for the Miraculous Spiral).
</p>
<p>
This spiral appears in many places in nature and has a variety of interesting geometric properties. It was deeply studied by <a href="http://en.wikipedia.org/wiki/Jacob_Bernoulli">Jacob Bernoulli</a>. He was infatuated with it to the point that he wanted it engraved on his tombstone along with the phrase "Eadem mutata resurgo" ("Although changed, I shall arise the same."). Unfortunately, the engraver put the wrong type of spiral on his tombstone.
</p>
<canvas id="sm" width="450" height="450" style="border:solid 1px black;"></canvas>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
var sm = sm || {}
point = function(x,y){p={};p.x=x;p.y=y;return p}
sm.draw = function()
{
var canvas = document.getElementById("sm")
var ctx = canvas.getContext("2d")
var done = true
for(si in sm.spirals)
{
var spiral = sm.spirals[si]
var t = spiral.t
var steps = spiral.steps
var r = Math.pow(Math.E,sm.b*steps)
var cr = r/16
if (steps>0.7)
{
done = false
spiral.steps = steps - 0.02
spiral.t = t-spiral.sign * 0.02
var x = spiral.cx+r*Math.cos((t+spiral.offset))
var y = spiral.cy+r*Math.sin((t+spiral.offset))
if(Math.random()<0.011)
{
var nspir= {}
nspir.t = spiral.t
nspir.steps = spiral.steps
nspir.cx = x + (x - spiral.cx)
nspir.cy = y + (y - spiral.cy)
nspir.offset = spiral.offset+Math.PI
nspir.sign = spiral.sign*-1
sm.spirals.push(nspir)
}
ctx.fillStyle = "rgba(255, 255, 220, 1)"
ctx.fillStyle = "rgba(255,"+Math.ceil(500*(sm.max-steps)/sm.max)+", 0, 1)"
ctx.beginPath()
ctx.arc(x-5, y-5, cr, 0, Math.PI*2, true)
ctx.closePath()
ctx.fill()
}
}
if (done)
{
clearInterval(sm.interval)
sm.reset()
}
}
sm.init = function()
{
width = $('#sm').width()
height = $('#sm').height()
sm.width = width
sm.height = height
var canvas = document.getElementById("sm")
var ctx = canvas.getContext("2d")
ctx.fillStyle = "rgba(0, 0, 0, 1)"
ctx.fillRect(0, 0, sm.width, sm.height)
sm.reset()
}
sm.reset = function()
{
var canvas = document.getElementById("sm")
var ctx = canvas.getContext("2d")
ctx.fillStyle = "rgba(0, 0, 0, 0.7)"
sm.max = Math.PI*2*2
sm.b = Math.log(width/2)/sm.max
ctx.fillRect(0, 0, sm.width, sm.height)
sm.spirals= []
sm.spirals[0] = {}
sm.spirals[0].t = sm.max
sm.spirals[0].steps = sm.spirals[0].t
sm.spirals[0].cx = sm.width/2+15
sm.spirals[0].cy = sm.height/3*2
sm.spirals[0].offset = 0
sm.spirals[0].sign = 1
try { clearInterval(sm.interval) } catch(err){}
sm.interval = setInterval("sm.draw()",10)
}
$(document).ready(sm.init)
</script>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com1tag:blogger.com,1999:blog-1904015215673460316.post-64575401733169060422010-09-20T19:49:00.001+02:002010-09-20T19:54:16.045+02:00South Park meI stumbled upon this awesome little flash widget at <a href="http://www.sp-studio.de/">http://www.sp-studio.de/</a>. Its a south park character creator. So I decided to make a south park me. I present south park James.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjhVdOwwPpjgwvTFgcQu0TniRRDtTJMU40-X_Ik2ZgVQiGMq7pniL05FL5xL_Xz99tdBhpoOBR8Y4m5oalRSuwQUu-DiU6cHkg7iNeb_hR141ssyTHi2dJFUGIwh5GvSb0TfC-9tnfe-g/s1600/Screenshot-1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjhVdOwwPpjgwvTFgcQu0TniRRDtTJMU40-X_Ik2ZgVQiGMq7pniL05FL5xL_Xz99tdBhpoOBR8Y4m5oalRSuwQUu-DiU6cHkg7iNeb_hR141ssyTHi2dJFUGIwh5GvSb0TfC-9tnfe-g/s320/Screenshot-1.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><b>South Park James</b></td></tr>
</tbody></table>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-5013470025567802752010-09-10T15:27:00.002+02:002010-09-11T12:43:12.064+02:00Spiral Trees and Tim Burton's Forest<p>
A friend sent me the link to the MIT OpenCourseWare site for a 2007 summer school session on <a href="http://ocw.mit.edu/high-school/courses/godel-escher-bach/">Gödel, Escher, Bach: A Mental Space Odyssey</a>. I looked at the images section and saw <a href="http://ocw.mit.edu/high-school/courses/godel-escher-bach/image-gallery">these</a> cool pictures (obviously from somewhere in the book that I haven't gotten to yet). So I decided to recreate them (though using a different type of spiral).
</p>
<p>
Below you will see the animation. I have made it in 2 modes, one that creates the hypnotic spiral trees and an altered form that creates haunting trees that remind me of <a href="www.imdb.com/title/tt0107688/">Tim Burton's Nightmare Before Christmas</a>. Check it out and if you are interested I will explain the mathematics below.
</p>
<canvas id="st" width="450" height="450" style="border:solid 1px black;"></canvas>
<div>
<input type="radio" value="n" checked="True" name="st-mode"/>Normal Mode<br/>
<input type="radio" value="t" name="st-mode"/>Tim Burton Mode<br/>
</div>
<p> So the basic spiral tree works recursively in the following manner: It starts tracing out a spiral starting from the outside going to the center. At each point it has a random chance of splitting. When a split occurs a new spiral with the same radius is created, the center of this spiral is the reflection of the previous center through the point where the split occurs and the spiral is made to rotate in the opposite direction. This continues with each new spiral, in a process that is reminiscent of the L-Systems I have blogged about before.
</p>
<p>
The normal spiral I have used is a quadratic spiral, in that if the angle of rotation of a point in the spiral is θ then the radius is r=θ<sup>2</sup>. I believe the spirals used in the original text are logarithmic spirals (r=e<sup>θ</sup>), which are mathematically more interesting but visually took up too much of the limited space available.
</p>
<p>
For the Tim Burton style trees I generalized the notion of a spiral and allowed a non-monotonic relationship between angle and radius. I instead made the relationship proportional to sin(5θ)*θ<sup>2</sup>. which gives it the distinctive kinks but still retains a smooth profile (since the function is differentiable).
</p>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" >
var st = st || {}
point = function(x,y){p={};p.x=x;p.y=y;return p}
st.draw = function()
{
var canvas = document.getElementById("st")
var ctx = canvas.getContext("2d")
var done = true
for(si in st.spirals)
{
var spiral = st.spirals[si]
var t = spiral.t
var steps = spiral.steps
var r = Math.pow(steps,2)
var cr = r/8
if (st.mode == "t")
{
r = (Math.sin(steps*5)/15+1)*r//st.a*Math.pow(Math.E,st.b*st.t)
}
if (steps>0.5)
{
done = false
spiral.steps = steps - 0.05
spiral.t = t-spiral.sign*0.05
var x = spiral.cx+r*Math.cos((t+spiral.offset))
var y = spiral.cy+r*Math.sin((t+spiral.offset))
if( steps<(st.max-Math.PI/2) && ((st.first_branch && Math.random()<0.1) || (r>40 && Math.random()<0.025)))
{
st.first_branch =false
var nspir= {}
nspir.t = spiral.t
nspir.steps = spiral.steps
nspir.cx = x + (x - spiral.cx)
nspir.cy = y + (y - spiral.cy)
nspir.offset = spiral.offset+Math.PI
nspir.sign = spiral.sign*-1
st.spirals.push(nspir)
}
ctx.fillStyle = "rgba(255, 255, 220, 1)"
ctx.beginPath()
ctx.arc(x-5, y-5, cr, 0, Math.PI*2, true)
ctx.closePath()
ctx.fill()
}
}
if (done)
{
clearInterval(st.interval)
st.reset()
}
}
st.init = function()
{
width = $('#st').width()
height = $('#st').height()
st.width = width
st.height = height
var canvas = document.getElementById("st")
var ctx = canvas.getContext("2d")
ctx.fillStyle = "rgba(0, 0, 0, 1)"
ctx.fillRect(0, 0, st.width, st.height)
st.reset()
}
st.reset = function()
{
var canvas = document.getElementById("st")
var ctx = canvas.getContext("2d")
ctx.fillStyle = "rgba(0, 0, 0, 0.7)"
st.mode = $("input[@name='st-mode']:checked").val()
st.max = Math.PI*2*2
st.first_branch =true
ctx.fillRect(0, 0, st.width, st.height)
st.spirals= []
st.spirals[0] = {}
st.spirals[0].t = st.max
st.spirals[0].steps = st.spirals[0].t
st.spirals[0].cx = 150
st.spirals[0].cy = 300
st.spirals[0].offset = Math.PI/2
st.spirals[0].sign = 1
try { clearInterval(st.interval) } catch(err){}
st.interval = setInterval("st.draw()",10)
}
$(document).ready(st.init)
</script>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-89717220361324718282010-09-01T20:24:00.000+02:002010-09-01T20:24:37.698+02:00Exploring L-Systems<p>
Another day, another dog. Another month, another piece of dangerous productivity avoided. This month I am avoided furthering my life goals by starting to read <a href="http://www.amazon.co.uk/Godel-Escher-Bach-Eternal-anniversary/dp/0140289208">Godel, Escher, Bach"</a>, which is an awesome book. It deals with a remarkable amount of things, including <a href="http://en.wikipedia.org/wiki/Formal_system">formal logical systems</a>. This got me delving into string manipulation systems again and somehow got me onto L-Systems.
</p>
<p>
L-Systems were developed by this theoretical botanist (yes such a thing exists) to codify plant growth. Later they were taken up by mathematicians to visualise and generate a variety of interesting recursive geometric patterns. Lately they have been used extensively to generate artificial life in computer science, especially tree like entities.
</p>
<p>
L-Systems are a string rewriting system. basically they take a string of characters, and then create a new string by replacing each old character with a new string, according to some rules. This continues and iterates creating increasingly more complicated and intricate strings of characters. These characters can then be interpreted by drawing program to make beautiful patterns. You can read more about L-Systems at the <a href="http://en.wikipedia.org/wiki/L-system">Wikipedia Article</a>, I don't want to get bogged down in the details, I want to look at some cool patterns.
</p>
<p>
Below is an L-System generator I built. You can explore the different possibilities of L Systems. The string grammar is as follows:
<ul>
<li>Capital Letter: Draw a line forward</li>
<li>Small Letter: Do nothing</li>
<li>+: Turn right</li>
<li>-: Turn left</li>
<li>[:Save position to stack</li>
<li>]:load previously saved position from stack</li>
</ul>
The rules are defined in a simple way, for example "x->y" means replace every "x" with a "y". You can change a whole bunch of settings about how the drawing system interprets the strings in the settings below. This is a bit of a rushed explanation, but you can find lots of info online that should help you out. There is also a list of interesting presets at the bottom of this post, check them out, play around, leave any interesting rules you find in the comments.
</p>
<canvas id="ls-canvas" width="460" height="460" style="border:solid 1px black;"></canvas>
<table style="width:460px;">
<tr>
<td>Axiom:</td>
<td><input type="text" value="x" id="ls-axiom" class="ls-input" style="border:solid 1px black; width:100%;"/></td>
</tr>
<tr>
<td>Rule:</td>
<td>
<textarea id="ls-rules" rows="4" class="ls-input" style="width:100%; padding:0;">
x->F-[[x]+x]+F[+Fx]-x
F->FF
</textarea>
</td>
</tr>
<tr>
<td>Number of Generations:</td>
<td><input type="text" value="7" id="ls-gen" class="ls-gen" style="border:solid 1px black; width:3em;"/></td>
</tr>
<tr>
<td>Starting Point:</td>
<td>(<input type="text" value="0" id="ls-x" class="ls-input" style="border:solid 1px black; width:3em;"/>,
<input type="text" value="0" id="ls-y" class="ls-input" style="border:solid 1px black; width:3em;"/>)</td>
</tr>
<tr>
<td>Starting Angle:</td>
<td><input type="text" value="-60" id="ls-a" class="ls-input" style="border:solid 1px black; width:3em;"/></td>
</tr>
<tr>
<td>Turn Angle:</td>
<td><input type="text" value="25" id="ls-da" class="ls-input" style="border:solid 1px black; width:3em;"/></td>
</tr>
<tr>
<td>Movement Size:</td>
<td><input type="text" value="3" id="ls-d" class="ls-input" style="border:solid 1px black; width:3em;"/></td>
</tr>
<tr>
<td><button id="redraw">Redraw</button></td>
<td></td>
</tr>
</table>
<div id="ls-presets" style="width:460px">
<h4>Interesting Examples</h4>
</div>
<div id="ls-output"></div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
var lsys = lsys || {}
lsys.init = function()
{
$('#redraw').click(lsys.start)
presets = {}
lsys.presets = presets
presets["Snowflake"] = {"a":-90,
"da":60,
"d":3,
"x":50,
"y":50,
"gen":7,
"axiom":"z++z++z",
"rules":["z->[x][y]","x->F-[[x]+x]+F-[x]+x","y->F+[[y]-y]-F+[y]-y","F->FF"]}
presets["Koch Snowflake"] = {"a":0,
"da":45,
"d":5,
"x":20,
"y":80,
"gen":4,
"axiom":"F++F++F++F",
"rules":["F->F-F++F-F"]}
presets["Square Koch Curve"] = {"a":180,
"da":90,
"d":5,
"x":100,
"y":0,
"gen":5,
"axiom":"F",
"rules":["F->F+F-F-F+F"]}
presets["Weed"] = {"a":-60,
"da":25,
"d":1,
"x":0,
"y":20,
"gen":8,
"axiom":"x",
"rules":["x->F-[[x]+x]+F[+Fx]-x","F->FF"]}
presets["Bush"] = {"a":-90,
"da":25,
"d":4,
"x":50,
"y":0,
"gen":6,
"axiom":"F",
"rules":["F -> FF-[-F+F+F]+[+F-F-F]"]}
presets["Dragon Curve"] = {"a":180,
"da":90,
"d":1,
"x":70,
"y":50,
"gen":18,
"axiom":"Fx",
"rules":["x->x+yF+","y->-Fx-y"]}
for(var p in presets)
{
var link = $('<button name="'+p+'">'+p+"</button>")
$('#ls-presets').append(link)
$('#ls-presets').append("<br/>")
var key = p
link.click(function(){ lsys.load_preset($(this).attr("name"));lsys.start();})
}
lsys.load_preset("Snowflake")
}
lsys.load_preset = function(key)
{
p = lsys.presets[key]
$("#ls-gen").attr("value",p["gen"])
$("#ls-a").attr("value",p["a"])
$("#ls-da").attr("value",p["da"])
$("#ls-d").attr("value",p["d"])
$("#ls-x").attr("value",p["x"])
$("#ls-y").attr("value",p["y"])
$("#ls-axiom").attr("value",p["axiom"])
$("#ls-rules").val("")
for (var i in p["rules"])
{
$("#ls-rules").val($("#ls-rules").val()+p["rules"][i]+"\n")
}
}
lsys.writeln = function(str)
{
$('#ls-output').append(str+"<br/>")
}
lsys.start = function()
{
$('#ls-output').html("")
lsys.current = ""
var rules = $.trim($("#ls-rules").val()).split("\n")
lsys.rules = []
for (var r in rules)
{
var rule = rules[r]
lsys.rules.push([$.trim(rule.split("->")[0]),$.trim(rule.split("->")[1])])
}
lsys.gen = 0
lsys.max_gen = parseInt($("#ls-gen").attr("value"))
lsys.a = parseInt($("#ls-a").attr("value"))
lsys.da = parseInt($("#ls-da").attr("value"))
lsys.d = parseInt($("#ls-d").attr("value"))
lsys.x = $("#ls-canvas").width()*parseInt($("#ls-x").attr("value"))/100
lsys.y = $("#ls-canvas").height() -$("#ls-canvas").height()*parseInt($("#ls-y").attr("value"))/100
try
{
clearInterval(lsys.interval)
}
catch(err){}
lsys.interval = setInterval("lsys.step()",300)
}
lsys.draw = function(ls)
{
var canvas = document.getElementById("ls-canvas")
var ctx = canvas.getContext("2d")
var stack = []
var x = lsys.x
var y = lsys.y
var a = lsys.a
var d = lsys.d
var d_div = 1
var da=lsys.da
function push()
{
stack.push({"x":x,"y":y,"a":a,"d":d})
}
function pop()
{
if (stack.length>0)
{
var top = stack.pop()
x = top.x
y = top.y
a = top.a
d = top.d
}
}
function move()
{
nx = x + d*Math.cos(a/180*Math.PI)
ny = y + d*Math.sin(a/180*Math.PI)
ctx.moveTo(nx,ny)
x = nx
y = ny
d/=d_div
}
function line()
{
nx = x + d*Math.cos(a/180*Math.PI)
ny = y + d*Math.sin(a/180*Math.PI)
ctx.beginPath()
ctx.moveTo(x,y)
ctx.lineTo(nx,ny)
ctx.stroke()
x = nx
y = ny
d/=d_div
}
function left()
{
a-=da
}
function right()
{
a+=da
}
ctx.fillStyle="rgb(255,255,255)"
ctx.fillRect(0,0,$("#ls-canvas").width(),$("#ls-canvas").height())
for(var i = 0;i<ls.length;i++)
{
var c = ls.charAt(i)
if(c=='[')
{
push()
}
else if (c==']')
{
pop()
}
else if (c=='+')
{
right()
}
else if (c=='-')
{
left()
}
else if (c==c.toUpperCase())
{
line()
}
else if (c==c.toLowerCase())
{
}
}
}
lsys.evolve = function(old)
{
var next = ""
for (var i=0;i<old.length;i++)
{
var c = old[i]
var matched = false
for (var r in lsys.rules)
{
var rule = lsys.rules[r]
if(!matched && c==rule[0])
{
matched = true
next=next+rule[1]
}
}
if (!matched)
{
next=next+c
}
}
return next
}
lsys.step = function()
{
if (lsys.gen==0)
{
lsys.current = $("#ls-axiom").attr("value")
}
else
{
lsys.current = lsys.evolve(lsys.current)
}
//lsys.writeln(lsys.current)
lsys.draw(lsys.current)
lsys.gen++
if (lsys.gen>=lsys.max_gen)
{
clearInterval(lsys.interval)
}
}
$(document).ready(lsys.init)
</script>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com8tag:blogger.com,1999:blog-1904015215673460316.post-39076154222553995422010-08-20T19:24:00.003+02:002010-08-20T21:07:00.784+02:00Fractals folding out new lands<p>
In keeping with my apparent intense dislike of doing anything constructive (like say my work or my masters), here is another fractal image. This one a bit different from the others in that it is mathematically much simpler and its construction is animated. This is called (at least by me) a divided line fractal (not to be confused with a cantor set). It is very similar to the <a href="http://en.wikipedia.org/wiki/Koch_snowflake">Koch Curve</a> but with an element of randomness that creates intricate and varied shapes that come to resemble islands or coastlines. This similarity between coast lines and fractals was one of the earliest observations by Benoît Mandelbrot, resulting in his well known paper <a href="http://en.wikipedia.org/wiki/How_Long_Is_the_Coast_of_Britain%3F_Statistical_Self-Similarity_and_Fractional_Dimension">"How Long Is the Coast of Britain?"</a>. Similar techniques are used for artificial world creation in computer simulations and games.
</p>
<p>
The fractal itself is simple to construct. Start with an initial state of two vertical lines, one from the top to the bottom and the other from the bottom to the top of the frame. The for each line take the mid point and move it to a random location around where it was, creating two new line segments. Repeat this step until all the line segments are really small.
</p>
<p>In this implementation every time a line segment is broken up the triangle that is created is filled with a translucent yellow. The resulting shape is then filled black. I like to think of the effect as looking like the world is slowly being unfolded, or fanned out from a really simple shape to complete outline</p>
<p>To draw a new shape hit the "Redraw" button. Once again this is done using the HTML5 canvas so you will need a decent browser (Chrome,Safari,Firefox,Opera) to get it to work. It also probably work work through an aggregator like Google reader or buzz since I think they disable scripting, so you will have to visit my original blog page to see it work.</p>
<div style="margin-left:auto;margin-right:auto; width:300; text-align:center;">
<canvas id="dset" width="300" height="300" style="border:solid 1px black;"></canvas>
<div>
<button id="reset-dset">Redraw</button>
</div>
</div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
var dset = dset || {}
point = function(x,y){p={};p.x=x;p.y=y;return p}
dset.draw = function()
{
var canvas = document.getElementById("dset")
var ctx = canvas.getContext("2d")
ctx.fillStyle = "rgba(255, 0, 0, 1)"
//ctx.fillRect (0, 0, dset.width, dset.height)
running = false
for (l in dset.lines)
{
line = dset.lines[l]
s = line[0]
e = line[1]
ctx.fillStyle = "rgba("+ 255 +"," +255 + "," +0*Math.floor(Math.random()*256) + ", 0.2)"
ctx.strokeStyle = ctx.fillStyle//"rgba(0, 0, 0, 1)"
ctx.lineWidth = 1
line = dset.lines[l]
s = line[0]
e = line[1]
d = Math.sqrt((s.x-e.x)*(s.x-e.x) + (s.y-e.y)*(s.y-e.y))
if(d>6)
{
d=d/2
dx = (Math.random()*2 -1)*d
dy = (Math.random()*2 -1)*d
m = point((s.x+e.x)/2,(s.y+e.y)/2)
m.x+=dx
m.y+=dy
dset.new_lines.push([s,m])
dset.new_lines.push([m,e])
running = true
ctx.beginPath()
ctx.moveTo(s.x, s.y)
ctx.lineTo(m.x, m.y)
ctx.lineTo(e.x, e.y)
ctx.closePath()
ctx.fill()
ctx.beginPath()
ctx.moveTo(s.x, s.y)
ctx.lineTo(m.x, m.y)
ctx.lineTo(e.x, e.y)
ctx.stroke()
}
else
{
ctx.beginPath()
ctx.moveTo(s.x, s.y)
ctx.lineTo(e.x, e.y)
ctx.stroke()
dset.new_lines.push([s,e])
}
}
dset.lines = dset.new_lines
dset.new_lines=[]
dset.iteration++
if(!running){
ctx.fillStyle = "rgb(0, 0, 0)"
ctx.moveTo(dset.lines[0][0].x,dset.lines[0][0].y)
for (l in dset.lines)
{
ctx.lineTo(dset.lines[l][1].x,dset.lines[l][1].y)
}
ctx.closePath()
ctx.fill()
clearInterval(dset.interval)
}
}
dset.init = function()
{
$('#reset-dset').click(dset.reset)
dset.reset()
}
dset.reset = function()
{
width = $('#dset').width()
height = $('#dset').height()
dset.width = width
dset.height = height
dset.lines = []
dset.lines[0]=[point(width/2,0),point(width/2,height)]
dset.lines[1]=[point(width/2,height),point(width/2,0)]
dset.new_lines=[]
dset.iteration = 0
var canvas = document.getElementById("dset")
var ctx = canvas.getContext("2d")
ctx.fillStyle = "rgba(255, 0, 0, 1)"
ctx.fillRect (0, 0, dset.width, dset.height)
dset.interval = setInterval("dset.draw()",100)
}
$(document).ready(dset.init)
</script>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com1tag:blogger.com,1999:blog-1904015215673460316.post-70005934712472416482010-06-05T16:17:00.002+02:002010-08-20T20:59:03.332+02:00Julia sets and more fractals<p>
Following on from my last post on the <a href="http://james-saunders.blogspot.com/2010/06/mandlebrot-set.html">Mandelbrot set</a> I've created a <a href="http://en.wikipedia.org/wiki/Julia_set">Julia set</a> generator. Julia sets are a similar sort of fractal to the Mandelbrot set. The Julia sets I am showing are all generated using the function <i>z<sub>n+1</sub> = z<sub>n</sub><sup>2</sup>+c</i>. Thus for every possible value of c we get a different Julia set. In this viewer the Julia sets are shown in red. There are many other types, but these are the classic Julia sets that led to the development of the Mandelbrot set.
</p>
<p>
The Julia sets come in two varieties; connected and disconnected sets. Either all the points in the Julia set are connected to each other (forming a single central entity) or all the points are disconnected (forming a Cauchy set, also called Fatou dust). The Mandelbrot set is generated from this fact, basically the Mandelbrot set is all the values of <i>c</i> such that the generated Julia set. In fact the Mandelbrot set forms a pictographic index of all the connected Julia sets. If you zoom in enough into the Mandelbrot set you will eventually find a copy of every conceivable Julia set. Which is pretty cool.
</p>
<p>
Some of the Julia sets form incredibly beautiful shapes, while others can be pretty mundane, I have put a list of some interesting sets below the viewer, just click on the links and the values will load into the viewer. Otherwise please explore the space and try your own values. If you find a combination of values that looks particularly impressive please leave the values as a comment for other people to try. The instruction for use are the same as the previous Mandelbrot viewer with the addition of being able to change the values for <i>c</i> by giving the real and the imaginary parts.
</p>
<div style="margin-left:auto;margin-right:auto; width:300; text-align:center;">
<canvas id="jset" width="300" height="300" style="border:solid 1px black;"></canvas>
<table>
<tr> <td>Real: </td><td><input id="real" type="textbox" value="-0.8" ></td> </tr>
<tr> <td>Imaginary: </td><td><input id="imaginary" type="textbox" value="-0.2"></td> </tr>
<tr> <td>Precision: </td><td><input id="precision" type="textbox" value="50"></td> </table>
<button id="reset-jset">Reset</button>
</div>
<h3>
Some interesting sets</h3>
<span>Click links to load:</span>
<ul>
<li><a style="cursor:pointer;text-decoration:underline;" onclick="jset.draw_julia(-0.8,-0.1,50)">-0.8-0.1i (prec=50)</a></li>
<li><a style="cursor:pointer;text-decoration:underline;" onclick="jset.draw_julia(-0.8,-0.2,50)">-0.8-0.2i (prec=50)</a></li>
<li><a style="cursor:pointer;text-decoration:underline;" onclick="jset.draw_julia(-0.62772,0.42193,100)">-0.62772-0.42193,50i (prec=100)</a></li>
<li><a style="cursor:pointer;text-decoration:underline;" onclick="jset.draw_julia(-0.5,-0.5,30)">-0.7-0.3i (prec=100)</a></li>
<li><a style="cursor:pointer;text-decoration:underline;" onclick="jset.draw_julia(0.233,0.5378,100)">0.233+0.5378i (prec=50)</a></li>
</ul>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
var jset = jset || {}
jset.v2c = function (vx,vy)
{
var cx = jset.dx+vx/jset.zoom
var cy = jset.dy+vy/jset.zoom
return {"x":cx,"y":cy}
}
jset.c2v = function(cx,cy)
{
var vx = jset.zoom*(cx-jset.dx)
var vy = jset.zoom*(cy-jset.dy)
return {"x":vx,"y":vy}
}
jset.draw = function()
{
var canvas = document.getElementById('jset')
var ctx = canvas.getContext('2d')
var image = ctx.getImageData(0, 0, jset.canvas_width, jset.canvas_height);
var imageData = image.data
var c_r = jset.c_r
var c_i = jset.c_i
var max_esc = jset.max_esc
for( var vx = 0; vx<jset.canvas_width;vx++)
{
for( var vy = 0; vy<jset.canvas_height;vy++)
{
var p = jset.v2c(vx,vy)
var i = vy*jset.canvas_height+vx
var z = {}
z.R = p.x
z.I = p.y
var escape_radius = 16
var cnt = 0
while (z.R*z.R + z.I*z.I< escape_radius && cnt<max_esc)
{
cnt = cnt + 1
var z_n = {}
z_n.R = z.R*z.R - z.I*z.I
z_n.I = 2*z.R*z.I
z_n.R = z_n.R + c_r
z_n.I = z_n.I + c_i
z = z_n
}
var r = 0
var g = 0
var b = 0
var a = 255
if (cnt!=max_esc)
{
r = Math.round(255*cnt/max_esc)
g = 0//Math.round(255-255*cnt/max_esc)
b= Math.round(255*cnt/max_esc)
}
else
{
r = 255
}
imageData[i*4+0] = r
imageData[i*4+1] = g
imageData[i*4+2] = b
imageData[i*4+3] = a
}
}
image.data = imageData
ctx.putImageData(image, 0, 0)
}
jset.reset = function()
{
jset.max_esc = $('#precision').attr("value")*1
jset.c_r = $('#real').attr("value")*1
jset.c_i = $('#imaginary').attr("value")*1
jset.canvas_width = $('#jset').width()
jset.canvas_height = $('#jset').height()
jset.dx = -2
jset.dy = -2
jset.zoom = jset.canvas_width/4
jset.clicked = false
jset.draw()
}
jset.init = function()
{
$('#jset').mousedown(
function(evt)
{
var x = evt.pageX - this.offsetLeft
var y = evt.pageY - this.offsetTop
jset.firstClick = {}
jset.firstClick.x = x
jset.firstClick.y = y
jset.clicked = true
jset.frx = evt.pageX
jset.fry = evt.pageY
$('#select').show()
}
)
$(document).mouseup(
function(evt)
{
if (jset.clicked)
{
var x = evt.pageX - $("#jset").offset().left
var y = evt.pageY - $("#jset").offset().top
jset.secondClick = {}
jset.secondClick.x = x
jset.secondClick.y = y
jset.clicked = false
$('#select').hide()
var bl = {}
bl.x = Math.min(jset.secondClick.x,jset.firstClick.x)
bl.y = Math.min(jset.secondClick.y,jset.firstClick.y)
var tr = {}
tr.x = Math.max(jset.secondClick.x,jset.firstClick.x)
tr.y = Math.max(jset.secondClick.y,jset.firstClick.y)
var d = jset.v2c(bl.x,bl.y)
var s = jset.v2c(tr.x,tr.y)
jset.dx = d.x
jset.dy = d.y
jset.zoom = Math.min(jset.canvas_width/Math.abs(d.x-s.x),jset.canvas_height/Math.abs(d.y-s.y))
$('#select').hide()
jset.draw()
}
})
$(document).mousemove(
function(evt)
{
var x = evt.pageX-$("#jset").offset().left
var y = evt.pageY-$("#jset").offset().top
if ((x<0)||(x>jset.canvas_width)||(y<0)||(y>jset.canvas_height))
{
jset.clicked = false
$('#select').hide()
}
else
{
var x = evt.pageX
var y = evt.pageY
$('#select').css("top",Math.min(y,jset.fry))
$('#select').css("left",Math.min(x,jset.frx))
$('#select').css("height",Math.abs(jset.fry-y))
$('#select').css("width",Math.abs(jset.frx-x))
}
})
$('#reset-jset').click(jset.reset)
jset.reset()
}
$(document).ready(jset.init)
jset.draw_julia = function(c_r,c_i,prec)
{
$('#precision').attr("value",prec)
$('#real').attr("value",c_r)
$('#imaginary').attr("value",c_i)
jset.reset()
}
</script>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-63761001413563848632010-06-03T02:50:00.005+02:002010-08-22T00:33:38.738+02:00The Mandlebrot Set<p>So I have been reading allot about fractals lately (you should start with this <a href="http://www.amazon.com/Introducing-Fractals-Graphic-Nigel-Lesmoir-Gordon/dp/1848310870">cool book</a>), and of course the Everest of fractals is the <a href="http://en.wikipedia.org/wiki/Mandelbrot_set">Mandelbrot set</a>. The Mandelbrot set is (for those of your who don't know) an intriguing mathematical object, but I won't go into the math of it. Just take my word for it that this set is one of the coolest things ever discovered) Visually though it has boundary that is infinitely complicated, containing myriads of twisting patterns and curves (in fact in a sense it contains every possible curve somewhere on it boundary. You can zoom in on the curve and it will remain detailed at any level of zoom, never becoming a simple shape.
</p>
<p>
I've also been wanting to try out the <a href="http://en.wikipedia.org/wiki/Canvas_element"> HTML5 canvas</a> for a while, so I decided to make a Mandelbrot set viewer with javascript. doing something like this in a browser would have been impossible a few years ago, but now with modern browsers (this excludes Internet Explorer, sorry this wont work for you but I don't care) even computationally difficult tasks are becoming feasible using javascript.
</p>
<p>
Anyway,play around with it, maybe you get a little interested, maybe you check out some of the ideas. Maybe not.
</p>
<h3>Instructions</h3>
<ul style="color:grey;">
<li>Below is the Viewer (If you don't see a cool shape it probably doesn't work on your browser, you should upgrade).</li>
<li>You are going to want to zoom in on a specific spot on the boundary of the black object in the middle (which is the Mandelbrot set), to do this click and drag around the place you want to zoom in on.</li>
<li>Eventually when you zoom in too far the shape will get boring, this is simply because the computer only renders an approximation. You can increase the precision by increasing the precision value in the text box and pressing the reset button. The higher the precision the longer in takes to render the picture. </li>
<li>Pressing the reset button will also let you zoom all the way out and start exploring and new part of the set.</li>
</ul>
<div style="text-align:center;">
<canvas id="mset" width="300" height="300" style="border:solid 1px black;"></canvas>
<div>
Precision:
<input id="precision-mset" type="textbox" value="50"></input>
<button id="reset-mset">Reset</button>
</div>
<p>
</p>
</div>
<span id="select_off" style="background-color:green;position:absolute;opacity:0.5;display:none;"></span>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
var mset = mset || {}
mset.v2c = function (vx,vy)
{
var cx = mset.dx+vx/mset.zoom
var cy = mset.dy+vy/mset.zoom
return {"x":cx,"y":cy}
}
mset.c2v = function(cx,cy)
{
var vx = mset.zoom*(cx-mset.dx)
var vy = mset.zoom*(cy-mset.dy)
return {"x":vx,"y":vy}
}
mset.draw = function()
{
var canvas = document.getElementById('mset')
var ctx = canvas.getContext('2d')
var image = ctx.getImageData(0, 0, mset.canvas_width, mset.canvas_height);
var imageData = image.data
for( var vx = 0; vx<mset.canvas_width;vx++)
{
for( var vy = 0; vy<mset.canvas_height;vy++)
{
var p = mset.v2c(vx,vy)
p.y = 1* p.y
var i = vy*mset.canvas_height+vx
var z = {}
z.R = p.x
z.I = p.y
var cnt = 0
while (z.R*z.R + z.I*z.I < 4 && cnt<mset.max_esc)
{
cnt = cnt + 1
var z_n = {}
z_n.R = z.R*z.R - z.I*z.I
z_n.I = 2*z.R*z.I
z_n.R = z_n.R + p.x
z_n.I = z_n.I + p.y
z = z_n
}
var r = 0
var g = 0
var b = 0
var a = 255
if (cnt>=mset.max_esc)
{
r=0
}
else
{
r = 255//Math.round(255*cnt/mset.max_esc)
g = Math.round(255-255*cnt/mset.max_esc)
}
imageData[i*4+0] = r
imageData[i*4+1] = g
imageData[i*4+2] = b
imageData[i*4+3] = a
}
}
image.data = imageData
ctx.putImageData(image, 0, 0)
}
mset.reset = function()
{
mset.max_esc = $('#precision-mset').attr("value")*1
mset.canvas_width = $('#mset').width()
mset.canvas_height = $('#mset').height()
mset.dx = -2
mset.dy = -1.5
mset.zoom = 300/3
mset.clicked = false
mset.draw()
}
mset.init = function()
{
$('#mset').mousedown(
function(evt)
{
var x = evt.pageX - this.offsetLeft
var y = evt.pageY - this.offsetTop
mset.firstClick = {}
mset.firstClick.x = x
mset.firstClick.y = y
mset.clicked = true
mset.frx = evt.pageX
mset.fry = evt.pageY
$('#select').show()
}
)
$(document).mouseup(
function(evt)
{
if (mset.clicked)
{
var x = evt.pageX - $("#mset").offset().left
var y = evt.pageY - $("#mset").offset().top
mset.secondClick = {}
mset.secondClick.x = x
mset.secondClick.y = y
mset.clicked = false
$('#select').hide()
var bl = {}
bl.x = Math.min(mset.secondClick.x,mset.firstClick.x)
bl.y = Math.min(mset.secondClick.y,mset.firstClick.y)
var tr = {}
tr.x = Math.max(mset.secondClick.x,mset.firstClick.x)
tr.y = Math.max(mset.secondClick.y,mset.firstClick.y)
var d = mset.v2c(bl.x,bl.y)
var s = mset.v2c(tr.x,tr.y)
mset.dx = d.x
mset.dy = d.y
mset.zoom = Math.min(mset.canvas_width/Math.abs(d.x-s.x),mset.canvas_height/Math.abs(d.y-s.y))
$('#select').hide()
mset.draw()
}
})
$(document).mousemove(
function(evt)
{
var x = evt.pageX-$("#mset").offset().left
var y = evt.pageY-$("#mset").offset().top
if ((x<0)||(x>mset.canvas_width)||(y<0)||(y>mset.canvas_height))
{
mset.clicked = false
$('#select').hide()
}
else
{
var x = evt.pageX
var y = evt.pageY
$('#select').css("top",Math.min(y,mset.fry))
$('#select').css("left",Math.min(x,mset.frx))
$('#select').css("height",Math.abs(mset.fry-y))
$('#select').css("width",Math.abs(mset.frx-x))
}
})
$('#reset-mset').click(mset.reset)
mset.reset()
}
$(document).ready(mset.init)
</script>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com1tag:blogger.com,1999:blog-1904015215673460316.post-52993824729363311872010-05-14T01:45:00.000+02:002010-05-14T01:45:36.827+02:00A Masters Topic FinallySo as some of you probably know I have finished my masters proposal and finally have a real topic. Basically I am taking a certain type of social-ecological model used in decision making and policy planning and trying to hook them up to real time data. I'm doing this to check:<br />
<br />
<ol><li>That the models are correct</li>
<li>That the decisions made based on the models still make sense.</li>
</ol>I have a project page available <a href="http://jhsaunders.github.com/BPDA/">here</a>, which has a longer description and various useful links (like my actual proposal) for people who are more interested. I am also releasing all my source code as open-source, and releasing all my articles/thesis material under a creative commons license (more details at the project site). So go have a look, it will help you understand what I'm saying when I am ignoring you and talking to myself (come on, we all do it sometimes).James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com1tag:blogger.com,1999:blog-1904015215673460316.post-74287348212968103622010-03-05T14:54:00.002+02:002010-03-05T14:58:03.157+02:00Bring back the AirshipsToday I want to talk about a topic that is very close to my heart. Long ago in a far more civilized time, before twitter feeds and the blogosphere, yes before cellphones and even the internet, people were happy to do things slowly. And when these fine people needed to locomote their favored form of transport was the <i>Airship</i>.<br />
<br />
Airships, also known as Zeppelins or Dirigibles (From the French "diriger" to direct plus -ible, meaning "directable" or steerable) once ruled the skies. These graceful giants floated across and between continents, ferrying the most important people to there most important business with a level of luxuriating comfort unseen in modern air travel. At their height the transatlantic route between Germany and Brazil took a leisurely 68 hours, much like a weekend in a luxury hotel.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://upload.wikimedia.org/wikipedia/commons/a/a8/Uss_los_angeles_airship_over_Manhattan.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="http://upload.wikimedia.org/wikipedia/commons/a/a8/Uss_los_angeles_airship_over_Manhattan.jpg" width="320" /></a></div><div style="text-align: center;"><span class="Apple-style-span" style="font-size: small;">USS Los Angeles (ZR-3) flying over southern Manhattan Island, New York City</span></div><div style="text-align: center;"><br />
</div>Sadly, despite the elegance of these mighty beasts, the unquenchable desire of man for speed and stress coupled with the Armageddon of the world wars led to their eventual retirement from use.<br />
<br />
But I feel this is a tragedy. How can we have discarded the fair Dirigibles for such filthy a replacement as the jumbo jet? In light of this, and in the same spirit as the conservation of the Panda Bear, I propose to start a political party with the sole and express purpose of bringing back the Airship. It is my firm belief that this step will start us on an unstoppable road to a more civilized and sophisticated society.<br />
<br />
Please join me, by spreading the virtues of airships, and remember: Airships! Awesome!<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSFpRa8yh0gEY90BNjuMW_VFgSE5Kc8I3TRqqK6TiouY3JvBwqT07iuk0h-Oi4lMso08Yu-TslLGeO8ZEBkVzPoMNML5KPpMxneIe4VfKaPiUZvbyjFzimfyybVcozXjwrhAhbMjcPRCg/s1600-h/Airships.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSFpRa8yh0gEY90BNjuMW_VFgSE5Kc8I3TRqqK6TiouY3JvBwqT07iuk0h-Oi4lMso08Yu-TslLGeO8ZEBkVzPoMNML5KPpMxneIe4VfKaPiUZvbyjFzimfyybVcozXjwrhAhbMjcPRCg/s400/Airships.png" width="400" /></a></div>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-3494373954052980582010-02-25T22:46:00.000+02:002010-02-25T22:46:37.895+02:00Reveling in the awesomeness of technology.Below are two maps of down town New York. The one is an antique map (in French I think), the other is a Google earth image. I think sometimes we forget how awesome technology is. I thought we needed a reminder. I'm sure you can figure out which is which.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimWgS3-ZKbYiM77dThaz6P14a6gbXfhY4IzlcGwVH49amUkc_EywtfFKrbBq_ybGj_IpLBs347ztsGpMznPX-RBpM5v7fG36WjXrE6-KIOSpT1noeMhi9ptTO7Y6Tey4y06ZYcHhmR-K4/s1600-h/Antique_Map_Bellin_New_York.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimWgS3-ZKbYiM77dThaz6P14a6gbXfhY4IzlcGwVH49amUkc_EywtfFKrbBq_ybGj_IpLBs347ztsGpMznPX-RBpM5v7fG36WjXrE6-KIOSpT1noeMhi9ptTO7Y6Tey4y06ZYcHhmR-K4/s400/Antique_Map_Bellin_New_York.jpg" width="306" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQUkTjgvhRFp7Q2aCB_txrZNdCRmEJykYEM2X_Ba2ccy5dGj2EMVNTVRdGJNt1S6UQocffWYJ5fVo6HOOH9V34YQbrxNMlMr1LD-f2ODVxjem_Jes4gSWJ_Ii_dttd8akNde7EEEn8QbA/s1600-h/Downtown+New+york.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQUkTjgvhRFp7Q2aCB_txrZNdCRmEJykYEM2X_Ba2ccy5dGj2EMVNTVRdGJNt1S6UQocffWYJ5fVo6HOOH9V34YQbrxNMlMr1LD-f2ODVxjem_Jes4gSWJ_Ii_dttd8akNde7EEEn8QbA/s320/Downtown+New+york.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Revel.</div>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-33751605218750095562010-02-22T20:20:00.002+02:002010-02-22T20:21:49.554+02:00Eventually you get desperate<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2r8Ij6yZpS4MJ2Kh8nI5X1Rwjau0rqt3MOYU-Ym7r9sFQKAb_sIkvWUB6nkQ6Kufrx3zgPNeFns8QHUXzc24qhK6TOTMkeXTx6LYQ2QKlxrDZqqEDLtJzvxP3gxRE6i5iggJV0NWAHco/s1600-h/Political.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 399px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2r8Ij6yZpS4MJ2Kh8nI5X1Rwjau0rqt3MOYU-Ym7r9sFQKAb_sIkvWUB6nkQ6Kufrx3zgPNeFns8QHUXzc24qhK6TOTMkeXTx6LYQ2QKlxrDZqqEDLtJzvxP3gxRE6i5iggJV0NWAHco/s400/Political.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5441134587309895890" /></a><br /><div style="text-align: center;">(Click to enlarge)</div>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0tag:blogger.com,1999:blog-1904015215673460316.post-86428461108071581892010-02-16T11:41:00.004+02:002010-02-20T13:31:41.575+02:00Homage or a blatant lack creativity<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghzfr-sGxvxlP25g3GkKKL5kILVYCqdtwVOh7WqIke7VyfVjjV0hmSsV-bVtbdOoGDpqfgZl21gSi8_bxChEK-6dsh1tQO3MJUhzgpE4VqfELrytVWXtLVcjI-DUZCgoMDpGuGKVrMTOs/s1600-h/jhsFall.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 145px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghzfr-sGxvxlP25g3GkKKL5kILVYCqdtwVOh7WqIke7VyfVjjV0hmSsV-bVtbdOoGDpqfgZl21gSi8_bxChEK-6dsh1tQO3MJUhzgpE4VqfELrytVWXtLVcjI-DUZCgoMDpGuGKVrMTOs/s400/jhsFall.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5440286808168630370" /></a><div style="text-align: center;">(click for enlargement)</div>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com1tag:blogger.com,1999:blog-1904015215673460316.post-52340662058108064762009-07-08T13:02:00.002+02:002009-07-08T13:12:17.626+02:00Can You Please Crawl Out Your Window?<div id="song_details" class="details"> <h2 class="title">Can You Please Crawl Out Your Window?</h2><div style="text-align: left;">-By Bob Dylan<br /></div><br /> <div class="content"> <p>He sits in your room, his tomb, with a fist full of tacks<br />Preoccupied with his vengeance<br />Cursing the dead that can't answer him back<br />I'm sure that he has no intentions<br />Of looking your way, unless it's to say<br />That he needs you to test his inventions.</p> <p>Can you please crawl out your window?<br />Use your arms and legs it won't ruin you<br />How can you say he will haunt you?<br />You can go back to him any time you want to.</p> <p>He looks so truthful, is this how he feels<br />Trying to peel the moon and expose it<br />With his businesslike anger and his bloodhounds that kneel<br />If he needs a third eye he just grows it<br />He just needs you to talk or to hand him his chalk<br />Or pick it up after he throws it.</p> <p>Can you please crawl out your window?<br />Use your arms and legs it won't ruin you<br />How can you say he will haunt you?<br />You can go back to him any time you want to.</p> <p>Why does he look so righteous while your face is so changed<br />Are you frightened of the box you keep him in<br />While his genocide fools and his friends rearrange<br />Their religion of the little ten women<br />That backs up their views but your face is so bruised<br />Come on out the dark is beginning.</p> <p>Can you please crawl out your window?<br />Use your arms and legs it won't ruin you<br />How can you say he will haunt you?<br />You can go back to him any time you want to.</p> <p>Copyright ©1965; renewed 1993 Special Rider Music</p> </div> </div>James Saundershttp://www.blogger.com/profile/17495585190318090914noreply@blogger.com0