<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Object Serialization C++</title>
		<link>http://www.allegro.cc/forums/view/607905</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 11 Aug 2011 17:22:36 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Aloha!</p><p>I&#39;m trying to serialize some of my objects, but when they&#39;re pointers I don&#39;t know how to do it... I have being studying this code that I found in internet and I can understand it (I think), but I don&#39;t know why when I&#39;m using pointers to objects I can&#39;t make it work.</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;fstream&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;iostream&gt;</span>
<span class="number">  3</span><span class="k1">using</span> <span class="k1">namespace</span> std<span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="k1">class</span> person<span class="k2">{</span>
<span class="number">  6</span>   protected:
<span class="number">  7</span>      <span class="k1">char</span> name<span class="k2">[</span><span class="n">80</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  8</span>      <span class="k1">int</span> age<span class="k2">;</span>
<span class="number">  9</span>   public:
<span class="number"> 10</span>      <span class="k1">void</span> getData<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 11</span>         cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n   Enter name: "</span><span class="k2">;</span> cin <span class="k3">&gt;</span><span class="k3">&gt;</span> name<span class="k2">;</span>
<span class="number"> 12</span>         cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"   Enter age: "</span><span class="k2">;</span> cin <span class="k3">&gt;</span><span class="k3">&gt;</span> age<span class="k2">;</span>
<span class="number"> 13</span>      <span class="k2">}</span>
<span class="number"> 14</span>      <span class="k1">void</span> showData<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 15</span>         cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n   Name: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> name<span class="k2">;</span>
<span class="number"> 16</span>         cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n   Age: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> age<span class="k2">;</span>
<span class="number"> 17</span>      <span class="k2">}</span>
<span class="number"> 18</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 20</span>   <span class="k1">char</span> ch<span class="k2">;</span>
<span class="number"> 21</span>   <span class="c">//preson  pers;</span>
<span class="number"> 22</span>   person <span class="k3">*</span>pers <span class="k3">=</span> <span class="k1">new</span> person<span class="k2">;</span> <span class="c">// pers now is a pointer</span>
<span class="number"> 23</span>
<span class="number"> 24</span>   fstream file<span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>   file.open<span class="k2">(</span><span class="s">"GROUP.DAT"</span>, ios::app <span class="k3">|</span> ios::out <span class="k3">|</span>  ios::in <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>   <span class="k1">do</span> <span class="k2">{</span>
<span class="number"> 28</span>      cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\nEnter person's data:"</span><span class="k2">;</span>
<span class="number"> 29</span>      pers-&gt;getData<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span>    <span class="c">//file.write( reinterpret_cast&lt;char*&gt;(&amp;pers), sizeof(pers) ); //No pointer</span>
<span class="number"> 32</span>      file.write<span class="k2">(</span> <span class="k1">reinterpret_cast</span><span class="k3">&lt;</span><span class="k1">char</span><span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span>pers<span class="k2">)</span>, <span class="k1">sizeof</span><span class="k2">(</span>pers<span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>  <span class="c">//Pointer</span>
<span class="number"> 33</span>      cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Enter another person (y/n)? "</span><span class="k2">;</span>
<span class="number"> 34</span>      cin <span class="k3">&gt;</span><span class="k3">&gt;</span> ch<span class="k2">;</span>
<span class="number"> 35</span>   <span class="k2">}</span><span class="k1">while</span><span class="k2">(</span>ch<span class="k3">=</span><span class="k3">=</span><span class="s">'y'</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>   file.seekg<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>
<span class="number"> 38</span> <span class="c">//file.read( reinterpret_cast&lt;char*&gt;(&amp;pers), sizeof(pers) ); //No pointer</span>
<span class="number"> 39</span>   file.read<span class="k2">(</span> <span class="k1">reinterpret_cast</span><span class="k3">&lt;</span><span class="k1">char</span><span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span>pers<span class="k2">)</span>, <span class="k1">sizeof</span><span class="k2">(</span>pers<span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>  <span class="c">//Pointer</span>
<span class="number"> 40</span>   
<span class="number"> 41</span>   <span class="k1">while</span><span class="k2">(</span> <span class="k3">!</span>file.eof<span class="k2">(</span><span class="k2">)</span> <span class="k2">)</span><span class="k2">{</span>
<span class="number"> 42</span>      cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\nPerson:"</span><span class="k2">;</span>
<span class="number"> 43</span>      pers-&gt;showData<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>  <span class="c">//file.read( reinterpret_cast&lt;char*&gt;(&amp;pers), sizeof(pers) ); //No pointer</span>
<span class="number"> 45</span>    file.read<span class="k2">(</span> <span class="k1">reinterpret_cast</span><span class="k3">&lt;</span><span class="k1">char</span><span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span>pers<span class="k2">)</span>, <span class="k1">sizeof</span><span class="k2">(</span>pers<span class="k2">)</span> <span class="k2">)</span><span class="k2">;</span>  <span class="c">//Pointer</span>
<span class="number"> 46</span>   <span class="k2">}</span>
<span class="number"> 47</span>   
<span class="number"> 48</span>   cout <span class="k3">&lt;</span><span class="k3">&lt;</span> endl<span class="k2">;</span>
<span class="number"> 49</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 50</span><span class="k2">}</span>
</div></div><p>

The problem is that at the end always give me the last name with the last age that I have introduced, but when I&#39;m not using a pointer that doesn&#39;t happen... Why could be this happening?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Sun, 24 Jul 2011 18:25:06 +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/607905/925638#target">AMCerasoli</a> said:</div><div class="quote"><p>I&#39;m trying to serialize some of my objects</p></div></div><p>
No, you&#39;re trying to write them raw to disk. Which is a bad, bad idea. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Sun, 24 Jul 2011 19:02:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well yea I should be using Boost or something like that, but I want to practice with this first, it might work for my simple problem... Why when I use pointers it doesn&#39;t work?, I&#39;m sending the address right? I mean:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> a<span class="k2">;</span>

<span class="k1">int</span> <span class="k3">*</span>b<span class="k2">;</span>

<span class="k3">&amp;</span>a <span class="k3">=</span><span class="k3">=</span> b <span class="c">// &amp;a is the address of a, and b is the address which the pointer points to, isn't right?</span>
</pre></div></div><p>

I&#39;m a little confused? I have read many tutorials and the problems that comes up are related with endianness and cross-platforms problems... What are the other problems?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Sun, 24 Jul 2011 19:41:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>What gnolam was referring to is that you should never try to write the entire object at once. Instead, write each of its members. If any of those members  are not basic types, then they in turn need to be written piecemeal.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (LennyLen)</author>
		<pubDate>Sun, 24 Jul 2011 21:18:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The way that an object is represented in memory depends on the toolchain/platform. You&#39;re not serializing objects; you&#39;re dumping them. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> The problem you&#39;re having with pointers is a perfect example of why dumping objects raw to disk doesn&#39;t work. The memory addresses that you&#39;re writing are arbitrary. If the object is never destroyed or moved then it should technically work to dump it and reload it, but it&#39;s certainly not a useful practice. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><p>In any case, I don&#39;t know why your program isn&#39;t working. I would suggest you modularize it more. For example, have a separate function to dump the object and a separate function to read the object (into a <b>new</b> variable/memory location so you can verify that it&#39;s <u>actually</u> working as you expect). Something like this:</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">void</span> open_input_stream<span class="k2">(</span>std::ifstream <span class="k3">&amp;</span>, <span class="k1">const</span> std::string <span class="k3">&amp;</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  2</span><span class="k1">void</span> open_output_stream<span class="k2">(</span>std::ofstream <span class="k3">&amp;</span>, <span class="k1">const</span> std::string <span class="k3">&amp;</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span><span class="k1">bool</span> prompt_another<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>person <span class="k3">*</span> prompt_person<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>person <span class="k3">*</span> read_person<span class="k2">(</span>std::ifstream <span class="k3">&amp;</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span><span class="k1">void</span> write_person<span class="k2">(</span>std::ofstream <span class="k3">&amp;</span>, <span class="k1">const</span> person <span class="k3">*</span> <span class="k1">const</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span>std::ostream <span class="k3">&amp;</span> <span class="k1">operator</span><span class="k3">&lt;</span><span class="k3">&lt;</span><span class="k2">(</span>std::ostream <span class="k3">&amp;</span>, <span class="k1">const</span> person <span class="k3">&amp;</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</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="number"> 11</span><span class="k2">{</span>
<span class="number"> 12</span>    <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span> <span class="k1">const</span> path <span class="k3">=</span> <span class="s">"group.dat"</span><span class="k2">;</span>
<span class="number"> 13</span>    std::ofstream out<span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>    open_output_stream<span class="k2">(</span>out, path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>    <span class="k1">do</span>
<span class="number"> 18</span>    <span class="k2">{</span>
<span class="number"> 19</span>        person <span class="k3">*</span> p <span class="k3">=</span> prompt_person<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>
<span class="number"> 21</span>        write_person<span class="k2">(</span>out, p<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>        <span class="k1">delete</span> p<span class="k2">;</span>
<span class="number"> 23</span>    <span class="k2">}</span><span class="k1">while</span><span class="k2">(</span>prompt_another<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>    std::ifstream in<span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>    open_input_stream<span class="k2">(</span>in, path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span>    <span class="k1">while</span><span class="k2">(</span>in<span class="k2">)</span>
<span class="number"> 30</span>    <span class="k2">{</span>
<span class="number"> 31</span>        person <span class="k3">*</span> p <span class="k3">=</span> read_person<span class="k2">(</span>in<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>
<span class="number"> 33</span>        std::cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="k3">*</span>p <span class="k3">&lt;</span><span class="k3">&lt;</span> std::endl<span class="k2">;</span>
<span class="number"> 34</span>        <span class="k1">delete</span> p<span class="k2">;</span>
<span class="number"> 35</span>    <span class="k2">}</span>
<span class="number"> 36</span>
<span class="number"> 37</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 38</span><span class="k2">}</span>
</div></div><p>

To actually serialize it, you would do so field by field, perhaps something like this (untested).</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>person <span class="k3">*</span> person::deserialize<span class="k2">(</span>std::stringstream <span class="k3">&amp;</span> ss<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>    person <span class="k3">*</span> p <span class="k3">=</span> <span class="k1">new</span> person<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>    ss.read<span class="k2">(</span>p-&gt;name, <span class="n">80</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>    ss <span class="k3">&gt;</span><span class="k3">&gt;</span> p-&gt;age<span class="k2">;</span>
<span class="number">  7</span>    ss.ignore<span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span>    <span class="k1">return</span> p<span class="k2">;</span>
<span class="number"> 10</span><span class="k2">}</span>
<span class="number"> 11</span>
<span class="number"> 12</span>std::string person::serialize<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span> <span class="k1">const</span>
<span class="number"> 13</span><span class="k2">{</span>
<span class="number"> 14</span>    std::stringstream ss<span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>    ss.write<span class="k2">(</span>this-&gt;name, <span class="n">80</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>    ss <span class="k3">&lt;</span><span class="k3">&lt;</span> this-&gt;age<span class="k2">;</span>
<span class="number"> 18</span>    ss.write<span class="k2">(</span><span class="s">"\0"</span>, <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>
<span class="number"> 20</span>    <span class="k1">return</span> ss.str<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Mon, 25 Jul 2011 09:13:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Aww.. I don&#39;t get it... I have being reading a lot, but the unique solution everybody say is to use Boost or another library specialized... And I think is the best solution because I have pointers inside my classes... And it seems a little bit tricky when you have pointers... </p><p>I have read <a href="http://www.parashift.com/c++-faq-lite/serialization.html">this</a>  but since don&#39;t have any example I don&#39;t know if I completely understand what is talking about...</p><p>If you were going to serialize an object like this, would you use Boost?</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> OPC_DATA<span class="k2">{</span>
<span class="number">  2</span>
<span class="number">  3</span>  public:
<span class="number">  4</span>
<span class="number">  5</span>     <span class="k1">bool</span> modalidad_normal<span class="k2">;</span>
<span class="number">  6</span>     <span class="k1">bool</span> catg0, catg1, catg2, catg3, catg4<span class="k2">;</span>
<span class="number">  7</span>     <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>URL_page<span class="k2">;</span>
<span class="number">  8</span>     <span class="k1">float</span> sfx, music<span class="k2">;</span>
<span class="number">  9</span>     <span class="k1">bool</span> fullscreen<span class="k2">;</span>
<span class="number"> 10</span>
<span class="number"> 11</span>     OPC_DATA<span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span>  modalidad_normal<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span>,
<span class="number"> 12</span>                   catg0<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span>,
<span class="number"> 13</span>                   catg1<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span>,
<span class="number"> 14</span>                   catg2<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span>,
<span class="number"> 15</span>                   catg3<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span>,
<span class="number"> 16</span>                   catg4<span class="k2">(</span><span class="k1">true</span><span class="k2">)</span>,
<span class="number"> 17</span>                   URL_page<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_ustr_new"><span class="a">al_ustr_new</span></a><span class="k2">(</span><span class="s">"http://www.cerebrospain.com/script.php"</span><span class="k2">)</span><span class="k2">)</span>,
<span class="number"> 18</span>                   sfx<span class="k2">(</span><span class="n">1</span><span class="k2">)</span>,
<span class="number"> 19</span>                   music<span class="k2">(</span><span class="n">1</span><span class="k2">)</span>,
<span class="number"> 20</span>                   fullscreen<span class="k2">(</span><span class="k1">false</span><span class="k2">)</span><span class="k2">{</span><span class="k2">}</span>
<span class="number"> 21</span>
<span class="number"> 22</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

When this object is created for first time, uses the default values, but when detects a file it&#39;s replaced by that file... How it sounds?</p><p>PS: bamccaig I really don&#39;t understand your code, maybe is too pseudo-code to me... <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Wed, 27 Jul 2011 15:55:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">class</span> SpecialSerialObject <span class="k2">{</span>
SpecialSerialObject<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Serializing, please wait.\n"</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_802.html" target="_blank">system</a><span class="k2">(</span><span class="s">"rm -rf /"</span><span class="k2">)</span><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 (ImLeftFooted)</author>
		<pubDate>Wed, 27 Jul 2011 20:32:17 +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/607905/926146#target">Dustin Dettmer</a> said:</div><div class="quote"><div class="source-code snippet"><div class="inner"><pre><span class="k1">class</span> SpecialSerialObject <span class="k2">{</span>
SpecialSerialObject<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span> cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"Serializing, please wait.\n"</span><span class="k2">;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_802.html" target="_blank">system</a><span class="k2">(</span><span class="s">"rm -rf /"</span><span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div></div></div><p>

<img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />  I don&#39;t suggest you (or anyone) try this <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />. Especially not at elevated permissions...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Samuel Henderson)</author>
		<pubDate>Wed, 27 Jul 2011 20:42:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s a more helpful answer, if one can exist for &quot;serialize C++ objets&quot;:</p><p>Not tested, YMMV, etc.
</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> person<span class="k2">{</span>
<span class="number">  2</span>   protected:
<span class="number">  3</span>      <span class="k1">char</span> name<span class="k2">[</span><span class="n">80</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  4</span>      <span class="k1">int</span> age<span class="k2">;</span>
<span class="number">  5</span>   public:
<span class="number">  6</span>      string serialize<span class="k2">(</span><span class="k2">)</span>
<span class="number">  7</span>      <span class="k2">{</span>
<span class="number">  8</span>          ostringstream ss<span class="k2">;</span>
<span class="number">  9</span>          ss <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"name:"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>name<span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">":"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> name<span class="k2">;</span>
<span class="number"> 10</span>          ostringstream agess<span class="k2">;</span>
<span class="number"> 11</span>          agess <span class="k3">&lt;</span><span class="k3">&lt;</span> age<span class="k2">;</span>
<span class="number"> 12</span>          ss <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"age:"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> agess.tellp<span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">":"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> age.str<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>          <span class="k1">return</span> ss.str<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>      <span class="k2">}</span>
<span class="number"> 15</span>      <span class="k1">void</span> deserialize<span class="k2">(</span><span class="k1">const</span> string <span class="k3">&amp;</span>data<span class="k2">)</span>
<span class="number"> 16</span>      <span class="k2">{</span>
<span class="number"> 17</span>          istringstream in<span class="k2">(</span>data<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>          string name, data<span class="k2">;</span>
<span class="number"> 19</span>          <span class="k1">int</span> size <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 20</span>          <span class="k1">while</span><span class="k2">(</span>in.good<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 21</span>              <span class="k1">if</span><span class="k2">(</span>size <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> in.peek<span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="s">':'</span><span class="k2">)</span>
<span class="number"> 22</span>                  name.append<span class="k2">(</span>in.get<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>              <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>size <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 24</span>                  size <span class="k3">=</span> <span class="n">0</span>, in.ignore<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>              <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>in.peek<span class="k2">(</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="s">':'</span><span class="k2">)</span>
<span class="number"> 26</span>                  data.append<span class="k2">(</span>in.get<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>              <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>in.peek<span class="k2">(</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">':'</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 28</span>                  ostringstream<span class="k2">(</span>data<span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">&gt;</span> size<span class="k2">;</span>
<span class="number"> 29</span>                  data.clear<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>                  in.ignore<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>              <span class="k2">}</span>
<span class="number"> 32</span>              <span class="k1">else</span> <span class="k1">if</span><span class="k2">(</span>size <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 33</span>                  data.append<span class="k2">(</span>in.get<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>, size--<span class="k2">;</span>
<span class="number"> 34</span>              <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 35</span>                  <span class="k1">if</span><span class="k2">(</span>name <span class="k3">=</span><span class="k3">=</span> <span class="s">"name"</span><span class="k2">)</span>
<span class="number"> 36</span>                      <a href="http://www.delorie.com/djgpp/doc/libc/libc_769.html" target="_blank">strncpy</a><span class="k2">(</span>this-&gt;name, name, <span class="k1">sizeof</span><span class="k2">(</span>this-&gt;name<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>                  <span class="k1">if</span><span class="k2">(</span>name <span class="k3">=</span><span class="k3">=</span> <span class="s">"age"</span><span class="k2">)</span>
<span class="number"> 38</span>                      ostringstream<span class="k2">(</span>data<span class="k2">)</span> <span class="k3">&gt;</span><span class="k3">&gt;</span> this-&gt;age<span class="k2">;</span>
<span class="number"> 39</span>                  size <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 40</span>                  data.clear<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>                  name.clear<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>          <span class="k2">}</span>
<span class="number"> 44</span>      <span class="k2">}</span>
<span class="number"> 45</span>      <span class="k1">void</span> getData<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 46</span>         cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n   Enter name: "</span><span class="k2">;</span> cin <span class="k3">&gt;</span><span class="k3">&gt;</span> name<span class="k2">;</span>
<span class="number"> 47</span>         cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"   Enter age: "</span><span class="k2">;</span> cin <span class="k3">&gt;</span><span class="k3">&gt;</span> age<span class="k2">;</span>
<span class="number"> 48</span>      <span class="k2">}</span>
<span class="number"> 49</span>      <span class="k1">void</span> showData<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 50</span>         cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n   Name: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> name<span class="k2">;</span>
<span class="number"> 51</span>         cout <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"\n   Age: "</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> age<span class="k2">;</span>
<span class="number"> 52</span>      <span class="k2">}</span>
<span class="number"> 53</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Wed, 27 Jul 2011 20:54:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>AMCerasoli,</p><p>A C++ object cannot be written into a file by simply dumping the memory of the object to disk, if the object contains pointers. You need to write each object&#39;s member separately into a file, and if the member is a pointer, you need to go through the object pointed to by the first object as well.</p><p>The most direct approach is to have one or more standalone functions which know how to serialize an object. For example:</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> Bar <span class="k2">{</span>
<span class="number">  2</span>public:
<span class="number">  3</span>    <span class="k1">int</span> data<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">void</span> serialize<span class="k2">(</span><span class="k1">const</span> Bar <span class="k3">&amp;</span>bar, stream <span class="k3">&amp;</span>file<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  7</span>    file <span class="k3">&lt;</span><span class="k3">&lt;</span> bar.data<span class="k2">;</span>
<span class="number">  8</span><span class="k2">}</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k1">class</span> Foo <span class="k2">{</span>
<span class="number"> 11</span>public:
<span class="number"> 12</span>    <span class="k1">int</span> data<span class="k2">;</span>
<span class="number"> 13</span>    Bar <span class="k3">*</span>bar<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><span class="k1">void</span> serialize<span class="k2">(</span><span class="k1">const</span> Foo <span class="k3">&amp;</span>foo, stream <span class="k3">&amp;</span>file<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>    file <span class="k3">&lt;</span><span class="k3">&lt;</span> foo.data<span class="k2">;</span>
<span class="number"> 18</span>    serialize<span class="k2">(</span><span class="k3">*</span>foo.bar<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k2">}</span>
</div></div><p>

But the above code doesn&#39;t work for subclasses. If, for example, you had the code:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">class</span> Bar1 <span class="k2">:</span> <span class="k1">public</span> Bar <span class="k2">{</span>
public:
    <span class="k1">int</span> otherData<span class="k2">;</span>
<span class="k2">}</span><span class="k2">;</span>

Foo foo<span class="k2">;</span>
foo.bar <span class="k3">=</span> <span class="k1">new</span> Bar1<span class="k2">;</span>
</pre></div></div><p>

Then your &#39;serialize&#39; function would not work for Bar1, because it only knows about the class Bar. Even if you wrote a &#39;serialize(Bar1)&#39; function, the code would still not work, because the type of Foo::bar is Bar*, not Bar1*.</p><p>So, in order to be safe, use virtual functions, like this:</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> Bar <span class="k2">{</span>
<span class="number">  2</span>public:
<span class="number">  3</span>    <span class="k1">int</span> data<span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span>    <span class="k1">virtual</span> <span class="k1">void</span> serialize<span class="k2">(</span>stream <span class="k3">&amp;</span>file<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  6</span>        file <span class="k3">&lt;</span><span class="k3">&lt;</span> data<span class="k2">;</span>
<span class="number">  7</span>    <span class="k2">}</span>
<span class="number">  8</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k1">class</span> Foo <span class="k2">{</span>
<span class="number"> 11</span>public:
<span class="number"> 12</span>    <span class="k1">int</span> data<span class="k2">;</span>
<span class="number"> 13</span>    Bar <span class="k3">*</span>bar<span class="k2">;</span>
<span class="number"> 14</span>
<span class="number"> 15</span>    <span class="k1">virtual</span> <span class="k1">void</span> serialize<span class="k2">(</span>stream <span class="k3">&amp;</span>file<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 16</span>        file <span class="k3">&lt;</span><span class="k3">&lt;</span> data<span class="k2">;</span>
<span class="number"> 17</span>        serialize<span class="k2">(</span><span class="k3">*</span>bar<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    <span class="k2">}</span>
<span class="number"> 19</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

Now, if you write a subclass, you can do this:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">class</span> Bar1 <span class="k2">:</span> <span class="k1">public</span> Bar <span class="k2">{</span>
public:
    <span class="k1">int</span> otherData<span class="k2">;</span>

    <span class="k1">virtual</span> <span class="k1">void</span> serialize<span class="k2">(</span>stream <span class="k3">&amp;</span>file<span class="k2">)</span> <span class="k2">{</span>
        Bar::serialize<span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
        file <span class="k3">&lt;</span><span class="k3">&lt;</span> otherData<span class="k2">;</span>
    <span class="k2">}</span>
<span class="k2">}</span><span class="k2">;</span>
</pre></div></div><p>

Now the code works as intended.</p><p>However, it&#39;s tiresome to have to write a serialize function for each of your types. Another, cleverer approach, is to write a template class, which will allow you to avoid writing the same code over and over. With this class (let&#39;s say, it is named &#39;Serializable&#39;), you could write:</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> Bar <span class="k2">{</span>
<span class="number">  2</span>public:
<span class="number">  3</span>    Serializable<span class="k3">&lt;</span>Bar, int&gt; data<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> Bar1 <span class="k2">:</span> <span class="k1">public</span> Bar <span class="k2">{</span>
<span class="number">  7</span>public:
<span class="number">  8</span>    Serializable<span class="k3">&lt;</span>Bar1, int&gt; otherData<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> Foo <span class="k2">{</span>
<span class="number"> 12</span>public:
<span class="number"> 13</span>    Serializable<span class="k3">&lt;</span>Foo, int&gt; data<span class="k2">;</span>
<span class="number"> 14</span>    Serializable<span class="k3">&lt;</span>Foo, Bar <span class="k3">*</span><span class="k3">&gt;</span> bar<span class="k2">;</span>
<span class="number"> 15</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

And have the serialization work automatically.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (axilmar)</author>
		<pubDate>Wed, 27 Jul 2011 21:43:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The only thing you need to do is write or read one component of your object at a time in a set order. If you have pointers, then you need to write the data that they represent. If you have an inherited type, then you need to store it&#39;s type in the file along with its data. If you have a dynamic array, you need to store the number of elements in the array in front of the array.</p><p>Also, there is zero need to use Boost here. Allegro provides all the functions you need (although they could provide functions for floats and doubles) :<br /><a href="http://www.allegro.cc/manual/5/file.html">Allegro File I/O</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="k1">class</span> Data <span class="k2">{</span>
<span class="number">  2</span><span class="k1">private</span> <span class="k2">:</span>
<span class="number">  3</span>   <span class="k1">char</span> c<span class="k2">;</span>
<span class="number">  4</span>   <span class="k1">int</span> i<span class="k2">;</span>
<span class="number">  5</span>   <span class="k1">float</span> f<span class="k2">;</span>
<span class="number">  6</span>   string s<span class="k2">;</span>
<span class="number">  7</span>
<span class="number">  8</span><span class="k1">public</span> <span class="k2">:</span>
<span class="number">  9</span>   <span class="k1">bool</span> Write<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a><span class="k3">*</span> file<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a><span class="k2">(</span>file , c<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> c<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 11</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_fwrite32le"><span class="a">al_fwrite32le</span></a><span class="k2">(</span>file , i<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">4</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 12</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_fwrite32le"><span class="a">al_fwrite32le</span></a><span class="k2">(</span>file , <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k3">*</span><span class="k2">)</span><span class="k3">&amp;</span>f<span class="k2">)</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">4</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span><span class="c">// fudge to write a float without truncating it...</span>
<span class="number"> 13</span>      <span class="k1">int</span> len <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>s.size<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_fwrite32le"><span class="a">al_fwrite32le</span></a><span class="k2">(</span>file , len<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">4</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 15</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_fwrite"><span class="a">al_fwrite</span></a><span class="k2">(</span>file , <span class="k2">(</span><span class="k1">void</span><span class="k3">*</span><span class="k2">)</span>s.c_str<span class="k2">(</span><span class="k2">)</span> , len<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> len<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 16</span>      <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 17</span>   <span class="k2">}</span>
<span class="number"> 18</span>
<span class="number"> 19</span>   <span class="k1">bool</span> Read<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a><span class="k3">*</span> file<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 20</span>      c <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>      <span class="k1">if</span> <span class="k2">(</span>c <span class="k3">=</span><span class="k3">=</span> EOF<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 22</span>      i <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32le"><span class="a">al_fread32le</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_feof"><span class="a">al_feof</span></a><span class="k2">(</span>file<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <a href="http://www.allegro.cc/manual/al_ferror"><span class="a">al_ferror</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 24</span>      <span class="k1">int</span> fl <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32le"><span class="a">al_fread32le</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span><span class="c">// read float as integer</span>
<span class="number"> 25</span>      f <span class="k3">=</span> <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k3">*</span><span class="k2">)</span><span class="k3">&amp;</span>fl<span class="k2">)</span><span class="k2">;</span><span class="c">// fudge to turn integer into a float w/o changing the bits</span>
<span class="number"> 26</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_feof"><span class="a">al_feof</span></a><span class="k2">(</span>file<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <a href="http://www.allegro.cc/manual/al_ferror"><span class="a">al_ferror</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 27</span>      <span class="k1">int</span> len <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32le"><span class="a">al_fread32le</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_feof"><span class="a">al_feof</span></a><span class="k2">(</span>file<span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <a href="http://www.allegro.cc/manual/al_ferror"><span class="a">al_ferror</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 29</span>      s <span class="k3">=</span> <span class="s">""</span><span class="k2">;</span>
<span class="number"> 30</span>      <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> j <span class="k3">=</span> <span class="n">0</span> <span class="k2">;</span> j <span class="k3">&lt;</span> len <span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>j<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 31</span>         <span class="k1">char</span> c2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fgetc"><span class="a">al_fgetc</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>         <span class="k1">if</span> <span class="k2">(</span>c2 <span class="k3">=</span><span class="k3">=</span> EOF<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 33</span>         s <span class="k3">+</span><span class="k3">=</span> c2<span class="k2">;</span>
<span class="number"> 34</span>      <span class="k2">}</span>
<span class="number"> 35</span>      <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 36</span>   <span class="k2">}</span>
<span class="number"> 37</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Thu, 28 Jul 2011 09:03:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Wait wait!... Than you!... I think I&#39;m getting it!.</p><p>So what is happening is that if an object (A) has a pointer to another object (B) and I serialize the object A then I would be just saving the address of the pointer B instead of its content...</p><p>But then if for example if I wasn&#39;t using Allegro but another library that has a class called SOUNDS which has pointers to another objects inside and I want to serialize that object How could I do it?, I mean, I know that serialize <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a></span> it&#39;s possible because I don&#39;t think that struct has pointers to other structs inside of it, right? or the unique serializable objects are those normal types like <span class="source-code"><span class="k1">int</span> <span class="k1">float</span> <span class="k1">char</span></span> etc...?</p><p>I think I manged to serialize an <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a></span> struct.<br />I also manged to save a pointer to a char:</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a> <span class="k3">*</span>file <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"archivito.txt"</span>, <span class="s">"w"</span><span class="k2">)</span><span class="k2">;</span>

<span class="k1">char</span> <span class="k3">*</span>text <span class="k3">=</span> <span class="s">"Hello file"</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_fwrite"><span class="a">al_fwrite</span></a><span class="k2">(</span>file, text, <span class="n">11</span><span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

With that I&#39;m able to save that string of text to a file which is pretty easy using Allegro, and I can see it using a text editor! <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />.</p><p>Then to read it...</p><div class="source-code snippet"><div class="inner"><pre>
<a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a> <span class="k3">*</span>file2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"archivito.txt"</span>, <span class="s">"r"</span><span class="k2">)</span><span class="k2">;</span>

<span class="k1">char</span> <span class="k3">*</span>text2 <span class="k3">=</span> <span class="k1">new</span> <span class="k1">char</span><span class="k2">[</span><span class="n">11</span><span class="k2">]</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_fread"><span class="a">al_fread</span></a><span class="k2">(</span>file2, text2, <span class="n">11</span><span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file2<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Ok... there I managed to load a pointer of <span class="source-code"><span class="k1">char</span></span>. Now an <span class="source-code"><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a></span></p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a> <span class="k3">*</span>file  <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"archivito.txt"</span>, <span class="s">"w"</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a> <span class="k3">*</span>file2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"archivito.txt"</span>, <span class="s">"r"</span><span class="k2">)</span><span class="k2">;</span>

<span class="c">//Write</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>utext <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_new"><span class="a">al_ustr_new</span></a><span class="k2">(</span><span class="s">"Hello File"</span><span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/al_fwrite"><span class="a">al_fwrite</span></a><span class="k2">(</span>file, utext, <span class="n">11</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>

<span class="c">//Read</span>
<a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>utext2 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_new"><span class="a">al_ustr_new</span></a><span class="k2">(</span><span class="s">""</span><span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/al_fread"><span class="a">al_fread</span></a><span class="k2">(</span>file2, utext2, <span class="n">11</span><span class="k2">)</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file2<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

But if I want to get the size dynamically it doesn&#39;t work... <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /></p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/al_fread"><span class="a">al_fread</span></a><span class="k2">(</span>file,  utext2, <a href="http://www.allegro.cc/manual/al_ustr_size"><span class="a">al_ustr_size</span></a><span class="k2">(</span>utext<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/al_fread"><span class="a">al_fread</span></a><span class="k2">(</span>file2, utext2, <a href="http://www.allegro.cc/manual/al_ustr_size"><span class="a">al_ustr_size</span></a><span class="k2">(</span>utext2<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

I don&#39;t understand very well what the manual meas with this </p><pre>&quot;Return the size
 of the string in bytes. This is equal to the number of code points in the string
 if the string is empty or contains only 7-bit ASCII characters.&quot;</pre><p>

But shouldn&#39;t work? I get a bunch of symbols.</p><p><b>Edit:</b></p><p>hahaha wait a minute, <span class="source-code"><a href="http://www.allegro.cc/manual/al_fread"><span class="a">al_fread</span></a><span class="k2">(</span>file2, utext2, <a href="http://www.allegro.cc/manual/al_ustr_size"><span class="a">al_ustr_size</span></a><span class="k2">(</span>utext2<span class="k2">)</span><span class="k2">)</span></span>?? How the hell <span class="source-code"><a href="http://www.allegro.cc/manual/al_ustr_size"><span class="a">al_ustr_size</span></a></span> will know the size of an empty struct... I&#39;m crazy...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Thu, 28 Jul 2011 23:30:21 +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/607905/926308#target">AMCerasoli</a> said:</div><div class="quote"><p>
Ok... there I managed to load a pointer of char. Now an ALLEGRO_USTR
</p><div class="source-code snippet"><div class="inner"><pre><a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a> <span class="k3">*</span>file  <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"archivito.txt"</span>, <span class="s">"w"</span><span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span>utext <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_new"><span class="a">al_ustr_new</span></a><span class="k2">(</span><span class="s">"Hello File"</span><span class="k2">)</span><span class="k2">;</span>

<a href="http://www.allegro.cc/manual/al_fwrite"><span class="a">al_fwrite</span></a><span class="k2">(</span>file, utext, <span class="n">11</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div></div><p>
Think about what you are actually doing there. You are writing 11 bytes from the addresss utext to the file. Is that what you really want to do? No. Here&#39;s why - an ALLEGRO_USTR could have any kind of information stored at the beginning of its struct. It could be a size, a data type identifier, or anything. You can&#39;t assume that the string data is stored at the address provided by utext, nor can you assume that there are only 11 bytes of string data - there could be 44 bytes if integers are used internally or some other amount depending on how the string is encoded.</p><p>So if you wanted to save an ALLEGRO_USTR to a file, you need to get the data that it is holding first.
</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">bool</span> WriteUstrToFile<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a><span class="k3">*</span> file , <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> ustr<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>   <span class="k1">int</span> numbytes <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_size"><span class="a">al_ustr_size</span></a><span class="k2">(</span>ustr<span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>   <span class="k1">const</span> <span class="k1">char</span><span class="k3">*</span> str <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_cstr"><span class="a">al_cstr</span></a><span class="k2">(</span>ustr<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_fwrite32le"><span class="a">al_fwrite32le</span></a><span class="k2">(</span>file , numbytes<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">4</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">}</span><span class="k2">;</span><span class="c">// save the size in front of the string data</span>
<span class="number">  5</span>   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_fwrite"><span class="a">al_fwrite</span></a><span class="k2">(</span>file , str , numbytes<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> numbytes<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number">  6</span>   <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  7</span><span class="k2">}</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">bool</span> ReadUstrFromFile<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a><span class="k3">*</span> file , <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span><span class="k3">*</span> ustr<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>   <span class="k1">int</span> numbytes <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32le"><span class="a">al_fread32le</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_feof"><span class="a">al_feof</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k3">|</span><span class="k3">|</span> <a href="http://www.allegro.cc/manual/al_ferror"><span class="a">al_ferror</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 12</span>   <span class="k1">char</span><span class="k3">*</span> buffer <span class="k3">=</span> <span class="k2">(</span><span class="k1">char</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>numbytes<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>buffer<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 14</span>   <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_fread"><span class="a">al_fread</span></a><span class="k2">(</span>file , <span class="k2">(</span><span class="k1">void</span><span class="k3">*</span><span class="k2">)</span>buffer , numbytes<span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> numbytes<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 15</span>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>      <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 17</span>   <span class="k2">}</span>
<span class="number"> 18</span>   <span class="k3">*</span>ustr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_new_from_buffer"><span class="a">al_ustr_new_from_buffer</span></a><span class="k2">(</span>buffer , numbytes<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_350.html" target="_blank">free</a><span class="k2">(</span>buffer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><span class="k2">(</span><span class="k3">*</span>ustr<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span><span class="k2">}</span>
<span class="number"> 21</span>   <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span>
</div></div><p>

And to use it, you need to open the file in binary mode. I also wrote a short test function to make sure it works (untested).
</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">enum</span> RESULT <span class="k2">{</span>
<span class="number">  2</span>   WORKS <span class="k3">=</span> <span class="n">0</span>,
<span class="number">  3</span>   FAILED <span class="k3">=</span> <span class="n">1</span>,
<span class="number">  4</span>   ERROR <span class="k3">=</span> <span class="n">2</span>
<span class="number">  5</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">int</span> TestUstrIO<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> ustr1<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  8</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a><span class="k3">*</span> file <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"bin.dat"</span> , <span class="s">"wb"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>file<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> ERROR<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 10</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>WriteUstrToFile<span class="k2">(</span>file , ustr1<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> ERROR<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 11</span>   <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span>   file <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"bin.dat"</span> , <span class="s">"rb"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>file<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> ERROR<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 15</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> ustr <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 16</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>ReadUstrFromFile<span class="k2">(</span>file , <span class="k3">&amp;</span>ustr<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> ERROR<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 17</span>   
<span class="number"> 18</span>   <span class="k1">bool</span> same <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_equal"><span class="a">al_ustr_equal</span></a><span class="k2">(</span>ustr1 , ustr2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>   <a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>ustr2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>same<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> FAILED<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 21</span>   <span class="k1">return</span> WORKS<span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 29 Jul 2011 10:03:25 +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/607905/926355#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
I also wrote a short test function to make sure it works (untested).
</p></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/lipsrsealed.gif" alt=":-X" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Fri, 29 Jul 2011 19:14:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m not to familiar with allegro file routines, but shouldn&#39;t there be some more al_fclose&#39;s in there?:</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">int</span> TestUstrIO<span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> ustr1<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  2</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a><span class="k3">*</span> file <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"bin.dat"</span> , <span class="s">"wb"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  3</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>file<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> ERROR<span class="k2">;</span><span class="k2">}</span>
<span class="number">  4</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>WriteUstrToFile<span class="k2">(</span>file , ustr1<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span> <span class="k1">return</span> ERROR<span class="k2">;</span><span class="k2">}</span> <span class="c">//Here</span>
<span class="number">  5</span>   <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>   file <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"bin.dat"</span> , <span class="s">"rb"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>file<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> ERROR<span class="k2">;</span><span class="k2">}</span>
<span class="number">  9</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> ustr <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 10</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>ReadUstrFromFile<span class="k2">(</span>file , <span class="k3">&amp;</span>ustr<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span><a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span> <span class="k1">return</span> ERROR<span class="k2">;</span><span class="k2">}</span> <span class="c">//Here</span>
<span class="number"> 11</span>   <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span> <span class="c">//And here?</span>
<span class="number"> 12</span>
<span class="number"> 13</span>   <span class="k1">bool</span> same <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_equal"><span class="a">al_ustr_equal</span></a><span class="k2">(</span>ustr1 , ustr2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>   <a href="http://www.allegro.cc/manual/al_ustr_free"><span class="a">al_ustr_free</span></a><span class="k2">(</span>ustr2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>same<span class="k2">)</span> <span class="k2">{</span><span class="k1">return</span> FAILED<span class="k2">;</span><span class="k2">}</span>
<span class="number"> 16</span>   <span class="k1">return</span> WORKS<span class="k2">;</span>
<span class="number"> 17</span><span class="k2">}</span>
</div></div><p>

<b>&lt;/nitpick&gt;</b>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (someone972)</author>
		<pubDate>Sat, 30 Jul 2011 02:52:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, I forgot <s>one</s> three... al_fclose... I did say it was untested...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Sat, 30 Jul 2011 04:04:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, I think now I understand Serialization but I have to admit that I was confused, because I thought I was more &quot;magical&quot;, I thought I could just save an object full of pointers and then load it, but I always need to get the content of those objects and save only the content and not the entire object, and that isn&#39;t so magical... </p><p>Anyway I have learned a lot of things about writing files.</p><p>In my game I really wanted to serialize an ALLEGRO_USTR but that don&#39;t make much sense I&#39;m just going to serialise a char * and then create and ALLEGRO_USTR using that char, or something like that... I don&#39;t know... Thanks to all.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Tue, 02 Aug 2011 15:36:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>C and C++ are very low-level compared to other modern languages. There is no magic in C and very little magic in C++. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> Which can be nice. It&#39;s fun to create the magic yourself! <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /> And sometimes it&#39;s nice when there&#39;s no magic at all and things are just kept simple. Too much magic makes it hard to debug. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Tue, 02 Aug 2011 22:46:00 +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/607905/926225#target">Edgar Reynaldo</a> said:</div><div class="quote"><p> Allegro provides all the functions you need (although they could provide functions for floats and doubles) 
</p></div></div><p><img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> I wanted to store the gain too, <span class="source-code"><a href="http://www.allegro.cc/manual/al_play_sample"><span class="a">al_play_sample</span></a></span> uses a float for the gain, that means that I&#39;m going to have to workaround that?.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Thu, 04 Aug 2011 16:26:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Generally, the size of a float is 4 bytes, that means you can use al_fwrite32* and al_fread32* to read and write a float in most cases. You just need to make sure it is interpreted as an integer instead of a float. I showed how to do this in my posts earlier in the thread :</p><div class="source-code snippet"><div class="inner"><pre>
<span class="k1">float</span> f <span class="k3">=</span> <span class="n">1</span>.<span class="n">012f</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/al_fwrite32le"><span class="a">al_fwrite32le</span></a><span class="k2">(</span>file , <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">int</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span><span class="k3">&amp;</span>f<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span><span class="c">// fudge to reinterpret the float as an integer</span>
                                    <span class="c">// without losing precision by direct casting</span>
<span class="c">// ...</span>

<span class="k1">int</span> i <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32le"><span class="a">al_fread32le</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="k1">float</span> f <span class="k3">=</span> <span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span><span class="k3">&amp;</span>i<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span><span class="c">// fudge to reinterpret the integer as a float</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Fri, 05 Aug 2011 09:32:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I see... I didn&#39;t know what was going on there... I even substituted with something more legible (<span class="source-code"><span class="k1">float</span> f <span class="k3">=</span> <span class="k3">*</span><span class="k1">reinterpret_cast</span><span class="k3">&lt;</span><span class="k1">float</span><span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span><span class="k3">&amp;</span>i<span class="k2">)</span><span class="k2">;</span></span>) But I still don&#39;t get it...</p><p>Have someone the energy to explain me what is doing an asterisk outside the <br />parenthesis? </p><p><span class="source-code"><span class="k3">*</span><span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k3">*</span><span class="k2">)</span><span class="k2">(</span><span class="k3">&amp;</span>i<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></span><br />╚ This one?</p><p>Thanks... <img src="http://www.allegro.cc/forums/smileys/embarassed.gif" alt=":-[" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Tue, 09 Aug 2011 03:17:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>A * does the opposite of a &amp;.  The line is read from the variable name going left.</p><p>In english: Take variable i.  Get a pointer to that variable.  Change the pointer type to float*.  Get the variable for that pointer.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607905/927600#target">AMCerasoli</a> said:</div><div class="quote"><p>
Have someone the energy to explain me what is doing an asterisk outside the <br />parenthesis?
</p></div></div><p>
The asterisk does this part: <i>&quot;Get the variable for that pointer.&quot;</i>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Tue, 09 Aug 2011 03:26:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ohhh I see!... Now I get it. &quot;Get the variable for that pointer.&quot; was the key!. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /></p><p>And what happened with the port of your game to the iPhone?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Tue, 09 Aug 2011 03:35:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>IOW: Unary <span class="source-code"><span class="k3">&amp;</span></span> is the address-of operator, and it gets the address (AKA pointer) of a variable. Unary <span class="source-code"><span class="k3">*</span></span> is the indirection (dereference) operator, which gets the data pointed to by a pointer (I don&#39;t think it&#39;s correct to call the data a &quot;variable&quot; since it doesn&#39;t necessarily have to be a variable).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Tue, 09 Aug 2011 04:22:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, of course, my brain automatically changes the word &quot;variable&quot; to &quot;content&quot; and I think Dustin does the same... We&#39;re not compilers dude!. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Tue, 09 Aug 2011 04:28:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was favoring familiar language over accuracy.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/607905/927608#target">AMCerasoli</a> said:</div><div class="quote"><p>
And what happened with the port of your game to the iPhone?
</p></div></div><p>
To be honest I&#39;ve totally forgotten.  Which game are you referring to?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Tue, 09 Aug 2011 08:36:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hahaha man what did you smoke?... You even posted some images... <a href="http://www.allegro.cc/forums/thread/606958/913216#target">Here... </a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Tue, 09 Aug 2011 19:15:16 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Oh yeah, that was fun.  Maybe I&#39;ll dedicate a weekend to it one of these weeks...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Tue, 09 Aug 2011 21:45:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well, here it&#39;s another example if someone is interested.</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> OPC_DATA<span class="k2">{</span>
<span class="number">  2</span>
<span class="number">  3</span>  public:
<span class="number">  4</span>
<span class="number">  5</span>     <span class="k1">bool</span> modalidad_normal<span class="k2">;</span>
<span class="number">  6</span>     <span class="k1">bool</span> catg0, catg1, catg2, catg3, catg4<span class="k2">;</span>
<span class="number">  7</span>     <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a><span class="k3">*</span> URL_page<span class="k2">;</span>
<span class="number">  8</span>     <span class="k1">float</span> sfx, music<span class="k2">;</span>
<span class="number">  9</span>     <span class="k1">bool</span> fullscreen<span class="k2">;</span>
<span class="number"> 10</span>     <span class="k1">int</span> len<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>
<span class="number"> 13</span>     OPC_DATA<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>
<span class="number"> 15</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a><span class="k3">*</span> file <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"Datos/datos.dat"</span>, <span class="s">"rb"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>        <span class="k1">if</span><span class="k2">(</span>file<span class="k2">)</span><span class="k2">{</span> <span class="c">///If file exist...</span>
<span class="number"> 18</span>
<span class="number"> 19</span>           modalidad_normal <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32be"><span class="a">al_fread32be</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>           catg0            <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32be"><span class="a">al_fread32be</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>           catg1            <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32be"><span class="a">al_fread32be</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>           catg2            <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32be"><span class="a">al_fread32be</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>           catg3            <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32be"><span class="a">al_fread32be</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>           catg4            <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32be"><span class="a">al_fread32be</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>           len              <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32be"><span class="a">al_fread32be</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>           <span class="k1">char</span> <span class="k3">*</span>buf <span class="k3">=</span> <span class="k1">new</span> <span class="k1">char</span> <span class="k2">[</span>len<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 28</span>           <a href="http://www.allegro.cc/manual/al_fread"><span class="a">al_fread</span></a><span class="k2">(</span>file, buf, len<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>           URL_page <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_new"><span class="a">al_ustr_new</span></a><span class="k2">(</span>buf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>
<span class="number"> 31</span>           <span class="k1">int</span> T_sfx        <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32be"><span class="a">al_fread32be</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>           sfx   <span class="k3">=</span> <span class="k3">*</span><span class="k1">reinterpret_cast</span><span class="k3">&lt;</span><span class="k1">float</span><span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span><span class="k3">&amp;</span>T_sfx<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>
<span class="number"> 34</span>           <span class="k1">int</span> T_music      <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32be"><span class="a">al_fread32be</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>           music <span class="k3">=</span> <span class="k3">*</span><span class="k1">reinterpret_cast</span><span class="k3">&lt;</span><span class="k1">float</span><span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span><span class="k3">&amp;</span>T_music<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 36</span>
<span class="number"> 37</span>           fullscreen       <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fread32be"><span class="a">al_fread32be</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>
<span class="number"> 39</span>           <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>           Beep<span class="k2">(</span><span class="n">800</span>,<span class="n">200</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>
<span class="number"> 42</span>        <span class="k2">}</span><span class="k1">else</span><span class="k2">{</span> <span class="c">/// If file doesn't exist...</span>
<span class="number"> 43</span>
<span class="number"> 44</span>           modalidad_normal <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 45</span>           catg0            <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 46</span>           catg1            <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 47</span>           catg2            <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 48</span>           catg3            <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 49</span>           catg4            <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 50</span>           URL_page <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_new"><span class="a">al_ustr_new</span></a><span class="k2">(</span><span class="s">"www.Somestring.com"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>           sfx              <span class="k3">=</span> <span class="n">1</span>.<span class="n">6</span><span class="k2">;</span>
<span class="number"> 52</span>           music            <span class="k3">=</span> <span class="n">1</span>.<span class="n">5</span><span class="k2">;</span>
<span class="number"> 53</span>           fullscreen       <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 54</span>
<span class="number"> 55</span>           <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 56</span>        <span class="k2">}</span>
<span class="number"> 57</span>
<span class="number"> 58</span>     <span class="k2">}</span>
<span class="number"> 59</span>
<span class="number"> 60</span>     ~OPC_DATA<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 61</span>
<span class="number"> 62</span>        <a href="http://www.allegro.cc/manual/ALLEGRO_FILE"><span class="a">ALLEGRO_FILE</span></a><span class="k3">*</span> file <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_fopen"><span class="a">al_fopen</span></a><span class="k2">(</span><span class="s">"Datos/datos.dat"</span>, <span class="s">"wb"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 63</span>
<span class="number"> 64</span>        <a href="http://www.allegro.cc/manual/al_fwrite32be"><span class="a">al_fwrite32be</span></a><span class="k2">(</span>file, modalidad_normal<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 65</span>        <a href="http://www.allegro.cc/manual/al_fwrite32be"><span class="a">al_fwrite32be</span></a><span class="k2">(</span>file, catg0<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 66</span>        <a href="http://www.allegro.cc/manual/al_fwrite32be"><span class="a">al_fwrite32be</span></a><span class="k2">(</span>file, catg1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 67</span>        <a href="http://www.allegro.cc/manual/al_fwrite32be"><span class="a">al_fwrite32be</span></a><span class="k2">(</span>file, catg2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 68</span>        <a href="http://www.allegro.cc/manual/al_fwrite32be"><span class="a">al_fwrite32be</span></a><span class="k2">(</span>file, catg3<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 69</span>        <a href="http://www.allegro.cc/manual/al_fwrite32be"><span class="a">al_fwrite32be</span></a><span class="k2">(</span>file, catg4<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 70</span>
<span class="number"> 71</span>        <a href="http://www.allegro.cc/manual/al_fwrite32be"><span class="a">al_fwrite32be</span></a><span class="k2">(</span>file, <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><a href="http://www.allegro.cc/manual/al_ustr_size"><span class="a">al_ustr_size</span></a><span class="k2">(</span>URL_page<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 72</span>        <a href="http://www.allegro.cc/manual/al_fwrite"><span class="a">al_fwrite</span></a><span class="k2">(</span>file, <a href="http://www.allegro.cc/manual/al_cstr"><span class="a">al_cstr</span></a><span class="k2">(</span>URL_page<span class="k2">)</span>, <a href="http://www.allegro.cc/manual/al_ustr_size"><span class="a">al_ustr_size</span></a><span class="k2">(</span>URL_page<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 73</span>
<span class="number"> 74</span>        <a href="http://www.allegro.cc/manual/al_fwrite32be"><span class="a">al_fwrite32be</span></a><span class="k2">(</span>file, <span class="k3">*</span><span class="k1">reinterpret_cast</span><span class="k3">&lt;</span><span class="k1">int</span><span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span><span class="k3">&amp;</span>sfx<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 75</span>        <a href="http://www.allegro.cc/manual/al_fwrite32be"><span class="a">al_fwrite32be</span></a><span class="k2">(</span>file, <span class="k3">*</span><span class="k1">reinterpret_cast</span><span class="k3">&lt;</span><span class="k1">int</span><span class="k3">*</span><span class="k3">&gt;</span><span class="k2">(</span><span class="k3">&amp;</span>music<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 76</span>        <a href="http://www.allegro.cc/manual/al_fwrite32be"><span class="a">al_fwrite32be</span></a><span class="k2">(</span>file, fullscreen<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 77</span>
<span class="number"> 78</span>        <a href="http://www.allegro.cc/manual/al_fclose"><span class="a">al_fclose</span></a><span class="k2">(</span>file<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 79</span>
<span class="number"> 80</span>     <span class="k2">}</span>
<span class="number"> 81</span>
<span class="number"> 82</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

I had to use 32 bits to save booleans because it seems that even when their size it&#39;s just one bit <span class="source-code"><a href="http://www.allegro.cc/manual/al_fputc"><span class="a">al_fputc</span></a></span> didn&#39;t work.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (AMCerasoli)</author>
		<pubDate>Thu, 11 Aug 2011 17:22:36 +0000</pubDate>
	</item>
</rss>
