<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Pointers and arrays.</title>
		<link>http://www.allegro.cc/forums/view/612017</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 09 Feb 2013 19:01:41 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><s>I&#39;ve got a problem.</s> Check the edit.</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>Obj objectArray<span class="k2">[</span><span class="n">255</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  2</span>Obj <span class="k3">*</span>activeObjects<span class="k2">[</span><span class="n">255</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  3</span>    <span class="k1">if</span><span class="k2">(</span>doLogic <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  4</span>      doLogic <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  5</span>      <span class="k1">if</span><span class="k2">(</span>Input::mouse<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  6</span>      <span class="k2">{</span>
<span class="number">  7</span>        
<span class="number">  8</span>        Input::mouse<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  9</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">80</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 10</span>        <span class="k2">{</span>
<span class="number"> 11</span>          <span class="k1">float</span> r2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>RAND_MAX<span class="k3">/</span><a href="http://www.allegro.cc/manual/ALLEGRO_PI"><span class="a">ALLEGRO_PI</span></a><span class="k3">*</span><span class="n">4</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>          objectArray<span class="k2">[</span>nextStartingIndex<span class="k2">]</span>.lifespan <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 13</span>          objectArray<span class="k2">[</span>nextStartingIndex<span class="k2">]</span>.rotation <span class="k3">=</span> r2<span class="k2">;</span>
<span class="number"> 14</span>          objectArray<span class="k2">[</span>nextStartingIndex<span class="k2">]</span>.velX <span class="k3">=</span> <span class="k3">-</span><span class="n">2</span> <span class="k3">+</span> <span class="k2">(</span><span class="n">4</span> <span class="k3">*</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span>RAND_MAX <span class="k3">+</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>          objectArray<span class="k2">[</span>nextStartingIndex<span class="k2">]</span>.velY <span class="k3">=</span> <span class="k3">-</span><span class="n">3</span> <span class="k3">+</span> <span class="k2">(</span><span class="n">4</span> <span class="k3">*</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span>RAND_MAX <span class="k3">+</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>          objectArray<span class="k2">[</span>nextStartingIndex<span class="k2">]</span>.x <span class="k3">=</span> Input::mouseX<span class="k2">;</span>
<span class="number"> 17</span>          objectArray<span class="k2">[</span>nextStartingIndex<span class="k2">]</span>.y <span class="k3">=</span> Input::mouseY<span class="k2">;</span>
<span class="number"> 18</span>          activeObjects<span class="k2">[</span>nextStartingIndex<span class="k2">]</span> <span class="k3">=</span> <span class="k3">&amp;</span>objectArray<span class="k2">[</span>nextStartingIndex<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 19</span>          nextStartingIndex<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 20</span>          activeObjectsCount<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 21</span>          <span class="k1">if</span><span class="k2">(</span>nextStartingIndex <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">255</span><span class="k2">)</span> nextStartingIndex <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 22</span>        <span class="k2">}</span>
<span class="number"> 23</span>      <span class="k2">}</span>
<span class="number"> 24</span>
<span class="number"> 25</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> activeObjectsCount<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 26</span>      <span class="k2">{</span>
<span class="number"> 27</span>        activeObjects<span class="k2">[</span>i<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>lifespan--<span class="k2">;</span>
<span class="number"> 28</span>        activeObjects<span class="k2">[</span>i<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>velY <span class="k3">+</span><span class="k3">=</span> gravity<span class="k2">;</span>
<span class="number"> 29</span>        activeObjects<span class="k2">[</span>i<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>x <span class="k3">+</span><span class="k3">=</span> activeObjects<span class="k2">[</span>i<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>velX<span class="k2">;</span>
<span class="number"> 30</span>        activeObjects<span class="k2">[</span>i<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>y <span class="k3">+</span><span class="k3">=</span> activeObjects<span class="k2">[</span>i<span class="k2">]</span><span class="k3">-</span><span class="k3">&gt;</span>velY<span class="k2">;</span>
<span class="number"> 31</span>      <span class="k2">}</span>
<span class="number"> 32</span>    <span class="k2">}</span>
</div></div><p>

(I know that the activeObjectsCount isn&#39;t being decremented so it&#39;ll just increase to beyond 255 and cause out of bounds.)</p><p>I&#39;ve tried a couple of different ways to deal with the pointers in the activeObjects array.</p><p>I want to do it this way because having a list of pointers referencing the active objects in the objectArray eliminates the need to loop through the entire objectArray.</p><p>I clearly don&#39;t understand enough about pointers and / or arrays. I&#39;ve tried to delete the element, I&#39;ve found that doesn&#39;t make sense since it&#39;s not a dynamic array.</p><p>Could I do this with an array of Obj pointers? I&#39;ve tried making a dynamic array of object pointers but the compiler kept complaining at me in every way I tried to do it. except if I did:</p><div class="source-code snippet"><div class="inner"><pre>Obj <span class="k3">*</span>activeObjects<span class="k2">;</span>

activeObjects <span class="k3">=</span> <span class="k1">new</span> Obj<span class="k2">;</span>
</pre></div></div><p>

but that doesn&#39;t make sense to me. it points at directly to a new object not it&#39;s address? What?</p><p>I do realize that I could do this with one of the standard containers, but I want to do it with arrays for educational reasons.</p><p>Also, I&#39;m sorry if I explained it badly. It&#39;s 9 am and I haven&#39;t slept yet, and I&#39;m sick on top of that.</p><p>Edit: After some more research, it seems like what I want to do is impossible? I&#39;d have to create a new pointer array and copy the elements every time I wanted to add or remove elements? Guess I&#39;ve got to switch to lists then.</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="k1">if</span><span class="k2">(</span>doLogic <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  3</span>      doLogic <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  4</span>      <span class="k1">if</span><span class="k2">(</span>Input::mouse<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span>
<span class="number">  5</span>      <span class="k2">{</span>
<span class="number">  6</span>        
<span class="number">  7</span>        Input::mouse<span class="k2">[</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  8</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">80</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number">  9</span>        <span class="k2">{</span>
<span class="number"> 10</span>          <span class="k1">float</span> r2 <span class="k3">=</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>RAND_MAX<span class="k3">/</span><a href="http://www.allegro.cc/manual/ALLEGRO_PI"><span class="a">ALLEGRO_PI</span></a><span class="k3">*</span><span class="n">4</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>          objList.push_back<span class="k2">(</span>Obj<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>          objList.back<span class="k2">(</span><span class="k2">)</span>.lifespan <span class="k3">=</span> <span class="n">160</span><span class="k2">;</span>
<span class="number"> 13</span>          objList.back<span class="k2">(</span><span class="k2">)</span>.rotation <span class="k3">=</span> r2<span class="k2">;</span>
<span class="number"> 14</span>          objList.back<span class="k2">(</span><span class="k2">)</span>.velX <span class="k3">=</span> <span class="k3">-</span><span class="n">2</span> <span class="k3">+</span> <span class="k2">(</span><span class="n">4</span> <span class="k3">*</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span>RAND_MAX <span class="k3">+</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>          objList.back<span class="k2">(</span><span class="k2">)</span>.velY <span class="k3">=</span> <span class="k3">-</span><span class="n">3</span> <span class="k3">+</span> <span class="k2">(</span><span class="n">4</span> <span class="k3">*</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span>RAND_MAX <span class="k3">+</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>          objList.back<span class="k2">(</span><span class="k2">)</span>.x <span class="k3">=</span> Input::mouseX<span class="k2">;</span>
<span class="number"> 17</span>          objList.back<span class="k2">(</span><span class="k2">)</span>.y <span class="k3">=</span> Input::mouseY<span class="k2">;</span>
<span class="number"> 18</span>          pObjList.push_back<span class="k2">(</span><span class="k3">&amp;</span>objList.back<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>          nextStartingIndex<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 20</span>        <span class="k2">}</span>
<span class="number"> 21</span>      <span class="k2">}</span>
<span class="number"> 22</span>
<span class="number"> 23</span>      <span class="k1">for</span><span class="k2">(</span><span class="k1">auto</span> it <span class="k3">=</span> pObjList.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> pObjList.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span><span class="k2">)</span>
<span class="number"> 24</span>      <span class="k2">{</span>
<span class="number"> 25</span>        <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>lifespan--<span class="k2">;</span>
<span class="number"> 26</span>        <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>velY <span class="k3">+</span><span class="k3">=</span> gravity<span class="k2">;</span>
<span class="number"> 27</span>        <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>x <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>velX<span class="k2">;</span>
<span class="number"> 28</span>        <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>y <span class="k3">+</span><span class="k3">=</span> <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>velY<span class="k2">;</span>
<span class="number"> 29</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>lifespan <span class="k3">&lt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 30</span>        <span class="k2">{</span>
<span class="number"> 31</span>          it <span class="k3">=</span> pObjList.erase<span class="k2">(</span>it<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>        <span class="k2">}</span><span class="k1">else</span> it<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 33</span>      <span class="k2">}</span>
<span class="number"> 34</span>    <span class="k2">}</span>
<span class="number"> 35</span>
<span class="number"> 36</span>
<span class="number"> 37</span>    <span class="k1">if</span><span class="k2">(</span>redraw <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 38</span>    <span class="k2">{</span>
<span class="number"> 39</span>      redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 40</span>
<span class="number"> 41</span>      <span class="k1">for</span><span class="k2">(</span><span class="k1">auto</span> it <span class="k3">=</span> pObjList.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> it <span class="k3">!</span><span class="k3">=</span> pObjList.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>       
<span class="number"> 42</span>      <span class="k2">{</span>
<span class="number"> 43</span>        <a href="http://www.allegro.cc/manual/al_identity_transform"><span class="a">al_identity_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>        <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="k3">-</span><span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>x<span class="k3">+</span><span class="n">5</span>, <span class="k3">-</span><span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>y<span class="k3">+</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>        <a href="http://www.allegro.cc/manual/al_scale_transform"><span class="a">al_scale_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="n">2</span>, <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>        <a href="http://www.allegro.cc/manual/al_rotate_transform"><span class="a">al_rotate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform, <a href="http://www.allegro.cc/manual/ALLEGRO_PI"><span class="a">ALLEGRO_PI</span></a><span class="k3">*</span><span class="n">1</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 47</span>        <a href="http://www.allegro.cc/manual/al_translate_transform"><span class="a">al_translate_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform, <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>x<span class="k3">+</span><span class="n">5</span>, <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>y<span class="k3">+</span><span class="n">5</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>        <a href="http://www.allegro.cc/manual/al_use_transform"><span class="a">al_use_transform</span></a><span class="k2">(</span><span class="k3">&amp;</span>transform<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 49</span>        <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><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>x, <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>y, <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>x<span class="k3">+</span><span class="n">10</span>, <span class="k2">(</span><span class="k3">*</span>it<span class="k2">)</span><span class="k3">-</span><span class="k3">&gt;</span>y<span class="k3">+</span><span class="n">10</span>, <a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 50</span>      <span class="k2">}</span>
<span class="number"> 51</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span>    <span class="k2">}</span>
</div></div><p>

is what I&#39;m doing here terribly expensive / ineffective? cause I was running debug with 1 std::cout in one of the for loops and the fps was roughly 5.</p><p>Removing the std::cout fixed the fps, but I&#39;m still concerned. Switching transforms like that, does that cost a lot? Also, my rectangles are scaling but not rotating? I know all of them are in use, so the second list is not needed and is slowing down my program but only a small part of them will be in use later on.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Gnamra)</author>
		<pubDate>Fri, 08 Feb 2013 14:13:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>(stl) Lists are quite slow, but they shouldn&#39;t drop your fps that low.<br />Arrays are the fastest solution, albeit not the most dynamic.</p><p>To create an array of pointers this is the syntax you should use:
</p><div class="source-code snippet"><div class="inner"><pre>Obj <span class="k3">*</span><span class="k3">*</span>activeObjects<span class="k2">;</span>

activeObjects <span class="k3">=</span> newObj<span class="k3">*</span><span class="k2">[</span>length<span class="k2">]</span><span class="k2">;</span>
</pre></div></div><p>

An easy and fast way to remove an object using a collection like a vector is by moving the element to the back and then removing the last element.</p><p>This won&#39;t preserve the order, but it&#39;s quite fast. It can even be done using a simple array, although it won&#39;t automatically handle resizing in case the container is too small.</p><p>edit: fixed grammar errors, in both my post and code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (l j)</author>
		<pubDate>Fri, 08 Feb 2013 16:08:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I tried using an array of pointers but I just couldn&#39;t get it to work. </p><p>The length is varying, it could be 40 or over 200 and I don&#39;t know what to do with all the pointers pointing to inactive objects. I don&#39;t want to loop through them, that&#39;s what I&#39;m trying to prevent.</p><p>I tried removing elements from the array of pointers but that crashed and gave me errors no matter what I tried. All my searching has given me that I have to create a new array with the elements I want and get rid of the old one. (Is that perhaps how vectors work?)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Gnamra)</author>
		<pubDate>Fri, 08 Feb 2013 16:24:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Rather than starting a thread with a big[, ugly] code block you should first describe what you&#39;re trying to do, why, and what the thread is about (i.e., what you want to discuss or need help with).</p><p>Second, you should be try to be disciplined with your code. Every space, tab, brace or semi-colon should be intentional. We don&#39;t want to read through code that jumps around like this:</p><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/612017/976519#target">Gnamra</a> said:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre>Obj objectArray<span class="k2">[</span><span class="n">255</span><span class="k2">]</span><span class="k2">;</span>
Obj <span class="k3">*</span>activeObjects<span class="k2">[</span><span class="n">255</span><span class="k2">]</span><span class="k2">;</span>
    <span class="k1">if</span><span class="k2">(</span>doLogic <span class="k3">&amp;</span><span class="k3">&amp;</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>event_queue<span class="k2">)</span><span class="k2">)</span><span class="k2">{</span>
      doLogic <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
      <span class="k1">if</span><span class="k2">(</span>Input::mouse<span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span>
</pre></div></div><p>
</p></div></div><p>

If you&#39;re concerned about performance then something like this doesn&#39;t make sense:</p><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/612017/976519#target">Gnamra</a> said:</div><div class="quote"><p>
</p><div class="source-code snippet"><div class="inner"><pre>objList.push_back<span class="k2">(</span>Obj<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
objList.back<span class="k2">(</span><span class="k2">)</span>.lifespan <span class="k3">=</span> <span class="n">160</span><span class="k2">;</span>
objList.back<span class="k2">(</span><span class="k2">)</span>.rotation <span class="k3">=</span> r2<span class="k2">;</span>
objList.back<span class="k2">(</span><span class="k2">)</span>.velX <span class="k3">=</span> <span class="k3">-</span><span class="n">2</span> <span class="k3">+</span> <span class="k2">(</span><span class="n">4</span> <span class="k3">*</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span>RAND_MAX <span class="k3">+</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
objList.back<span class="k2">(</span><span class="k2">)</span>.velY <span class="k3">=</span> <span class="k3">-</span><span class="n">3</span> <span class="k3">+</span> <span class="k2">(</span><span class="n">4</span> <span class="k3">*</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span>RAND_MAX <span class="k3">+</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
objList.back<span class="k2">(</span><span class="k2">)</span>.x <span class="k3">=</span> Input::mouseX<span class="k2">;</span>
objList.back<span class="k2">(</span><span class="k2">)</span>.y <span class="k3">=</span> Input::mouseY<span class="k2">;</span>
</pre></div></div><p>
</p></div></div><p>

You are needlessly invoking <span class="source-code">std::list::back</span> repeatedly. It makes better sense to create the object first and push it into the list afterward.</p><div class="source-code snippet"><div class="inner"><pre>Obj obj<span class="k2">;</span>
obj.lifespan <span class="k3">=</span> <span class="n">160</span><span class="k2">;</span>
obj.rotation <span class="k3">=</span> r2<span class="k2">;</span>
obj.velX <span class="k3">=</span> <span class="k3">-</span><span class="n">2</span> <span class="k3">+</span> <span class="k2">(</span><span class="n">4</span> <span class="k3">*</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span>RAND_MAX <span class="k3">+</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
obj.velY <span class="k3">=</span> <span class="k3">-</span><span class="n">3</span> <span class="k3">+</span> <span class="k2">(</span><span class="n">4</span> <span class="k3">*</span> <span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_637.html" target="_blank">rand</a><span class="k2">(</span><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span>RAND_MAX <span class="k3">+</span> <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
obj.x <span class="k3">=</span> Input::mouseX<span class="k2">;</span>
obj.y <span class="k3">=</span> Input::mouseY<span class="k2">;</span>
objList.push_back<span class="k2">(</span>obj<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

That said, taking the address of an <span class="source-code">std::list</span> element is also probably wrong and dangerous. If you want pointers to things then you need to be in control of the pointers. You could use <span class="source-code"><span class="k1">operator</span> <span class="k1">new</span></span> to allocate your objects and store their pointers in your collections instead. You should use smart pointers to help with that to avoid memory leaks or ugly and error-prone cleanup code.</p><p>Yes, the STL containers allocate new buffers when they run out of space. It&#39;s good for you to practice this yourself for educational purposes, but should encapsulate the functionality into an object, just as the STL does. You don&#39;t want to be manually manipulating these low-level arrays everywhere. You want to put that in a single place and reuse it. It&#39;s hard to get right and you only want to have to get it right one time.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Fri, 08 Feb 2013 21:54:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s not really clear what you call &quot;inactive&quot;. If things may move from one state to the other, an efficient method would be to manage two different std:lists of pointers : a list of actives, and a list of inactives.<br />When something becomes inactive you remove it from the first list (without deleting the actual object), and add it to the other one. The first list loses a pointer, the second list gains a pointer. The value of these pointers is the same : the address in memory of the actual object, which doesn&#39;t change in the process.<br />When the object is no longer needed at all, you delete it and remove it from whichever list it&#39;s in.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Audric)</author>
		<pubDate>Fri, 08 Feb 2013 22:15:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/612017/976530#target">Audric</a> said:</div><div class="quote"><p>
The value of these pointers is the same : the address in memory of the actual object, which doesn&#39;t change in the process.
</p></div></div><p>
<b>If</b> you allocate it on the heap with <span class="source-code"><span class="k1">new</span></span>. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Fri, 08 Feb 2013 22:50:09 +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/612017/976528#target">bamccaig</a> said:</div><div class="quote"><p> Rather than starting a thread with a big[, ugly] code block you should first describe what you&#39;re trying to do, why, and what the thread is about (i.e., what you want to discuss or need help with).
</p></div></div><p>

You&#39;re right, I&#39;m sorry. The whole post ended up being a huge mess.<br />My code isn&#39;t like that, I just copied some of the stuff I thought relevant. I should have spent some time making it look less messy. Again, I&#39;m sorry.</p><div class="quote_container"><div class="title">bamccaig said:</div><div class="quote"><p> <br />You are needlessly invoking std::list::back repeatedly. It makes better sense to create the object first and push it into the list afterward.
</p></div></div><p>

Oh, I thought since back returns an address and using that to mess with the element in the list wouldn&#39;t be that bad. </p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/612017/976530#target">Audric</a> said:</div><div class="quote"><p> It&#39;s not really clear what you call &quot;inactive&quot;. </p></div></div><p>
Oh, uhm what I mean is that when the lifespan integer reaches 0 it should no longer do anything. It should not be pointed to in the active list and when more objects are needed it can use the objects that has a lifespan of 0 or less.</p><p>I really didn&#39;t have a problem with the array of elements since it&#39;s constant. But the array of pointers pointing to the various elements in the object array. When those objects have their lifetime set to 0 they are ready to be used again and should no longer be pointed to until they are used again.</p><p>I couldn&#39;t find out what to do with the pointers pointing to the elements with a lifespan of 0 or less. I want to remove them from the array, shrinking the array by one and when more objects are created they will have a pointer pointing to them.<br /> <br />An integer will count how many are active and I will only have to loop through the active ones instead of going through the entire list of objects and checking which ones have a lifespan of 0 or less.</p><p>I hope I&#39;ve made myself clearer.</p><p>Perhaps a better question for you guys would be: How would you manage an array containing pointers to objects within a different array, how can I add or remove elements from the array containing the pointers.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Gnamra)</author>
		<pubDate>Sat, 09 Feb 2013 04:40:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You <a href="http://www.sgi.com/tech/stl/">need to learn the STL</a>, and<br />you <a href="http://cplusplus.com/doc/tutorial/">need to learn C++,</a><br />and <a href="http://cplusplus.com/doc/tutorial/dynamic/">about dynamic memory</a>.</p><p>Use either a std::list, or a std::vector. Both will work fairly well for your purposes here. Use erase(iterator) or swap pointers for a vector and pop_back().
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 09 Feb 2013 06:04:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/612017/976539#target">Gnamra</a> said:</div><div class="quote"><p>
Oh, I thought since back returns an address and using that to mess with the element in the list wouldn&#39;t be that bad.
</p></div></div><p>
In practice the performance penalty is probably negligible, though only a profiler can really identify whether it&#39;s a problem. Performance isn&#39;t the main reason to change it. It&#39;s just a bonus. The main reason is readability and maintainability. It&#39;s much easier to read code that does only what it needs to do. If you see the same expression repeated over and over again then it&#39;s probably a good sign that you should refactor the code.
</p><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/612017/976539#target">Gnamra</a> said:</div><div class="quote"><p>
When those objects have their lifetime set to 0 they are ready to be used again and should no longer be pointed to until they are used again.
</p></div></div><p>
&quot;No longer be pointed to&quot; is basically the definition of a memory leak. At least with heap-allocated memory, and you don&#39;t want to use pointers to stack-allocated memory unless you&#39;re passing it deeper into the call stack. So you may need to clarify what you mean here.
</p><div class="quote_container"><div class="title"><a href="https://www.allegro.cc/forums/thread/612017/976539#target">Gnamra</a> said:</div><div class="quote"><p>
I couldn&#39;t find out what to do with the pointers pointing to the elements with a lifespan of 0 or less. I want to remove them from the array, shrinking the array by one and when more objects are created they will have a pointer pointing to them.<br /> <br />An integer will count how many are active and I will only have to loop through the active ones instead of going through the entire list of objects and checking which ones have a lifespan of 0 or less.</p><p>I hope I&#39;ve made myself clearer.</p><p>Perhaps a better question for you guys would be: How would you manage an array containing pointers to objects within a different array, how can I add or remove elements from the array containing the pointers.
</p></div></div><p>
Arrays can&#39;t really be resized. An array is just a contiguous sequence of memory, and typically all you can do is ask for a new contiguous sequence of memory. So you basically have two options: reallocate and copy the array whenever the number of elements changes (an expensive operation) or just use an <span class="source-code">is_active</span> method to skip over inactive objects when you process the array. An alternative option is to move inactive objects to the end of the array and keep a count of active objects. That way you know that you only need to process the first <span class="source-code">num_active</span> elements and can skip the tail. Which one is best will be context specific.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Sat, 09 Feb 2013 10:05:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Actually, bamccaig, in C, arrays could be resized, if you use realloc. It&#39;s not guaranteed, but many implementations of realloc may just make the reserved area  your pointer points to bigger if that is possible.</p><p>A for the original poster: Why not learn C first before learning C++? <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> <br />You&#39;ll only have to learn about pointers and malloc realloc/calloc and free then. <br />Some untested code to show the idea:<br /> 
</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">typedef</span> <span class="k1">struct</span> GameObject_ GameObject<span class="k2">;</span>
<span class="number">   2</span><span class="k1">typedef</span> <span class="k1">struct</span> GameObjectArray_ GameObjectArray<span class="k2">;</span>
<span class="number">   3</span>
<span class="number">   4</span><span class="k1">struct</span> GameObject <span class="k2">{</span>
<span class="number">   5</span>  <span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span>
<span class="number">   6</span>  <span class="k1">float</span> x<span class="k2">;</span>
<span class="number">   7</span>  <span class="k1">float</span> y<span class="k2">;</span>  
<span class="number">   8</span>  <span class="k1">int</span> active<span class="k2">;</span>  
<span class="number">   9</span>  <span class="c">/* add anything you need here. */</span> 
<span class="number">  10</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  11</span>
<span class="number">  12</span><span class="k1">struct</span> GameObjectArray <span class="k2">{</span> 
<span class="number">  13</span>  GameObject <span class="k3">*</span><span class="k3">*</span> data<span class="k2">;</span>
<span class="number">  14</span>  <span class="k1">int</span> size<span class="k2">;</span>
<span class="number">  15</span>  <span class="k1">int</span> used<span class="k2">;</span>
<span class="number">  16</span><span class="k2">}</span>
<span class="number">  17</span>
<span class="number">  18</span>GameObjectArray <span class="k3">*</span> gameobjectarray_resize<span class="k2">(</span>GameObjectArray <span class="k3">*</span> self, <span class="k1">int</span> size<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  19</span>  GameObject <span class="k3">*</span><span class="k3">*</span> aid<span class="k2">;</span>
<span class="number">  20</span>  aid <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_648.html" target="_blank">realloc</a><span class="k2">(</span>self-&gt;data, size<span class="k2">)</span><span class="k2">;</span> 
<span class="number">  21</span>  <span class="k1">if</span><span class="k2">(</span>aid<span class="k2">)</span> <span class="k2">{</span> 
<span class="number">  22</span>    self-&gt;data <span class="k3">=</span> aid<span class="k2">;</span>  
<span class="number">  23</span>    <span class="k1">return</span> self<span class="k2">;</span>
<span class="number">  24</span>  <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  25</span>    <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  26</span>  <span class="k2">}</span>
<span class="number">  27</span><span class="k2">}</span>
<span class="number">  28</span>
<span class="number">  29</span>GameObjectArray <span class="k3">*</span> gameobjectarray_init<span class="k2">(</span>GameObjectArray <span class="k3">*</span> self, <span class="k1">int</span> size<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  30</span>  <span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span>
<span class="number">  31</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>self<span class="k2">)</span> <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  32</span>  self-&gt;size <span class="k3">=</span> size<span class="k2">;</span>
<span class="number">  33</span>  self-&gt;used <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  34</span>  self-&gt;data <span class="k3">=</span> <span class="k2">(</span>GameObject <span class="k3">*</span><span class="k3">*</span><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>GameObject<span class="k3">*</span><span class="k2">)</span> <span class="k3">*</span> size<span class="k2">)</span><span class="k2">;</span>
<span class="number">  35</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>self-&gt;data<span class="k2">)</span> <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  36</span>  <span class="k1">for</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">&lt;</span> self-&gt;size<span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span> self-&gt;data<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span> <span class="k3">=</span> NULL<span class="k2">;</span> <span class="k2">}</span>
<span class="number">  37</span>  <span class="k1">return</span> self<span class="k2">;</span>
<span class="number">  38</span><span class="k2">}</span>
<span class="number">  39</span>
<span class="number">  40</span><span class="k1">void</span> gameobjectarray_done<span class="k2">(</span>GameObjectArray <span class="k3">*</span> self<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  41</span>  <span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span>
<span class="number">  42</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>self<span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span>
<span class="number">  43</span>  <span class="k1">for</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">&lt;</span> self-&gt;size<span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>self-&gt;data<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
<span class="number">  44</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>self-&gt;data<span class="k2">)</span><span class="k2">;</span>
<span class="number">  45</span><span class="k2">}</span>
<span class="number">  46</span>
<span class="number">  47</span><span class="k1">int</span> gameobjectarray_putobject<span class="k2">(</span>GameObjectArray <span class="k3">*</span> self, GameObject <span class="k3">*</span> gob<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  48</span>  <span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span>
<span class="number">  49</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>self<span class="k2">)</span> <span class="k1">return</span><span class="k2">;</span>
<span class="number">  50</span>  <span class="k1">if</span> <span class="k2">(</span>self-&gt;used <span class="k3">&gt;</span><span class="k3">=</span> self-&gt;size<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  51</span>     <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>gameobjectarray_resize<span class="k2">(</span>self, self-&gt;size <span class="k3">+</span> <span class="n">128</span><span class="k2">)</span><span class="k2">)</span> <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  52</span>  <span class="k2">}</span>
<span class="number">  53</span>  <span class="k1">for</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">&lt;</span> self-&gt;size<span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span> 
<span class="number">  54</span>   <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>self-&gt;data<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span> 
<span class="number">  55</span>     self-&gt;data<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span> <span class="k3">=</span> gob<span class="k2">;</span>
<span class="number">  56</span>     gob-&gt;index <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span>
<span class="number">  57</span>     self-&gt;used<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number">  58</span>     <span class="k1">return</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span>
<span class="number">  59</span>   <span class="k2">}</span>
<span class="number">  60</span>  <span class="k2">}</span>
<span class="number">  61</span>  <span class="k1">return</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  62</span><span class="k2">}</span>
<span class="number">  63</span>
<span class="number">  64</span>GameObject<span class="k3">*</span>  
<span class="number">  65</span>gameobjectarray_newobject<span class="k2">(</span>GameObjectArray <span class="k3">*</span> self<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  66</span>  GameObject <span class="k3">*</span> object<span class="k2">;</span>
<span class="number">  67</span>  object <span class="k3">=</span> <span class="k2">(</span>GameObject <span class="k3">*</span><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>GameObject<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number">  68</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>object<span class="k2">)</span> <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  69</span>  <span class="k1">if</span><span class="k2">(</span>gameobjectarray_putobject<span class="k2">(</span>self, object<span class="k2">)</span> <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  70</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>object<span class="k2">)</span><span class="k2">;</span> <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number">  71</span>  <span class="k2">}</span>
<span class="number">  72</span>  <span class="k1">return</span> object<span class="k2">;</span>
<span class="number">  73</span><span class="k2">}</span>
<span class="number">  74</span>
<span class="number">  75</span>
<span class="number">  76</span>GameObjectArray <span class="k3">*</span> 
<span class="number">  77</span>gameobjectaray_freeobject<span class="k2">(</span>GameObjectArray <span class="k3">*</span> self, GameObject <span class="k3">*</span> obj<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  78</span>  <span class="k1">int</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">;</span>
<span class="number">  79</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">=</span> obj-&gt;index<span class="k2">;</span>
<span class="number">  80</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>obj<span class="k2">)</span><span class="k2">;</span>
<span class="number">  81</span>  self-&gt;data<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span> <span class="k3">=</span> NULL.
<span class="number">  82</span>  self-&gt;used--<span class="k2">;</span>
<span class="number">  83</span>  <span class="k1">return</span> self<span class="k2">;</span>
<span class="number">  84</span><span class="k2">}</span>
<span class="number">  85</span>
<span class="number">  86</span><span class="k1">void</span> gameobjectaray_freealldone<span class="k2">(</span>GameObjectArray <span class="k3">*</span> self<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  87</span>  <span class="k1">for</span><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">&lt;</span> self-&gt;size<span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a> <span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span> 
<span class="number">  88</span>    GameObject <span class="k3">*</span> obj <span class="k3">=</span> self-&gt;data<span class="k2">[</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_470.html" target="_blank">index</a><span class="k2">]</span><span class="k2">;</span>
<span class="number">  89</span>    <span class="k1">if</span><span class="k2">(</span>obj <span class="k3">&amp;</span><span class="k3">&amp;</span> <span class="k2">(</span><span class="k2">(</span>obj-&gt;alive <span class="k3">&lt;</span> <span class="n">1</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span> 
<span class="number">  90</span>      gameobjectaray_freeobject<span class="k2">(</span>self, obj<span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>    <span class="k2">}</span>
<span class="number">  92</span>  <span class="k2">}</span>
<span class="number">  93</span><span class="k2">}</span>
<span class="number">  94</span>
<span class="number">  95</span>
<span class="number">  96</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span> argv<span class="k2">[</span><span class="k2">]</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  97</span>   GameObjectArray array<span class="k2">;</span>
<span class="number">  98</span>   GameObject <span class="k3">*</span> player<span class="k2">;</span>
<span class="number">  99</span>   <span class="k1">int</span> game_loop <span class="k3">=</span> <span class="k1">true</span>
<span class="number"> 100</span>   gameobjectarray_init<span class="k2">(</span><span class="k3">&amp;</span>array<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>   player <span class="k3">=</span> gameobjectarray_newobject<span class="k2">(</span><span class="k3">&amp;</span>aray<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 102</span>   player-&gt;alive <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>
<span class="number"> 103</span>   <span class="c">/* then later: ... */</span>
<span class="number"> 104</span>   <span class="k1">while</span><span class="k2">(</span>game_loop<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 105</span>     player-&gt;alive <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 106</span>     gameobjectaray_freealldone<span class="k2">(</span><span class="k3">&amp;</span>array<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 107</span>   <span class="k2">}</span>
<span class="number"> 108</span>   gameobjectarray_done<span class="k2">(</span><span class="k3">&amp;</span>array<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 109</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 110</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Sat, 09 Feb 2013 19:01:41 +0000</pubDate>
	</item>
</rss>
