summaryrefslogtreecommitdiff
path: root/docs/programmer_reference/am_misc_struct.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/programmer_reference/am_misc_struct.html')
-rw-r--r--docs/programmer_reference/am_misc_struct.html83
1 files changed, 54 insertions, 29 deletions
diff --git a/docs/programmer_reference/am_misc_struct.html b/docs/programmer_reference/am_misc_struct.html
index 25128a75..77d135c5 100644
--- a/docs/programmer_reference/am_misc_struct.html
+++ b/docs/programmer_reference/am_misc_struct.html
@@ -14,17 +14,16 @@
<body>
<div xmlns="" class="navheader">
<div class="libver">
- <p>Library Version 11.2.5.3</p>
+ <p>Library Version 12.1.6.1</p>
</div>
<table width="100%" summary="Navigation header">
<tr>
- <th colspan="3" align="center">Storing C/C++ structures/objects</th>
+ <th colspan="3" align="center">Storing C/C++
+ structures/objects</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="am_misc_partial.html">Prev</a> </td>
- <th width="60%" align="center">Chapter 4. 
- Access Method Wrapup
- </th>
+ <th width="60%" align="center">Chapter 4.  Access Method Wrapup </th>
<td width="20%" align="right"> <a accesskey="n" href="am_misc_perm.html">Next</a></td>
</tr>
</table>
@@ -34,16 +33,23 @@
<div class="titlepage">
<div>
<div>
- <h2 class="title" style="clear: both"><a id="am_misc_struct"></a>Storing C/C++ structures/objects</h2>
+ <h2 class="title" style="clear: both"><a id="am_misc_struct"></a>Storing C/C++
+ structures/objects</h2>
</div>
</div>
</div>
- <p>Berkeley DB can store any kind of data, that is, it is entirely 8-bit clean.
-How you use this depends, to some extent, on the application language
-you are using. In the C/C++ languages, there are a couple of different
-ways to store structures and objects.</p>
- <p>First, you can do some form of run-length encoding and copy your
-structure into another piece of memory before storing it:</p>
+ <p>
+ Berkeley DB can store any kind of data, that is, it is
+ entirely 8-bit clean. How you use this depends, to some
+ extent, on the application language you are using. In the
+ C/C++ languages, there are a couple of different ways to store
+ structures and objects.
+ </p>
+ <p>
+ First, you can do some form of run-length encoding and copy
+ your structure into another piece of memory before storing
+ it:
+ </p>
<a id="prog_am23"></a>
<pre class="programlisting">struct {
char *data1;
@@ -63,11 +69,15 @@ memcpy(p, &amp;info.data2, sizeof(info.data2));
p += sizeof(info.data2);
...
</pre>
- <p>and so on, until all the fields of the structure have been loaded into
-the byte array. If you want more examples, see the Berkeley DB logging
-routines (for example, btree/btree_auto.c:__bam_split_log()). This
-technique is generally known as "marshalling". If you use this
-technique, you must then un-marshall the data when you read it back:</p>
+ <p>
+ and so on, until all the fields of the structure have been
+ loaded into the byte array. If you want more examples, see the
+ Berkeley DB logging routines (for example,
+ btree/btree_auto.c:__bam_split_log()). This technique is
+ generally known as "marshalling". If you use this technique,
+ you must then un-marshall the data when you read it
+ back:
+ </p>
<a id="prog_am24"></a>
<pre class="programlisting">struct {
char *data1;
@@ -87,27 +97,41 @@ memcpy(&amp;info.data2, p, sizeof(info.data2));
p += sizeof(info.data2);
...
</pre>
- <p>and so on.</p>
- <p>The second way to solve this problem only works if you have just one
-variable length field in the structure. In that case, you can declare
-the structure as follows:</p>
+ <p>
+ and so on.
+ </p>
+ <p>
+ The second way to solve this problem only works if you have
+ just one variable length field in the structure. In that case,
+ you can declare the structure as follows:
+ </p>
<pre class="programlisting">struct {
int a, b, c;
u_int8_t buf[1];
} info;</pre>
- <p>Then, let's say you have a string you want to store in this structure.
-When you allocate the structure, you allocate it as:</p>
+ <p>
+ Then, let's say you have a string you want to store in this
+ structure. When you allocate the structure, you allocate it
+ as:
+ </p>
<pre class="programlisting">malloc(sizeof(struct info) + strlen(string));</pre>
- <p>Since the allocated memory is contiguous, you can the initialize the
-structure as:</p>
+ <p>
+ Since the allocated memory is contiguous, you can the
+ initialize the structure as:
+ </p>
<pre class="programlisting">info.a = 1;
info.b = 2;
info.c = 3;
memcpy(&amp;info.buf[0], string, strlen(string) + 1);</pre>
- <p>and give it to Berkeley DB to store, with a length of:</p>
+ <p>
+ and give it to Berkeley DB to store, with a length
+ of:
+ </p>
<pre class="programlisting">sizeof(struct info) + strlen(string);</pre>
- <p>In this case, the structure can be copied out of the database and used
-without any additional work.</p>
+ <p>
+ In this case, the structure can be copied out of the
+ database and used without any additional work.
+ </p>
</div>
<div class="navfooter">
<hr />
@@ -120,7 +144,8 @@ without any additional work.</p>
<td width="40%" align="right"> <a accesskey="n" href="am_misc_perm.html">Next</a></td>
</tr>
<tr>
- <td width="40%" align="left" valign="top">Partial record storage and retrieval </td>
+ <td width="40%" align="left" valign="top">Partial record storage and
+ retrieval </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>