<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Linked List for drawing purposes, and others things</title>
		<link>http://www.allegro.cc/forums/view/607301</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 16 May 2011 22:22:36 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Aloha, </p><p>I was trying to show a little GUI on my game:</p><p>And I realize that is time to make the next step, I need a way to use Linked List to &quot;centralize&quot; all my objects, and have a drawing order.</p><p>I read an <a href="http://www.allegro.cc/forums/thread/543554/543567#target"> Evert&#39;s post </a> and knew that is the way I want to do my game, a Linked List is very powerful and hopefully my final step about the basic concepts of game programming.</p><p><div class="media-player youtube"><div style="margin: 1em 2em; background: url(/images/movie.png); width: 180px; height: 100px; text-align: center;"><a href="http://www.allegro.cc//www.youtube.com/watch?v=FLnotDhjIyU" target="_blank"><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/object/4/e/4e2fbcd2b06053aba7bb98d23215cff2.jpg" border="0" alt="video" title="Click to play video" /></a></div></div></p><p>As you can see in the video the drawing order is failing, I hope with linked list I can solve this and another problems that I currently have.</p><p>But I have a question... How can I pass different types of &quot;data types&quot; to my linked list?</p><p>I think I understand it, I modified a piece of code and came up with this, but before I even try it (isn&#39;t going to work), I would like to know if this could work, because I saw other examples but they tend to over complicate everything.</p><p>How can I achieve this in a simple way?</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> linklist
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>   private:
<span class="number">  4</span>
<span class="number">  5</span>         <span class="k1">struct</span> node<span class="k2">{</span>
<span class="number">  6</span>            
<span class="number">  7</span>            <span class="k1">void</span> <span class="k3">*</span> data<span class="k2">;</span>
<span class="number">  8</span>            node <span class="k3">*</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_531.html" target="_blank">link</a><span class="k2">;</span>
<span class="number">  9</span>         
<span class="number"> 10</span>         <span class="k2">}</span><span class="k3">*</span>p<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>   public:
<span class="number"> 13</span>
<span class="number"> 14</span>              linklist<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>         <span class="k1">void</span> append<span class="k2">(</span> <span class="k1">int</span> num <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span>linklist::linklist<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 20</span><span class="k2">{</span>
<span class="number"> 21</span>     p<span class="k3">=</span>NULL<span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span>
<span class="number"> 23</span>
<span class="number"> 24</span><span class="k1">void</span> linklist::append<span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span>num<span class="k2">)</span>
<span class="number"> 25</span><span class="k2">{</span>
<span class="number"> 26</span>     node <span class="k3">*</span>q,<span class="k3">*</span>t<span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span>   <span class="k1">if</span><span class="k2">(</span> p <span class="k3">=</span><span class="k3">=</span> NULL <span class="k2">)</span>
<span class="number"> 29</span>   <span class="k2">{</span>
<span class="number"> 30</span>        p <span class="k3">=</span> <span class="k1">new</span> node<span class="k2">;</span>
<span class="number"> 31</span>      p-&gt;data <span class="k3">=</span> num<span class="k2">;</span> <span class="c">// This doesn't work but I don't know what to do :S</span>
<span class="number"> 32</span>      p-&gt;link <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 33</span>   <span class="k2">}</span>
<span class="number"> 34</span>   <span class="k1">else</span>
<span class="number"> 35</span>   <span class="k2">{</span>
<span class="number"> 36</span>        q <span class="k3">=</span> p<span class="k2">;</span>
<span class="number"> 37</span>      <span class="k1">while</span><span class="k2">(</span> q-&gt;link <span class="k3">!</span><span class="k3">=</span> NULL <span class="k2">)</span>
<span class="number"> 38</span>           q <span class="k3">=</span> q-&gt;link<span class="k2">;</span>
<span class="number"> 39</span>
<span class="number"> 40</span>      t <span class="k3">=</span> <span class="k1">new</span> node<span class="k2">;</span>
<span class="number"> 41</span>      t-&gt;data <span class="k3">=</span> num<span class="k2">;</span>
<span class="number"> 42</span>      t-&gt;link <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 43</span>      q-&gt;link <span class="k3">=</span> t<span class="k2">;</span>
<span class="number"> 44</span>   <span class="k2">}</span>
<span class="number"> 45</span><span class="k2">}</span>
</div></div><p>

Well, I know that I still need to read a lot, but what I would want is a simple way to pass different types of data (made by me) to a linked list</p><p>Thanks in advance.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Thu, 12 May 2011 19:58:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>One classic method is to make &quot;data&quot; a pointer to a base class instead of void*, and have all your elements derive from this class.<br />The good part is that if this base class has a method draw(), you will be able to call (some_node)-&gt;data-&gt;draw() : it will call the &quot;right method&quot; for each class.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Yves Rizoud)</author>
		<pubDate>Thu, 12 May 2011 20:08:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607301/917218#target">AMCerasoli</a> said:</div><div class="quote"><p>
How can I achieve this in a simple way?
</p></div></div><p>
Use <span class="source-code">std::list</span>. Specifically, use templates and then use polymorphism (if you want different types of objects in the list). Specialize the template on the parent class of all your objects.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Thu, 12 May 2011 20:12:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The STL is your friend.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;list&gt;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>    <span class="k1">int</span> cat <span class="k3">=</span> <span class="n">24</span><span class="k2">;</span>
<span class="number">  7</span>    <span class="k1">int</span> dog <span class="k3">=</span> <span class="n">34</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>    std::list<span class="k3">&lt;</span><span class="k1">void</span> <span class="k3">*</span><span class="k3">&gt;</span> voids<span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>    <span class="c">// for append</span>
<span class="number"> 12</span>    voids.push_back<span class="k2">(</span><span class="k3">&amp;</span>cat<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>    voids.push_back<span class="k2">(</span><span class="k3">&amp;</span>dog<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>    <span class="c">// go through each item in the list</span>
<span class="number"> 16</span>    <span class="k1">for</span><span class="k2">(</span>std::list<span class="k3">&lt;</span><span class="k1">void</span> <span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator i <span class="k3">=</span> voids.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> i <span class="k3">!</span><span class="k3">=</span> voids.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>i<span class="k2">)</span>
<span class="number"> 17</span>    <span class="k2">{</span>
<span class="number"> 18</span>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="k3">*</span>i <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 19</span>    <span class="k2">}</span>
<span class="number"> 20</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 21</span><span class="k2">}</span>
</div></div><p>

The STL library that comes with C++ has a linked list implementation. What data type you store in the linked list is the real question. If you already have an inheritance model with your GUI elements, you could store pointers to them in the list. (You probably don&#39;t want to store plain pointers into a list, you will want some sort of smart pointer, so the elements free themselves on removal.)</p><p>Edit<br />A link to an STL container reference probably wouldn&#39;t hurt. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> <a href="http://www.cplusplus.com/reference/stl/">http://www.cplusplus.com/reference/stl/</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Timorg)</author>
		<pubDate>Thu, 12 May 2011 20:19:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you very much, I didn&#39;t know about that STL (list). I have object that draw themselves, do you think with the std::list I can call functions of each object?</p><p>I&#39;m not using inheritance so far, each window of the game is going to do a very different task, so I&#39;m simplifying the process by just creating a new class with its corresponding object.</p><p>When I create similar objects a usually use arrays, you know:</p><div class="source-code snippet"><div class="inner"><pre>PLAYER player<span class="k2">[</span><span class="n">30</span><span class="k2">]</span><span class="k2">;</span>

<span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">30</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
player<span class="k2">[</span>i<span class="k2">]</span>.Draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

<span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">30</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
player<span class="k2">[</span>i<span class="k2">]</span>.Logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

<span class="k1">for</span><span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><span class="n">30</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
player<span class="k2">[</span>i<span class="k2">]</span>.input<span class="k2">(</span>mouseX, mouseY<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

I wish I could use that, but so far I haven&#39;t had the chance since each object in my game is completely different... So for that reason I want to use list.</p><p>but, can I call member functions using std::list?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Thu, 12 May 2011 22:47:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607301/917239#target">AMCerasoli</a> said:</div><div class="quote"><p>
So for that reason I want to use list.
</p></div></div><p>
You don&#39;t need a list for that. You need to learn some basic C++ OOP.</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> BaseObject
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    <span class="k1">virtual</span> <span class="k1">void</span> Logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span><span class="k1">class</span> Dog <span class="k2">:</span> BaseObject
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</span>    <span class="k1">virtual</span> <span class="k1">void</span> Logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span><span class="k1">class</span> Cat <span class="k2">:</span> BaseObject
<span class="number"> 12</span><span class="k2">{</span>
<span class="number"> 13</span>    <span class="k1">virtual</span> <span class="k1">void</span> Logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>std::vector<span class="k3">&lt;</span>BaseObject<span class="k3">*</span><span class="k3">&gt;</span> Objects<span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>Objects.push_back<span class="k2">(</span><span class="k1">new</span> Dog<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>Objects.push_back<span class="k2">(</span><span class="k1">new</span> Cat<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span><span class="k1">for</span><span class="k2">(</span><span class="k1">size_t</span> ii <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> ii <span class="k3">&lt;</span> Objects.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> ii<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 22</span>    Objects<span class="k2">[</span>ii<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>Logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//will call the methods appropriately depending whether it is a cat or a dog</span>
</div></div><p>

EDIT: Similarly with a list:</p><div class="source-code snippet"><div class="inner"><pre>std::list<span class="k3">&lt;</span>BaseObject<span class="k3">*</span><span class="k3">&gt;</span> Objects<span class="k2">;</span>

Objects.push_back<span class="k2">(</span><span class="k1">new</span> Dog<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
Objects.push_back<span class="k2">(</span><span class="k1">new</span> Cat<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>

<span class="k1">for</span><span class="k2">(</span>std::list<span class="k3">&lt;</span>BaseObject<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator it <span class="k3">=</span> Objects.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> Objects.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
    <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Logic<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//will call the methods appropriately depending whether </span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Thu, 12 May 2011 22:53:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hmm.. I know about inheritance, what I did know was that I can create a vector based on the &quot;BaseObject&quot; and then add other objects derived from it.</p><p>But I don&#39;t like the inheritance way, I prefer having objects completely independent, I know that each objects is going to have a logic and draw functions, but not all objects need a input function... I don&#39;t know I really prefer a lot, not using inheritance in this case...</p><p>So, I know this sounds pedant, but there is a way to do what I do using inheritance and vectors, but using lists instead?</p><p>I would like to have different loops cheeking for different lists... </p><p><span class="remote-thumbnail"><span class="json">{"name":"604116","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/2\/c2bd9b4c857d8dec656f2cf7fdef4782.jpg","w":666,"h":583,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/c\/2\/c2bd9b4c857d8dec656f2cf7fdef4782"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/c/2/c2bd9b4c857d8dec656f2cf7fdef4782-240.jpg" alt="604116" width="240" height="210" /></span>	</p><p>The circles are objects which have different member functions and since I <b>think</b> I can&#39;t check them in the same list I create two list to check objects which doesn&#39;t have drawing functions and other list for those which have drawing functions... Sounds logic?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Thu, 12 May 2011 23:20:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You don&#39;t need to put Input in the BaseObject. Have three base classes, one called BaseObject, one called Drawable, and one called InputSink, and do something like:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">class</span> BaseObject <span class="k2">{</span> <span class="c">/* common methods and properties */</span> <span class="k2">}</span><span class="k2">;</span>
<span class="k1">class</span> Drawable <span class="k2">{</span> public: <span class="k1">virtual</span> <span class="k1">void</span> Draw<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> <span class="k2">}</span> <span class="k2">}</span><span class="k2">;</span>
<span class="k1">class</span> InputSink <span class="k2">{</span> public: <span class="k1">virtual</span> <span class="k1">void</span> Input<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> <span class="k2">}</span> <span class="k2">}</span><span class="k2">;</span>

<span class="k1">class</span> MyObject1 <span class="k2">:</span> <span class="k1">public</span> BaseObject, <span class="k1">public</span> Drawable <span class="k2">{</span> public: <span class="k1">void</span> Draw<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> <span class="k2">}</span> <span class="k2">}</span><span class="k2">;</span>
<span class="k1">class</span> MyObject2 <span class="k2">:</span> <span class="k1">public</span> BaseObject, <span class="k1">public</span> InputSink <span class="k2">{</span> public: <span class="k1">void</span> Input<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> <span class="k2">}</span> <span class="k2">}</span><span class="k2">;</span>
std::list<span class="k3">&lt;</span>BaseObject <span class="k3">*</span><span class="k3">&gt;</span> objects<span class="k2">;</span>

<span class="k1">for</span><span class="k2">(</span>std::list<span class="k3">&lt;</span>BaseObject<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator it <span class="k3">=</span> objects<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> objects<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
    InputSink <span class="k3">*</span>input_sink <span class="k3">=</span> <span class="k1">dynamic_cast</span><span class="k3">&lt;</span>InputSink <span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k2">;</span>
    <span class="k1">if</span><span class="k2">(</span>input_sink<span class="k2">)</span> input_sink-&gt;Input<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>

    Drawable <span class="k3">*</span>drawable <span class="k3">=</span> <span class="k1">dynamic_cast</span><span class="k3">&lt;</span>Drawable <span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k2">;</span>
    <span class="k1">if</span><span class="k2">(</span>drawable<span class="k2">)</span> drawable-&gt;Draw<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p> </p><p>append: and if you want to separate lists based on if they have logic, or whatnot, you can, and you can skip the dynamic_cast (which can be slow).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 12 May 2011 23:26:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks man!!! I&#39;m seeing &quot;-&gt;Input()&quot; and &quot;-&gt;Draw()&quot; so certainly this is what I need, I&#39;m going to be studding your code for the next 5 years... It&#39;s because I have no time, of course... of course... <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p><b>Edit:</b> Ok ok... A little one just to be sure. I&#39;m sending pointers to the list, so when I erase an object (a pointer to an object) I&#39;m not calling the destructor since it&#39;s a pointer... So... If I want to really destroy an object using list::erase I should create a list of objects instead of a list of pointers to objects right? sounds logic, just to be sure...</p><p>PS: Yves Rizoud, really sorry for give you no credits, you was talking about the exact same thing... I didn&#39;t realize by that time... I was so stupid.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Sat, 14 May 2011 23:10:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607301/917248#target">AMCerasoli</a> said:</div><div class="quote"><p>
If I want to really destroy an object using list::erase I should create a list of objects instead of a list of pointers to objects right?
</p></div></div><p>
If you want to use polymorphism you must use pointers (or references, iirc). To delete all objects from a list of pointers you&#39;d do:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">for</span><span class="k2">(</span>std::list<span class="k3">&lt;</span>BaseObject<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator it <span class="k3">=</span> Objects.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> Objects.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
    <span class="k1">delete</span> <span class="k3">*</span>it<span class="k2">;</span>
Objects.clear<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

If you want to delete a specific object:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">for</span><span class="k2">(</span>std::list<span class="k3">&lt;</span>BaseObject<span class="k3">*</span><span class="k3">&gt;</span><span class="k2">:</span><span class="k2">:</span>iterator it <span class="k3">=</span> Objects.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> Objects.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="k2">{</span>
    <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>Dead<span class="k2">)</span>
    <span class="k2">{</span>
       <span class="k1">delete</span> <span class="k3">*</span>it<span class="k2">;</span>
       it <span class="k3">=</span> Objects.erase<span class="k2">(</span>it<span class="k2">)</span><span class="k2">;</span>
    <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sat, 14 May 2011 23:20:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Man... I love you... Will you merry me? <img src="http://www.allegro.cc/forums/smileys/kiss.gif" alt=":-*" /> <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Sat, 14 May 2011 23:26:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607301/917248#target">AMCerasoli</a> said:</div><div class="quote"><p>Ok ok... A little one just to be sure. I&#39;m sending pointers to the list, so when I erase an object (a pointer to an object) I&#39;m not calling the destructor since it&#39;s a pointer... So... If I want to really destroy an object using list::erase I should create a list of objects instead of a list of pointers to objects right? sounds logic, just to be sure...</p></div></div><p>calling delete on the pointer will call the object&#39;s destructor.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sat, 14 May 2011 23:35:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s fine Thomas, but I&#39;m not going to marry you... I already ask it to SiegeLord...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Sat, 14 May 2011 23:51:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607301/917522#target">AMCerasoli</a> said:</div><div class="quote"><p>That&#39;s fine Thomas, but I&#39;m not going to marry you... I already ask it to SiegeLord...</p></div></div><p>I was just trying to help, not get in your pants <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sun, 15 May 2011 00:00:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hahahaha Sure Thomas, Sure... <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Sun, 15 May 2011 00:04:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think no one mentioned this: for the deletion to work correctly (call the proper destructors), you should declare the destructor of the base(s) class(es) as virtual (even if they do nothing).</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">class</span> BaseObject
<span class="k2">{</span>
public:
    <span class="k1">virtual</span> ~BaseObject<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span><span class="k2">}</span>   <span class="c">// This is mandatory, even if the body in the base class is empty.</span>
<span class="c">/* common methods and properties */</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">class</span> InheritedObject
<span class="k2">{</span>
public:
    ~InheritedObject<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"InheritedObject destructor called!"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span><span class="k2">}</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

This way this will work as intended:
</p><div class="source-code snippet"><div class="inner"><pre>BaseObject <span class="k3">*</span>obj <span class="k3">=</span> <span class="k1">new</span> InheritedObject<span class="k2">;</span>
...
<span class="k1">delete</span> obj<span class="k2">;</span>
</pre></div></div><p>

If BaseObject didn&#39;t have a virtual destructor, the line <i>delete obj</i> would only call BaseObject&#39;s destructor, and InheritedObject&#39;s destructor wouldn&#39;t be called. With the base virtual destructor both destructors will be called appropriately.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Oscar Giner)</author>
		<pubDate>Sun, 15 May 2011 01:16:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I have check that and it&#39;s true!, thank you!... you have just avoid another thread... Damn, I need to find an English forum, I&#39;m taking my English to the top...</p><p>PS: Now I understand why Code::Blocks create always a new class with a virtual destructor.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Sun, 15 May 2011 04:03:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh, and here&#39;s a bit that I think hasn&#39;t been stressed enough:
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607301/917242#target">AMCerasoli</a> said:</div><div class="quote"><p>
So, I know this sounds pedant, but there is a way to do what I do using inheritance and vectors, but using lists instead?
</p></div></div><p>
Interface-wise, lists and vectors are almost equivalent. Everything a list can do can also be done with a vector, and a few things more. Which one you choose depends on what you will be doing with it, and the general rule of thumb is:
</p><ul><li><p>lots of random insertions and deletions (that is, anywhere other than beginning and end), but no random access: list
</p></li><li><p>front and back insertions, random access: deque
</p></li><li><p>everything else: vector</p></li></ul><p>And here&#39;s why: vector and deque outperform list in everything except random insertion / removal, and severely so; especially random access is really really slow with lists (O(n)), which is why STL doesn&#39;t even bother implementing it.</p><p>So, rule of thumb boiled down:
</p><ul><li><p>use vector for everything, until you&#39;re seeing performance problems.
</p></li></ul></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Mon, 16 May 2011 11:11:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you look at BSP trees on <a href="http://en.wikipedia.org/wiki/Binary_space_partitioning">Wikipedia</a> they explain how it is used for the painters algorithm. Heres an example B-tree in C++, I modified the one on this <a href="http://cslibrary.stanford.edu/109/TreeListRecursion.html#c">page.</a></p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>
<span class="number">  2</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;stddef.h&gt;</span>
<span class="number">  4</span><span class="p">#include &lt;stdlib.h&gt;</span>
<span class="number">  5</span><span class="p">#include "B_tree_class.h"</span>
<span class="number">  6</span><span class="p">#include "node.h"</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  9</span><span class="k2">{</span>
<span class="number"> 10</span>  B_tree_class<span class="k3">*</span> BTREE<span class="k2">;</span>
<span class="number"> 11</span>  BTREE <span class="k3">=</span> <span class="k1">new</span> B_tree_class<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>  Node root <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 13</span>    Node head<span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>  BTREE-&gt;treeInsertHead<span class="k2">(</span><span class="k3">&amp;</span>root,<span class="n">4</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>  BTREE-&gt;treeInsertHead<span class="k2">(</span><span class="k3">&amp;</span>root,<span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>    BTREE-&gt;treeInsertHead<span class="k2">(</span><span class="k3">&amp;</span>root,<span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    BTREE-&gt;treeInsertHead<span class="k2">(</span><span class="k3">&amp;</span>root,<span class="n">3</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>    BTREE-&gt;treeInsertHead<span class="k2">(</span><span class="k3">&amp;</span>root,<span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>    head <span class="k3">=</span> BTREE-&gt;treeToList<span class="k2">(</span>root<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>
<span class="number"> 23</span>    BTREE-&gt;printList<span class="k2">(</span>head<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>    <span class="k1">return</span><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span><span class="k2">}</span>
</div></div><p>

B_tree_class.h
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span>
<span class="number">   2</span><span class="p">#ifndef B_TREE_CLASS_H</span>
<span class="number">   3</span><span class="p">#define B_TREE_CLASS_H</span>
<span class="number">   4</span><span class="p">#include "node.h"</span>
<span class="number">   5</span>
<span class="number">   6</span><span class="c">/* The node type from which both the tree and list are built */</span>
<span class="number">   7</span><span class="k1">typedef</span> <span class="k1">struct</span> node<span class="k3">*</span> Node<span class="k2">;</span>
<span class="number">   8</span><span class="c">/*</span>
<span class="number">   9</span><span class="c"> helper function -- given two list nodes, join them</span>
<span class="number">  10</span><span class="c"> together so the second immediately follow the first.</span>
<span class="number">  11</span><span class="c"> Sets the .next of the first and the .previous of the second.</span>
<span class="number">  12</span><span class="c">*/</span>
<span class="number">  13</span>
<span class="number">  14</span><span class="k1">class</span> B_tree_class
<span class="number">  15</span><span class="k2">{</span>
<span class="number">  16</span>    private:
<span class="number">  17</span>
<span class="number">  18</span>      Node root<span class="k2">;</span>
<span class="number">  19</span>      Node head<span class="k2">;</span>
<span class="number">  20</span>
<span class="number">  21</span>    public:
<span class="number">  22</span>
<span class="number">  23</span>    ~B_tree_class<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span><span class="k2">}</span>
<span class="number">  24</span>    B_tree_class<span class="k2">(</span><span class="k2">)</span>
<span class="number">  25</span>    <span class="k2">{</span>
<span class="number">  26</span>      root <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  27</span>    <span class="k2">}</span>
<span class="number">  28</span>    <span class="k1">void</span> join<span class="k2">(</span>Node a, Node b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  29</span>    Node append<span class="k2">(</span>Node a, Node b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  30</span>    Node treeToList<span class="k2">(</span>Node node<span class="k2">)</span><span class="k2">;</span>
<span class="number">  31</span>    Node newNode<span class="k2">(</span><span class="k1">int</span> data<span class="k2">)</span><span class="k2">;</span>
<span class="number">  32</span>    <span class="k1">void</span> treeInsertHead<span class="k2">(</span>Node<span class="k3">*</span> rootRef,<span class="k1">int</span> data<span class="k2">)</span><span class="k2">;</span>
<span class="number">  33</span>    <span class="k1">void</span> printList<span class="k2">(</span>Node current<span class="k2">)</span><span class="k2">;</span>
<span class="number">  34</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  35</span><span class="k1">void</span> B_tree_class::join<span class="k2">(</span>Node a, Node b<span class="k2">)</span>
<span class="number">  36</span><span class="k2">{</span>
<span class="number">  37</span>    a-&gt;large <span class="k3">=</span> b<span class="k2">;</span>
<span class="number">  38</span>    b-&gt;small <span class="k3">=</span> a<span class="k2">;</span>
<span class="number">  39</span><span class="k2">}</span>
<span class="number">  40</span><span class="c">/*</span>
<span class="number">  41</span><span class="c"> helper function -- given two circular doubly linked</span>
<span class="number">  42</span><span class="c"> lists, append them and return the new list.</span>
<span class="number">  43</span><span class="c">*/</span>
<span class="number">  44</span>Node B_tree_class::append<span class="k2">(</span>Node a, Node b<span class="k2">)</span>
<span class="number">  45</span><span class="k2">{</span>
<span class="number">  46</span>    Node aLast, bLast<span class="k2">;</span>
<span class="number">  47</span>
<span class="number">  48</span>    <span class="k1">if</span> <span class="k2">(</span>a<span class="k3">=</span><span class="k3">=</span>NULL<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  49</span>    <span class="k1">if</span> <span class="k2">(</span>b<span class="k3">=</span><span class="k3">=</span>NULL<span class="k2">)</span> <span class="k1">return</span><span class="k2">(</span>a<span class="k2">)</span><span class="k2">;</span>
<span class="number">  50</span>
<span class="number">  51</span>    aLast <span class="k3">=</span> a-&gt;small<span class="k2">;</span>
<span class="number">  52</span>    bLast <span class="k3">=</span> b-&gt;small<span class="k2">;</span>
<span class="number">  53</span>
<span class="number">  54</span>    join<span class="k2">(</span>aLast, b<span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>    join<span class="k2">(</span>bLast, a<span class="k2">)</span><span class="k2">;</span>
<span class="number">  56</span>
<span class="number">  57</span>    <span class="k1">return</span><span class="k2">(</span>a<span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span><span class="k2">}</span>
<span class="number">  59</span><span class="c">/*</span>
<span class="number">  60</span><span class="c"> --Recursion--</span>
<span class="number">  61</span><span class="c"> Given an ordered binary tree, recursively change it into</span>
<span class="number">  62</span><span class="c"> a circular doubly linked list which is returned.</span>
<span class="number">  63</span><span class="c">*/</span>
<span class="number">  64</span>Node B_tree_class::treeToList<span class="k2">(</span>Node node<span class="k2">)</span>
<span class="number">  65</span><span class="k2">{</span>
<span class="number">  66</span>    Node aList, bList<span class="k2">;</span>
<span class="number">  67</span>
<span class="number">  68</span>    <span class="k1">if</span> <span class="k2">(</span>node<span class="k3">=</span><span class="k3">=</span>NULL<span class="k2">)</span>
<span class="number">  69</span>    <span class="k1">return</span><span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>
<span class="number">  71</span>    <span class="c">/* recursively solve subtrees -- leap of faith! */</span>
<span class="number">  72</span>    aList <span class="k3">=</span> treeToList<span class="k2">(</span>node-&gt;small<span class="k2">)</span><span class="k2">;</span>
<span class="number">  73</span>    bList <span class="k3">=</span> treeToList<span class="k2">(</span>node-&gt;large<span class="k2">)</span><span class="k2">;</span>
<span class="number">  74</span>
<span class="number">  75</span>    <span class="c">/* Make a length-1 list ouf of the root */</span>
<span class="number">  76</span>    node-&gt;small <span class="k3">=</span> node<span class="k2">;</span>
<span class="number">  77</span>    node-&gt;large <span class="k3">=</span> node<span class="k2">;</span>
<span class="number">  78</span>
<span class="number">  79</span>    <span class="c">/* Append everything together in sorted order */</span>
<span class="number">  80</span>    aList <span class="k3">=</span> append<span class="k2">(</span>aList, node<span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>    aList <span class="k3">=</span> append<span class="k2">(</span>aList, bList<span class="k2">)</span><span class="k2">;</span>
<span class="number">  82</span>
<span class="number">  83</span>  head <span class="k3">=</span> aList<span class="k2">;</span>
<span class="number">  84</span>
<span class="number">  85</span>    <span class="k1">return</span><span class="k2">(</span>aList<span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span><span class="k2">}</span>
<span class="number">  87</span><span class="c">/* Create a new node */</span>
<span class="number">  88</span>Node B_tree_class::newNode<span class="k2">(</span><span class="k1">int</span> data<span class="k2">)</span>
<span class="number">  89</span><span class="k2">{</span>
<span class="number">  90</span>    Node node <span class="k3">=</span> <span class="k2">(</span>Node<span class="k2">)</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span><span class="k1">struct</span> node<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>    node-&gt;set_data<span class="k2">(</span>data<span class="k2">)</span><span class="k2">;</span>
<span class="number">  92</span>    node-&gt;small <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  93</span>    node-&gt;large <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  94</span>    <span class="k1">return</span><span class="k2">(</span>node<span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span><span class="k2">}</span>
<span class="number">  96</span><span class="c">/* Add a new node into a tree */</span>
<span class="number">  97</span><span class="k1">void</span> B_tree_class::treeInsertHead<span class="k2">(</span>Node<span class="k3">*</span> rootRef,<span class="k1">int</span> data<span class="k2">)</span>
<span class="number">  98</span><span class="k2">{</span>
<span class="number">  99</span>  root <span class="k3">=</span> <span class="k3">*</span>rootRef<span class="k2">;</span>
<span class="number"> 100</span>
<span class="number"> 101</span>    <span class="k1">if</span> <span class="k2">(</span>root <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 102</span>    <span class="k3">*</span>rootRef <span class="k3">=</span> newNode<span class="k2">(</span>data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 103</span>    <span class="k1">else</span>
<span class="number"> 104</span>    <span class="k2">{</span>
<span class="number"> 105</span>        <span class="k1">if</span> <span class="k2">(</span>data <span class="k3">&lt;</span><span class="k3">=</span> root-&gt;return_data<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 106</span>      treeInsertHead<span class="k2">(</span><span class="k3">&amp;</span><span class="k2">(</span>root-&gt;small<span class="k2">)</span>,data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 107</span>        <span class="k1">else</span>
<span class="number"> 108</span>      treeInsertHead<span class="k2">(</span><span class="k3">&amp;</span><span class="k2">(</span>root-&gt;large<span class="k2">)</span>,data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>    <span class="k2">}</span>
<span class="number"> 110</span><span class="k2">}</span>
<span class="number"> 111</span><span class="k1">void</span> B_tree_class::printList<span class="k2">(</span>Node current<span class="k2">)</span>
<span class="number"> 112</span><span class="k2">{</span>
<span class="number"> 113</span>    <span class="k1">while</span><span class="k2">(</span>current <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 114</span>    <span class="k2">{</span>
<span class="number"> 115</span>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d "</span>, current-&gt;return_data<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>        current <span class="k3">=</span> current-&gt;large<span class="k2">;</span>
<span class="number"> 117</span>        <span class="k1">if</span> <span class="k2">(</span>current <span class="k3">=</span><span class="k3">=</span> head<span class="k2">)</span>
<span class="number"> 118</span>      <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 119</span>    <span class="k2">}</span>
<span class="number"> 120</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 121</span><span class="k2">}</span>
<span class="number"> 122</span><span class="p">#endif</span>
</div></div><p>

node.h</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#ifndef NODE_H</span>
<span class="number">  2</span><span class="p">#define NODE_H</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">class</span> node
<span class="number">  5</span><span class="k2">{</span>
<span class="number">  6</span>  public:
<span class="number">  7</span>
<span class="number">  8</span>    <span class="k1">int</span> data<span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span>    public:
<span class="number"> 11</span>
<span class="number"> 12</span>    node<span class="k3">*</span> small<span class="k2">;</span>
<span class="number"> 13</span>    node<span class="k3">*</span> large<span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>    node<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span><span class="k2">}</span>
<span class="number"> 16</span>    ~node<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span><span class="k2">}</span>
<span class="number"> 17</span>    <span class="k1">int</span> return_data<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    <span class="k1">void</span> set_data<span class="k2">(</span><span class="k1">int</span> value<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 20</span><span class="k1">int</span> node::return_data<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 21</span><span class="k2">{</span>
<span class="number"> 22</span>  <span class="k1">return</span> data<span class="k2">;</span>
<span class="number"> 23</span><span class="k2">}</span>
<span class="number"> 24</span><span class="k1">void</span> node::set_data<span class="k2">(</span><span class="k1">int</span> value<span class="k2">)</span>
<span class="number"> 25</span><span class="k2">{</span>
<span class="number"> 26</span>  data <span class="k3">=</span> value<span class="k2">;</span>
<span class="number"> 27</span><span class="k2">}</span>
<span class="number"> 28</span><span class="p">#endif</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (verthex)</author>
		<pubDate>Mon, 16 May 2011 21:38:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yhea I could use vectors too, but I don&#39;t need random access to my objects, I&#39;m taking OOP to the top, I&#39;m already thinking in how to implement an engine, you know send packages to the engine and retrieve them, and a list is perfect.</p><div class="quote_container"><div class="title">cplusplus.com said:</div><div class="quote"><p>
Lists perform generally better in inserting, extracting and moving elements in any position within the container, and therefore also in algorithms that make intensive use of these, like sorting algorithms.
</p></div></div><p> </p><p>I think this is perfect for any video game which is using extensively OOP, where objects draw themselves and send packages of data to an engine and vice verse.</p><p>Obvisuly I don&#39;t need this to my trivia game <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" /> , I just can&#39;t avoid thinking in all this already...  I&#39;m even sending the events directly to the objects and they will produce a package of info about their position etc, to perform collision detection and things like that. I think sending event to objects isn&#39;t a bad idea. And objects which make use of the keyboard (a character) can use it, another object which needs to only know when to draw and do the logic, is going to do just that. </p><p><span class="remote-thumbnail"><span class="json">{"name":"604126","src":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/6\/7\/679791794e4beadfea7ec752c3c6f12d.jpg","w":470,"h":338,"tn":"\/\/djungxnpq2nug.cloudfront.net\/image\/cache\/6\/7\/679791794e4beadfea7ec752c3c6f12d"}</span><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/6/7/679791794e4beadfea7ec752c3c6f12d-240.jpg" alt="604126" width="240" height="172" /></span></p><p>That way I don&#39;t need to call a lot of functions from outside the objects. I want to only call one function (<span class="source-code"><span class="k2">(</span><span class="k3">*</span><span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>logic<span class="k2">(</span>DATA<span class="k2">)</span></span>) which is going to return a <span class="source-code">DATA</span> package which is going to be used by the engine and at the same time is going to send the DATA package modified to the object with the info already processed by the engine... I don&#39;t know something like that. Probably I will need to call two functions <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> instead of one...</p><p>So I send the DATA to the object with the previous state, the object do its logic which involves drawing input etc... and send its current state to the engine again.</p><p>Anyway, thank you guys to open my mind, I have learned a lot of thing in these 3 days about C++ I was just learning Allegro Allegro and more Allegro... Actually I already knew them I have study them, but it&#39;s like you don&#39;t know what to do whit them. It&#39;s like yhea I have all this knowledge but then what I do with all this? hahaha it&#39;s weird... </p><p>I have see the examples but I don&#39;t like the way they&#39;re done, they use C, and even when C++ is not so different in its syntax, it&#39;s very different at the moment of creating a game or a program. Well, at least that I think...</p><p>I have see the haiku example it&#39;s incredible how in that game <span class="source-code"><a href="http://www.allegro.cc/manual/al_draw_tinted_scaled_rotated_bitmap"><span class="a">al_draw_tinted_scaled_rotated_bitmap</span></a><span class="k2">(</span><span class="k2">)</span></span> is just called once... in ALL the game, and that is the only drawing call. There are structs inside structs, incredible... but I prefer C++. hohhho <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Mon, 16 May 2011 22:22:36 +0000</pubDate>
	</item>
</rss>
