<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blOgo</title>
	<atom:link href="http://code-bg.com/blogo/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://code-bg.com/blogo</link>
	<description>Блога на Благо.</description>
	<lastBuildDate>Sun, 21 Apr 2013 09:41:20 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>C(++)onstructors</title>
		<link>http://code-bg.com/blogo/?p=759</link>
		<comments>http://code-bg.com/blogo/?p=759#comments</comments>
		<pubDate>Sun, 21 Apr 2013 09:41:19 +0000</pubDate>
		<dc:creator>savage309</dc:creator>
				<category><![CDATA[Професионални]]></category>

		<guid isPermaLink="false">http://code-bg.com/blogo/?p=759</guid>
		<description><![CDATA[Ето една проста С++(98) конструкция, която не рядко се бърка. Хора ползващи Java или друг език в миналото си, и С++ в настоящето си се сблъскват с това : class Foo &#123; public: Foo&#40;&#41;&#123; bar = 42; printf&#40;&#34;Foo()\n&#34;&#41;; &#125; &#160; Foo&#40;int&#41; &#123; buzz = 196; Foo&#40;&#41;; printf&#40;&#34;Foo(int); %i %i&#34;, bar, buzz&#41;; &#125; &#160; private: int [...]]]></description>
			<content:encoded><![CDATA[<p>Ето една проста С++(98) конструкция, която не рядко се бърка. Хора ползващи <strong>Java</strong> или друг език в миналото си, и <strong>С++</strong> в настоящето си се сблъскват с това :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">class Foo <span style="color: #009900;">&#123;</span>
public<span style="color: #339933;">:</span>
    Foo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
       bar <span style="color: #339933;">=</span> <span style="color: #0000dd;">42</span><span style="color: #339933;">;</span>
       <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Foo()<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    Foo<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
       buzz <span style="color: #339933;">=</span> <span style="color: #0000dd;">196</span><span style="color: #339933;">;</span>
       Foo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Foo(int); %i %i&quot;</span><span style="color: #339933;">,</span> bar<span style="color: #339933;">,</span> buzz<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
private<span style="color: #339933;">:</span>
    <span style="color: #993333;">int</span> bar<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> buzz<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    Foo foo<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">411</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>На пръв поглед това не трябва да се компилира. Имаме контруктор, който вика друг конструктор (и ползваме C++ < 11). А това не е разрешено в тази версия на езика (макар не всички да го знаят).</p>
<p>За да е тотално объркването обаче, всеки компилатор успява да го компилира без грешки.</p>
<p>Този код работи и не нарушава стандарта.<br />
Не прави обаче съвсем това, което човек би очаквал.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Foo(int); %i %i&quot;</span><span style="color: #339933;">,</span> bar<span style="color: #339933;">,</span> buzz<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//Foo(int); &lt;undefined&gt; 196</span></pre></div></div>

<p>Причината за това е, че <strong>Foo()</strong> не вика конструктора за обекта, който се конструира във <strong>Foo(int)</strong>, а създава <strong>temporary object</strong> (без име) ! </p>
<p>За по ясно, вместо <strong>Foo()</strong>; там може да пише <strong>int()</strong>; &#8230; така ще сме създали един int на стека, който както и <strong>Foo()</strong>; ще спре да съществува след като излезем от scope-а на <strong>Foo(int)</strong>. Може да стане по-ясно, ако добавим деструктор, в който има само <strong>printf</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">~Foo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;~Foo()<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Можем обаче да накараме нещата да сработят .. Ако ползваме <a href="http://en.wikipedia.org/wiki/Placement_syntax">placement new</a>, бихме могли да извикаме конструктура върху обекта, който очакваме. Ето така :</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">Foo<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    buzz <span style="color: #339933;">=</span> <span style="color: #0000dd;">196</span><span style="color: #339933;">;</span>
    new <span style="color: #009900;">&#40;</span>this<span style="color: #009900;">&#41;</span> Foo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//here be dragons</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Foo(int); %i %i&quot;</span><span style="color: #339933;">,</span> bar<span style="color: #339933;">,</span> buzz<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Показаното по-горе работи (поне в gcc, clang &#038;&#038; cl). Но не е съвсем гарантирано, че ще работи навсякъде и винаги. Добрият стар init() метод е по-подходящ тогава.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://code-bg.com/blogo/?feed=rss2&#038;p=759</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Смятай &#8230;</title>
		<link>http://code-bg.com/blogo/?p=743</link>
		<comments>http://code-bg.com/blogo/?p=743#comments</comments>
		<pubDate>Thu, 22 Nov 2012 18:57:12 +0000</pubDate>
		<dc:creator>savage309</dc:creator>
				<category><![CDATA[Професионални]]></category>

		<guid isPermaLink="false">http://code-bg.com/blogo/?p=743</guid>
		<description><![CDATA[TeraFlops, here we come.]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-bg.com/blogo/img/flops.jpg"><img class="alignnone size-medium wp-image-730" title="C++ templates" src="http://code-bg.com/blogo/img/flops.jpg" alt="" width="432" height="579" /></a><br />
TeraFlops, here we come.</p>
]]></content:encoded>
			<wfw:commentRss>http://code-bg.com/blogo/?feed=rss2&#038;p=743</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>typename Google</title>
		<link>http://code-bg.com/blogo/?p=729</link>
		<comments>http://code-bg.com/blogo/?p=729#comments</comments>
		<pubDate>Sat, 17 Nov 2012 12:47:26 +0000</pubDate>
		<dc:creator>savage309</dc:creator>
				<category><![CDATA[Професионални]]></category>

		<guid isPermaLink="false">http://code-bg.com/blogo/?p=729</guid>
		<description><![CDATA[E Google &#8230; можеше просто да споделиш че харесваш C++ meta programming &#8230; No need for harsh words, r8 &#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-bg.com/blogo/img/template.PNG"><img class="alignnone size-medium wp-image-730" title="C++ templates" src="http://code-bg.com/blogo/img/template.PNG" alt="" width="556" height="195" /></a></p>
<p>E <strong>Google</strong> &#8230; можеше просто да споделиш че харесваш <strong>C++ meta programming</strong> &#8230;<br />
No need for harsh words, r8 &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://code-bg.com/blogo/?feed=rss2&#038;p=729</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some cache misses</title>
		<link>http://code-bg.com/blogo/?p=715</link>
		<comments>http://code-bg.com/blogo/?p=715#comments</comments>
		<pubDate>Sat, 03 Nov 2012 20:34:58 +0000</pubDate>
		<dc:creator>savage309</dc:creator>
				<category><![CDATA[Професионални]]></category>

		<guid isPermaLink="false">http://code-bg.com/blogo/?p=715</guid>
		<description><![CDATA[По повод лекцията на Бярне от началото на годината, и едно леко почесване по главата по време на работа преди няколко дни на тема, лоши ли са кеш-мисовете и имат ли те почва у нас, реших днес да проверя от първа ръка Ето една проста задачка с интересни резултати Имаме масив с N целочислени числа [...]]]></description>
			<content:encoded><![CDATA[<p>По повод лекцията на Бярне от началото на годината, и едно леко почесване по главата по време на работа преди няколко дни на тема, лоши ли са кеш-мисовете и имат ли те почва у нас, реших днес да проверя от първа ръка <img src='http://code-bg.com/blogo/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ето една проста задачка с интересни резултати <img src='http://code-bg.com/blogo/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Имаме масив с N целочислени числа от 0 до N-1, записани в произволен ред.</p>
<p>Искаме да намерите i-тото от тях, да гo изтрием, но да запазим реда им.<br />
Но вместо i-тото, да вземем да изтрием всички от 0 до N-1 и да ги изтрием едно по-едно .. Питаме се каква структура от данни да ползваме, така че това да се случи най-бързо.</p>
<p>Та, обичайните кандидати .. линеен масив и свързан списък. Свързаният списък изглежда по-обещаващ, вместо да копираме всеки път, само ще меним разни поинтъри.</p>
<p>Правим тестове със std::vector, std::list, custom vector &amp;&amp; custom list (кода се намира по-долу)<br />
За да е по-къса цялата лудория, имплементирал съм само методите, които са нужни за демонстрацията (няма деструктури и т.н.). Съобщавайте ако има major грешки в коментарите по-долу.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;iostream&gt;</span>
<span style="color: #339933;">#include &lt;string&gt;</span>
<span style="color: #339933;">#include &lt;sstream&gt;</span>
<span style="color: #339933;">#include &lt;cstdlib&gt;</span>
<span style="color: #339933;">#include &lt;ctime&gt;</span>
<span style="color: #339933;">#include &lt;vector&gt;</span>
<span style="color: #339933;">#include &lt;list&gt;</span>
&nbsp;
<span style="color: #993333;">double</span> diffclock<span style="color: #009900;">&#40;</span>clock_t clock1<span style="color: #339933;">,</span>clock_t clock2<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">double</span> diffticks <span style="color: #339933;">=</span> clock1 <span style="color: #339933;">-</span> clock2<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #009900;">&#40;</span>diffticks<span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> CLOCKS_PER_SEC<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
template <span style="color: #339933;">&lt;</span>typename T<span style="color: #339933;">&gt;</span>
class List <span style="color: #009900;">&#123;</span>
public<span style="color: #339933;">:</span>
    List<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>first<span style="color: #009900;">&#40;</span>nullptr<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> last<span style="color: #009900;">&#40;</span>nullptr<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
&nbsp;
    bool empty<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #993333;">const</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> first <span style="color: #339933;">==</span> nullptr<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    bool add<span style="color: #009900;">&#40;</span>T data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Node<span style="color: #339933;">*</span> newNode <span style="color: #339933;">=</span> new Node<span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>first <span style="color: #339933;">==</span> nullptr<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            last <span style="color: #339933;">=</span> first <span style="color: #339933;">=</span> newNode<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            last<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> newNode<span style="color: #339933;">;</span>
            newNode<span style="color: #339933;">-&gt;</span>prev <span style="color: #339933;">=</span> last<span style="color: #339933;">;</span>
            newNode<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> nullptr<span style="color: #339933;">;</span>
            last <span style="color: #339933;">=</span> newNode<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    bool remove<span style="color: #009900;">&#40;</span>T data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Node<span style="color: #339933;">*</span> temp <span style="color: #339933;">=</span> first<span style="color: #339933;">;</span>
        <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>temp <span style="color: #339933;">&amp;&amp;</span> temp<span style="color: #339933;">-&gt;</span>data <span style="color: #339933;">!=</span> data<span style="color: #009900;">&#41;</span>
            temp <span style="color: #339933;">=</span> temp<span style="color: #339933;">-&gt;</span>next<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>temp<span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>temp <span style="color: #339933;">==</span> first<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            Node<span style="color: #339933;">*</span> newFirst <span style="color: #339933;">=</span> first<span style="color: #339933;">-&gt;</span>next<span style="color: #339933;">;</span>
            delete first<span style="color: #339933;">;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>newFirst<span style="color: #009900;">&#41;</span> newFirst<span style="color: #339933;">-&gt;</span>prev <span style="color: #339933;">=</span> nullptr<span style="color: #339933;">;</span>
            first <span style="color: #339933;">=</span> newFirst<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>temp <span style="color: #339933;">==</span> last<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            Node<span style="color: #339933;">*</span> newLast <span style="color: #339933;">=</span> last<span style="color: #339933;">-&gt;</span>prev<span style="color: #339933;">;</span>
            delete last<span style="color: #339933;">;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>newLast<span style="color: #009900;">&#41;</span> newLast<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> nullptr<span style="color: #339933;">;</span>
            last <span style="color: #339933;">=</span> newLast<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            Node<span style="color: #339933;">*</span> left <span style="color: #339933;">=</span> temp<span style="color: #339933;">-&gt;</span>prev<span style="color: #339933;">;</span>
            Node<span style="color: #339933;">*</span> right <span style="color: #339933;">=</span> temp<span style="color: #339933;">-&gt;</span>next<span style="color: #339933;">;</span>
            delete temp<span style="color: #339933;">;</span>
            left<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> right<span style="color: #339933;">;</span>
            right<span style="color: #339933;">-&gt;</span>prev <span style="color: #339933;">=</span> left<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
private<span style="color: #339933;">:</span>
    <span style="color: #993333;">struct</span> Node <span style="color: #009900;">&#123;</span>
        Node<span style="color: #009900;">&#40;</span>T dataRhs<span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>data<span style="color: #009900;">&#40;</span>dataRhs<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> prev<span style="color: #009900;">&#40;</span>nullptr<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> next<span style="color: #009900;">&#40;</span>nullptr<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
        T data<span style="color: #339933;">;</span>
        Node<span style="color: #339933;">*</span> prev<span style="color: #339933;">;</span>
        Node<span style="color: #339933;">*</span> next<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    Node<span style="color: #339933;">*</span> first<span style="color: #339933;">;</span>
    Node<span style="color: #339933;">*</span> last<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
template <span style="color: #339933;">&lt;</span>typename T<span style="color: #339933;">&gt;</span>
class Vector <span style="color: #009900;">&#123;</span>
public<span style="color: #339933;">:</span>
    Vector<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>ptr<span style="color: #009900;">&#40;</span>nullptr<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> index<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> maxSize<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
&nbsp;
    bool empty<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #993333;">const</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> index <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    bool reset<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> newSize<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        delete<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> ptr<span style="color: #339933;">;</span>
        ptr <span style="color: #339933;">=</span> new T<span style="color: #009900;">&#91;</span>newSize<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        maxSize <span style="color: #339933;">=</span> newSize<span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    bool add<span style="color: #009900;">&#40;</span>T data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>index <span style="color: #339933;">==</span> maxSize<span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        ptr<span style="color: #009900;">&#91;</span>index<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> data<span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    bool remove<span style="color: #009900;">&#40;</span>T data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #993333;">int</span> remIndex <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> maxSize<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>ptr<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> data<span style="color: #009900;">&#41;</span>  <span style="color: #009900;">&#123;</span>
                remIndex <span style="color: #339933;">=</span> i<span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>remIndex <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
        memmove<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>ptr<span style="color: #009900;">&#91;</span>remIndex<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>ptr<span style="color: #009900;">&#91;</span>remIndex <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> maxSize <span style="color: #339933;">-</span> remIndex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #339933;">--</span>index<span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
private<span style="color: #339933;">:</span>
    T<span style="color: #339933;">*</span> ptr<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> index<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> maxSize<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">const</span> <span style="color: #993333;">int</span> SIZE <span style="color: #339933;">=</span> <span style="color: #0000dd;">81000</span><span style="color: #339933;">;</span>
&nbsp;
template <span style="color: #339933;">&lt;</span>typename T<span style="color: #339933;">&gt;</span>
<span style="color: #993333;">void</span> eraseContainer<span style="color: #009900;">&#40;</span>T<span style="color: #339933;">&amp;</span> container<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> SIZE<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span>
        container.<span style="color: #202020;">remove</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
template <span style="color: #339933;">&lt;</span>typename T<span style="color: #339933;">&gt;</span>
<span style="color: #993333;">void</span> eraseContainer<span style="color: #009900;">&#40;</span>std<span style="color: #339933;">::</span><span style="color: #202020;">vector</span><span style="color: #339933;">&lt;</span>T<span style="color: #339933;">&gt;&amp;</span> vec<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> SIZE<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #993333;">auto</span> iter <span style="color: #339933;">=</span> std<span style="color: #339933;">::</span><span style="color: #202020;">find</span><span style="color: #009900;">&#40;</span>vec.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> vec.<span style="color: #202020;">end</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        vec.<span style="color: #202020;">erase</span><span style="color: #009900;">&#40;</span>iter<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">double</span> stdVecTime <span style="color: #339933;">=</span> <span style="color:#800080;">0.0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">double</span> stdListTime <span style="color: #339933;">=</span> <span style="color:#800080;">0.0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">double</span> customVecTime <span style="color: #339933;">=</span> <span style="color:#800080;">0.0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">double</span> customListTime <span style="color: #339933;">=</span> <span style="color:#800080;">0.0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> test<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    std<span style="color: #339933;">::</span><span style="color: #202020;">vector</span><span style="color: #339933;">&lt;</span>int<span style="color: #339933;">&gt;</span> vecStd<span style="color: #339933;">;</span>
    vecStd.<span style="color: #202020;">reserve</span><span style="color: #009900;">&#40;</span>SIZE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> SIZE<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span>
        vecStd.<span style="color: #202020;">push_back</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    std<span style="color: #339933;">::</span><span style="color: #202020;">random_shuffle</span><span style="color: #009900;">&#40;</span>vecStd.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> vecStd.<span style="color: #202020;">end</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    using namespace std<span style="color: #339933;">;</span>
    std<span style="color: #339933;">::</span><span style="color: #202020;">list</span><span style="color: #339933;">&lt;</span>int<span style="color: #339933;">&gt;</span> listStd<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> SIZE<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span>
        listStd.<span style="color: #202020;">push_back</span><span style="color: #009900;">&#40;</span>vecStd<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    Vector<span style="color: #339933;">&lt;</span>int<span style="color: #339933;">&gt;</span> vecCustom<span style="color: #339933;">;</span>
    vecCustom.<span style="color: #202020;">reset</span><span style="color: #009900;">&#40;</span>SIZE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> SIZE<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span> 
        vecCustom.<span style="color: #202020;">add</span><span style="color: #009900;">&#40;</span>vecStd<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    List<span style="color: #339933;">&lt;</span>int<span style="color: #339933;">&gt;</span> listCustom<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> SIZE<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span>
        listCustom.<span style="color: #202020;">add</span><span style="color: #009900;">&#40;</span>vecStd<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    clock_t beginStdVec <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    eraseContainer<span style="color: #009900;">&#40;</span>vecStd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    clock_t endStdVec <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    stdVecTime<span style="color: #339933;">+=</span> <span style="color: #993333;">double</span><span style="color: #009900;">&#40;</span>diffclock<span style="color: #009900;">&#40;</span>endStdVec<span style="color: #339933;">,</span>beginStdVec<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>vecStd.<span style="color: #202020;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Bug in std vector test<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    clock_t beginStdList <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    eraseContainer<span style="color: #009900;">&#40;</span>listStd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    clock_t endStdList <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    stdListTime <span style="color: #339933;">+=</span> <span style="color: #993333;">double</span><span style="color: #009900;">&#40;</span>diffclock<span style="color: #009900;">&#40;</span>endStdList<span style="color: #339933;">,</span>beginStdList<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>listStd.<span style="color: #202020;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Bug in std list test<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
&nbsp;
    clock_t beginVec <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    eraseContainer<span style="color: #009900;">&#40;</span>vecCustom<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    clock_t endVec <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    customVecTime <span style="color: #339933;">+=</span> <span style="color: #993333;">double</span><span style="color: #009900;">&#40;</span>diffclock<span style="color: #009900;">&#40;</span>endVec<span style="color: #339933;">,</span>beginVec<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>vecCustom.<span style="color: #202020;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Bug in custom vector test<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    clock_t beginList <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    eraseContainer<span style="color: #009900;">&#40;</span>listCustom<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    clock_t endList <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    customListTime <span style="color: #339933;">+=</span> <span style="color: #993333;">double</span><span style="color: #009900;">&#40;</span>diffclock<span style="color: #009900;">&#40;</span>endList<span style="color: #339933;">,</span>beginList<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>listCustom.<span style="color: #202020;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Bug in custom list test<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">const</span> <span style="color: #993333;">double</span> testTimes <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">;</span>
    srand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span><span style="color: #009900;">&#41;</span>time<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> testTimes<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span>
        test<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    std<span style="color: #339933;">::</span><span style="color: #000066;">cout</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #ff0000;">&quot;Std vec time:&quot;</span> <span style="color: #339933;">&lt;&lt;</span> stdVecTime <span style="color: #339933;">/</span> testTimes <span style="color: #339933;">&lt;&lt;</span> std<span style="color: #339933;">::</span><span style="color: #202020;">endl</span><span style="color: #339933;">;</span>
    std<span style="color: #339933;">::</span><span style="color: #000066;">cout</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #ff0000;">&quot;Std list time:&quot;</span> <span style="color: #339933;">&lt;&lt;</span> stdListTime <span style="color: #339933;">/</span> testTimes <span style="color: #339933;">&lt;&lt;</span> std<span style="color: #339933;">::</span><span style="color: #202020;">endl</span><span style="color: #339933;">;</span>
    std<span style="color: #339933;">::</span><span style="color: #000066;">cout</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #ff0000;">&quot;Custom vec time:&quot;</span> <span style="color: #339933;">&lt;&lt;</span> customVecTime <span style="color: #339933;">/</span> testTimes <span style="color: #339933;">&lt;&lt;</span> std<span style="color: #339933;">::</span><span style="color: #202020;">endl</span><span style="color: #339933;">;</span>
    std<span style="color: #339933;">::</span><span style="color: #000066;">cout</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #ff0000;">&quot;Custom list time:&quot;</span> <span style="color: #339933;">&lt;&lt;</span> customListTime <span style="color: #339933;">/</span> testTimes<span style="color: #339933;">&lt;&lt;</span> std<span style="color: #339933;">::</span><span style="color: #202020;">endl</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Компилатора е LLVM4.1 с всички оптимизации, процесора &#8211; Core2Duo 2.26ghz (P8400), MacOS 10.8.1. Структурите custom vec &amp;&amp; custom list всъщност не са от значение, тъй като най-често ни интересуват резултатите от std (написах ги от носталгия, след като завърших хората спряха да ме карат да ги пиша непрекъснато)<br />
Ето и резултатите (lower is better). Замерванията са правени по 3 пъти, показано е средно аритметичното:<br />
<img src="img/cache_values.PNG" alt="" /><br />
По всичко личи, че моя вектор не е много бърз. Това е добре, имплементацията не изглежда много грешна, но пък е бавна. +1 за STL-a <img src='http://code-bg.com/blogo/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
И понеже никой не харесва таблици, ето ги в арт вариант :<br />
<img src="img/cache_large.PNG" alt="" /><br />
И понеже не се виждат тези в началото заради скалирането, ето ги и тях :<br />
<img src="img/cache_small.PNG" alt="" /><br />
Не ми се мисли, разни езици от високо ниво, пазещи програмистите от &#8220;странични ефекти на кода {}&#8221;, ползващи за пестене на памет разни линкчета насам-натам колко бързо работят <img src='http://code-bg.com/blogo/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Изглежда че vector е the silver bullet (и не е вярно, че ако има честа нужда от махане на елементи в средата list-a върши работата екстра), а и че за тези неща трябва да се говори в университета, че срамота така завършваме неуки &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://code-bg.com/blogo/?feed=rss2&#038;p=715</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MultiHassle Programming</title>
		<link>http://code-bg.com/blogo/?p=713</link>
		<comments>http://code-bg.com/blogo/?p=713#comments</comments>
		<pubDate>Mon, 15 Oct 2012 17:46:27 +0000</pubDate>
		<dc:creator>savage309</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://code-bg.com/blogo/?p=713</guid>
		<description><![CDATA[What CUDA/OpenCL programming is like &#8230;]]></description>
			<content:encoded><![CDATA[<p>What CUDA/OpenCL programming is like &#8230;</p>
<p><a href="http://code-bg.com/blogo/img/cuda.PNG"><img class="alignnone size-medium wp-image-637" title="photo" src="http://code-bg.com/blogo/img/cuda.PNG" alt="" width="440" height="645" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://code-bg.com/blogo/?feed=rss2&#038;p=713</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Git</title>
		<link>http://code-bg.com/blogo/?p=707</link>
		<comments>http://code-bg.com/blogo/?p=707#comments</comments>
		<pubDate>Fri, 27 Jul 2012 19:27:29 +0000</pubDate>
		<dc:creator>savage309</dc:creator>
				<category><![CDATA[Професионални]]></category>

		<guid isPermaLink="false">http://code-bg.com/blogo/?p=707</guid>
		<description><![CDATA[Вижда се, Git има няколко функции, които обикновените клавиатури не предлагат, но има и някои особености при натискане на Return key-a. Пръстите на Линус изглежда са тънки.]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-bg.com/blogo/img/git.PNG"><img class="alignnone size-medium wp-image-637" title="photo" src="http://code-bg.com/blogo/img/git.PNG" alt="" width="440" height="245" /></a><br />
Вижда се, <a href="http://git-scm.com">Git</a> има няколко функции, които обикновените клавиатури не предлагат, но има и някои особености при натискане на Return key-a. Пръстите на Линус изглежда са тънки.</p>
]]></content:encoded>
			<wfw:commentRss>http://code-bg.com/blogo/?feed=rss2&#038;p=707</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Compile Sort</title>
		<link>http://code-bg.com/blogo/?p=684</link>
		<comments>http://code-bg.com/blogo/?p=684#comments</comments>
		<pubDate>Sun, 15 Jul 2012 13:14:20 +0000</pubDate>
		<dc:creator>savage309</dc:creator>
				<category><![CDATA[Професионални]]></category>

		<guid isPermaLink="false">http://code-bg.com/blogo/?p=684</guid>
		<description><![CDATA[Не че ме бива във функционалното или С++ мета програмиране много, ама спретнах най-накрая и аз един compile time sort. Не претендирам, че е оптимален (нито generic), но май е лесен за четене и разбиране. #include &#60;iostream&#62; //all results are saved in ::Value (for type) and ::value (for value) &#160; //gives the smallest in ts... [...]]]></description>
			<content:encoded><![CDATA[<p>Не че ме бива във функционалното или С++ мета програмиране много, ама спретнах най-накрая и аз един compile time sort. Не претендирам, че е оптимален (нито generic), но май е лесен за четене и разбиране.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;iostream&gt;  </span>
<span style="color: #666666; font-style: italic;">//all results are saved in ::Value (for type) and ::value (for value)  </span>
&nbsp;
<span style="color: #666666; font-style: italic;">//gives the smallest in ts... </span>
template<span style="color: #339933;">&lt;</span>int n<span style="color: #339933;">,</span> <span style="color: #993333;">int</span>... <span style="color: #202020;">ts</span><span style="color: #339933;">&gt;</span> 
<span style="color: #993333;">struct</span> Min <span style="color: #009900;">&#123;</span> 
	<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">int</span> value <span style="color: #339933;">=</span> n <span style="color: #339933;">&lt;</span> Min<span style="color: #339933;">&lt;</span>ts...<span style="color: #339933;">&gt;::</span><span style="color: #202020;">value</span> <span style="color: #339933;">?</span> n <span style="color: #339933;">:</span> Min<span style="color: #339933;">&lt;</span>ts...<span style="color: #339933;">&gt;::</span><span style="color: #202020;">value</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> 
&nbsp;
template <span style="color: #339933;">&lt;</span>int n<span style="color: #339933;">&gt;</span>
<span style="color: #993333;">struct</span> Min<span style="color: #339933;">&lt;</span>n<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span> 
	<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">int</span> value <span style="color: #339933;">=</span> n<span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
<span style="color: #666666; font-style: italic;">//holder structure</span>
template<span style="color: #339933;">&lt;</span>int... <span style="color: #202020;">vs</span><span style="color: #339933;">&gt;</span> <span style="color: #993333;">struct</span> StaticArray <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
<span style="color: #666666; font-style: italic;">//concatenates v... and u... into an StaticArray </span>
template<span style="color: #339933;">&lt;</span>typename T1<span style="color: #339933;">,</span> typename T2<span style="color: #339933;">&gt;</span>
<span style="color: #993333;">struct</span> Concat<span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> 
&nbsp;
template<span style="color: #339933;">&lt;</span>int...<span style="color: #202020;">v</span><span style="color: #339933;">,</span> <span style="color: #993333;">int</span>...<span style="color: #202020;">u</span><span style="color: #339933;">&gt;</span> 
<span style="color: #993333;">struct</span> Concat<span style="color: #339933;">&lt;</span>StaticArray<span style="color: #339933;">&lt;</span>v...<span style="color: #339933;">&gt;,</span> StaticArray<span style="color: #339933;">&lt;</span>u...<span style="color: #339933;">&gt;&gt;</span> <span style="color: #009900;">&#123;</span> 
	<span style="color: #993333;">typedef</span> StaticArray<span style="color: #339933;">&lt;</span>v...<span style="color: #339933;">,</span> u...<span style="color: #339933;">&gt;</span> Value<span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
<span style="color: #666666; font-style: italic;">//gives the index of &quot;v&quot; in args... </span>
&nbsp;
template<span style="color: #339933;">&lt;</span>int v<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> a<span style="color: #339933;">,</span> <span style="color: #993333;">int</span>... <span style="color: #202020;">args</span><span style="color: #339933;">&gt;</span> 
<span style="color: #993333;">struct</span> IndexOf <span style="color: #009900;">&#123;</span> 
	<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">int</span> value <span style="color: #339933;">=</span> v <span style="color: #339933;">==</span> a <span style="color: #339933;">?</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">:</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">+</span> IndexOf<span style="color: #339933;">&lt;</span>v<span style="color: #339933;">,</span> args...<span style="color: #339933;">&gt;::</span><span style="color: #202020;">value</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
template <span style="color: #339933;">&lt;</span>int v<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> a<span style="color: #339933;">&gt;</span> 
<span style="color: #993333;">struct</span> IndexOf<span style="color: #339933;">&lt;</span>v<span style="color: #339933;">,</span> a<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span> 
	<span style="color: #993333;">static</span> <span style="color: #993333;">const</span> <span style="color: #993333;">int</span> value <span style="color: #339933;">=</span> v <span style="color: #339933;">==</span> a <span style="color: #339933;">?</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">:</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>  
&nbsp;
 <span style="color: #666666; font-style: italic;">//remove element with index &quot;n&quot; from args... </span>
&nbsp;
template<span style="color: #339933;">&lt;</span>int n<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> a<span style="color: #339933;">,</span> <span style="color: #993333;">int</span>... <span style="color: #202020;">args</span><span style="color: #339933;">&gt;</span> 
<span style="color: #993333;">struct</span> RemoveNth <span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">typedef</span> StaticArray<span style="color: #339933;">&lt;</span>a<span style="color: #339933;">&gt;</span> headValue<span style="color: #339933;">;</span>
        <span style="color: #993333;">typedef</span> typename RemoveNth<span style="color: #339933;">&lt;</span> <span style="color: #009900;">&#40;</span>n <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> args...<span style="color: #339933;">&gt;::</span><span style="color: #202020;">Value</span> Tail<span style="color: #339933;">;</span> 
	<span style="color: #993333;">typedef</span> typename Concat<span style="color: #339933;">&lt;</span>headValue<span style="color: #339933;">,</span> Tail<span style="color: #339933;">&gt;::</span><span style="color: #202020;">Value</span> Value<span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
template<span style="color: #339933;">&lt;</span>int a<span style="color: #339933;">&gt;</span> 
<span style="color: #993333;">struct</span> RemoveNth<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> a<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span> 
	<span style="color: #993333;">typedef</span> StaticArray<span style="color: #339933;">&lt;&gt;</span> headValue<span style="color: #339933;">;</span> 
	<span style="color: #993333;">typedef</span> StaticArray<span style="color: #339933;">&lt;&gt;</span> Value<span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
template<span style="color: #339933;">&lt;</span>int a<span style="color: #339933;">,</span> <span style="color: #993333;">int</span>... <span style="color: #202020;">args</span><span style="color: #339933;">&gt;</span> 
<span style="color: #993333;">struct</span> RemoveNth<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> a<span style="color: #339933;">,</span> args...<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span> 
	<span style="color: #993333;">typedef</span> StaticArray<span style="color: #339933;">&lt;</span>args...<span style="color: #339933;">&gt;</span> headValue<span style="color: #339933;">;</span> 
	<span style="color: #993333;">typedef</span> StaticArray<span style="color: #339933;">&lt;</span>args...<span style="color: #339933;">&gt;</span> Value<span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
<span style="color: #666666; font-style: italic;">//sorts args... </span>
template<span style="color: #339933;">&lt;</span>typename T1<span style="color: #339933;">&gt;</span> 
<span style="color: #993333;">struct</span> Sort<span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> 
&nbsp;
template<span style="color: #339933;">&lt;</span>int... <span style="color: #202020;">args</span><span style="color: #339933;">&gt;</span> 
<span style="color: #993333;">struct</span> Sort <span style="color: #339933;">&lt;</span>StaticArray<span style="color: #339933;">&lt;</span>args...<span style="color: #339933;">&gt;&gt;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">//get he min value </span>
	<span style="color: #993333;">typedef</span> Min<span style="color: #339933;">&lt;</span>args...<span style="color: #339933;">&gt;</span> min<span style="color: #339933;">;</span> 
	<span style="color: #666666; font-style: italic;">//and its index </span>
	<span style="color: #993333;">typedef</span> IndexOf<span style="color: #339933;">&lt;</span>min<span style="color: #339933;">::</span><span style="color: #202020;">value</span><span style="color: #339933;">,</span> args...<span style="color: #339933;">&gt;</span> index<span style="color: #339933;">;</span> 
	<span style="color: #666666; font-style: italic;">//remove the min from the list</span>
	<span style="color: #993333;">typedef</span> typename RemoveNth<span style="color: #339933;">&lt;</span>index<span style="color: #339933;">::</span><span style="color: #202020;">value</span><span style="color: #339933;">,</span> args...<span style="color: #339933;">&gt;::</span><span style="color: #202020;">Value</span> Filtered<span style="color: #339933;">;</span> 
	<span style="color: #666666; font-style: italic;">//call recursively for the others </span>
	<span style="color: #993333;">typedef</span> typename Sort<span style="color: #339933;">&lt;</span>Filtered<span style="color: #339933;">&gt;::</span><span style="color: #202020;">Value</span> TailSorted<span style="color: #339933;">;</span> 
	<span style="color: #666666; font-style: italic;">//concat min with the others</span>
        <span style="color: #993333;">typedef</span> typename Concat<span style="color: #339933;">&lt;</span>StaticArray<span style="color: #339933;">&lt;</span>min<span style="color: #339933;">::</span><span style="color: #202020;">value</span><span style="color: #339933;">&gt;,</span> TailSorted<span style="color: #339933;">&gt;::</span><span style="color: #202020;">Value</span> Value<span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> 
&nbsp;
template<span style="color: #339933;">&lt;</span>int n<span style="color: #339933;">&gt;</span> 
<span style="color: #993333;">struct</span> Sort<span style="color: #339933;">&lt;</span>StaticArray<span style="color: #339933;">&lt;</span>n<span style="color: #339933;">&gt;&gt;</span> <span style="color: #009900;">&#123;</span> 
	<span style="color: #993333;">typedef</span> Min<span style="color: #339933;">&lt;</span>n<span style="color: #339933;">&gt;</span> min<span style="color: #339933;">;</span>
        <span style="color: #993333;">typedef</span> StaticArray<span style="color: #339933;">&lt;</span>n<span style="color: #339933;">&gt;</span> Value<span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>  
&nbsp;
template<span style="color: #339933;">&lt;&gt;</span> 
<span style="color: #993333;">struct</span> Sort<span style="color: #339933;">&lt;</span>StaticArray<span style="color: #339933;">&lt;&gt;&gt;</span> <span style="color: #009900;">&#123;</span> 
	<span style="color: #993333;">typedef</span> StaticArray<span style="color: #339933;">&lt;&gt;</span> Value<span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>   
&nbsp;
<span style="color: #993333;">void</span> printStaticArray<span style="color: #009900;">&#40;</span>StaticArray<span style="color: #339933;">&lt;&gt;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span>   
&nbsp;
template<span style="color: #339933;">&lt;</span>int v1<span style="color: #339933;">,</span> <span style="color: #993333;">int</span>...<span style="color: #202020;">vs</span><span style="color: #339933;">&gt;</span> 
<span style="color: #993333;">void</span> printStaticArray<span style="color: #009900;">&#40;</span>StaticArray<span style="color: #339933;">&lt;</span>v1<span style="color: #339933;">,</span> vs...<span style="color: #339933;">&gt;</span> m<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
	std<span style="color: #339933;">::</span><span style="color: #000066;">cout</span> <span style="color: #339933;">&lt;&lt;</span> v1<span style="color: #339933;">&lt;&lt;</span> <span style="color: #ff0000;">&quot; &quot;</span><span style="color: #339933;">;</span> printStaticArray<span style="color: #009900;">&#40;</span>StaticArray<span style="color: #339933;">&lt;</span>vs...<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span> argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
	printStaticArray<span style="color: #009900;">&#40;</span>Sort<span style="color: #339933;">&lt;</span>StaticArray<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">196</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">309</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">42</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">411</span><span style="color: #339933;">&gt;&gt;::</span><span style="color: #202020;">Value</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Беше по-трудно, от колкото изглежда  <img src='http://code-bg.com/blogo/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Предстоят тестове, колко време отнема и кога започва да се чупи.</p>
]]></content:encoded>
			<wfw:commentRss>http://code-bg.com/blogo/?feed=rss2&#038;p=684</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Култура ми Янко</title>
		<link>http://code-bg.com/blogo/?p=682</link>
		<comments>http://code-bg.com/blogo/?p=682#comments</comments>
		<pubDate>Fri, 06 Jul 2012 22:22:53 +0000</pubDate>
		<dc:creator>savage309</dc:creator>
				<category><![CDATA[Seriously]]></category>

		<guid isPermaLink="false">http://code-bg.com/blogo/?p=682</guid>
		<description><![CDATA[БТВ и Нова не пожелаха да публикуват снимката, макар да им я пратих. Но културните мероприятия на министъра с Иво Карамански трябва да ценят. Високо.]]></description>
			<content:encoded><![CDATA[<p><a href="http://code-bg.com/blogo/img/minister.jpeg"><img class="alignnone size-medium wp-image-637" title="photo" src="http://code-bg.com/blogo/img/minister.jpeg" alt="" width="300" height="224" /></a><br />
БТВ и Нова не пожелаха да публикуват снимката, макар да им я пратих.<br />
Но културните мероприятия на министъра с Иво Карамански трябва да ценят. Високо.</p>
]]></content:encoded>
			<wfw:commentRss>http://code-bg.com/blogo/?feed=rss2&#038;p=682</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Malus domestica</title>
		<link>http://code-bg.com/blogo/?p=673</link>
		<comments>http://code-bg.com/blogo/?p=673#comments</comments>
		<pubDate>Sat, 19 May 2012 19:09:43 +0000</pubDate>
		<dc:creator>savage309</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://code-bg.com/blogo/?p=673</guid>
		<description><![CDATA[Stay hungry.]]></description>
			<content:encoded><![CDATA[<p><img src="http://code-bg.com/blogo/img/apple.png" width ="400" height="300"><br />
Stay hungry.</p>
]]></content:encoded>
			<wfw:commentRss>http://code-bg.com/blogo/?feed=rss2&#038;p=673</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Про</title>
		<link>http://code-bg.com/blogo/?p=671</link>
		<comments>http://code-bg.com/blogo/?p=671#comments</comments>
		<pubDate>Wed, 25 Apr 2012 11:23:59 +0000</pubDate>
		<dc:creator>savage309</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://code-bg.com/blogo/?p=671</guid>
		<description><![CDATA[Съвсем истинския текст, копиран от dir: По-рано днес от МВР информираха, че тялото на Бицов е открито на 14 април в дома му. Първоначално се смятало, че става дума за естествена смърт, тъй като дори съдебният лекар не установил следи от насилие. Аутопсията обаче установила, че той е застрелян два пъти в главата. Този е [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Съвсем истинския текст, копиран от dir:</p>
<p style="text-align: center;"><span style="color: #800000;">По-рано днес от МВР информираха, че тялото на Бицов е открито на <strong>14 април</strong> в дома му. Първоначално се смятало, че става дума за <strong>естествена смърт</strong>, тъй като дори съдебният лекар<strong> не установил</strong> следи от насилие. Аутопсията обаче установила, че той е <strong>застрелян два пъти в главата.</strong></span></p>
<p>Този е толкова лекар, колкото аз програмист.</p>
]]></content:encoded>
			<wfw:commentRss>http://code-bg.com/blogo/?feed=rss2&#038;p=671</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
