Files
Yasuhiro KIMURA 9678929700 Update to 18.1.40
2020-07-24 01:10:28 +09:00

219 lines
8.7 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Dbstl miscellaneous notes</title>
<link rel="stylesheet" href="gettingStarted.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
<link rel="start" href="index.html" title="Berkeley DB Programmer's Reference Guide" />
<link rel="up" href="stl.html" title="Chapter 7. Standard Template Library API" />
<link rel="prev" href="stl_memory_mgmt.html" title="Dbstl memory management" />
<link rel="next" href="stl_known_issues.html" title="Dbstl known issues" />
</head>
<body>
<div xmlns="" class="navheader">
<div class="libver">
<p>Library Version 18.1.40</p>
</div>
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">Dbstl miscellaneous notes</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="stl_memory_mgmt.html">Prev</a> </td>
<th width="60%" align="center">Chapter 7. Standard Template Library API</th>
<td width="20%" align="right"> <a accesskey="n" href="stl_known_issues.html">Next</a></td>
</tr>
</table>
<hr />
</div>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a id="stl_misc"></a>Dbstl miscellaneous notes</h2>
</div>
</div>
</div>
<div class="toc">
<dl>
<dt>
<span class="sect2">
<a href="stl_misc.html#idm140654539192224">Special notes about trivial methods</a>
</span>
</dt>
<dt>
<span class="sect2">
<a href="stl_misc.html#idm140654539200592">Using correct container and iterator public
types</a>
</span>
</dt>
</dl>
</div>
<div class="sect2" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a id="idm140654539192224"></a>Special notes about trivial methods</h3>
</div>
</div>
</div>
<p>
There are some standard STL methods which are
meaningless in dbstl, but they are kept in dbstl as no-ops
so as to stay consistent with the standard. These are:
</p>
<table class="simplelist" border="0" summary="Simple list">
<tr>
<td>
<code class="methodname">db_vecter::reserve();</code>
</td>
</tr>
<tr>
<td>
<code class="methodname">db_vector::max_size();</code>
</td>
</tr>
<tr>
<td>
<code class="methodname">db_vector::capacity();</code>
</td>
</tr>
<tr>
<td>
<code class="methodname">db_map::reserve();</code>
</td>
</tr>
<tr>
<td>
<code class="methodname">db_map::max_size();</code>
</td>
</tr>
</table>
<p>
<code class="methodname">db_vector&lt;&gt;::max_size()</code> and
<code class="methodname">db_map&lt;&gt;::max_size()</code>
both return 2^30. This does not mean that Berkeley DB can
only hold that much data. This value is returned to
conform to some compilers' overflow rules — if we
set bigger numbers like 2^32 or 2^31, some compilers
complain that the number has overflowed.
</p>
<p>
See the Berkeley DB documentation for information about
limitations on how much data a database can store.
</p>
<p>
There are also some read-only functions. You set the
configuration for these using the Berkeley DB API. You
access them using the container's methods. Again, this is
to keep consistent with C++ standard STL containers, such
as:
</p>
<table class="simplelist" border="0" summary="Simple list">
<tr>
<td>
<code class="methodname">db_map::key_comp();</code>
</td>
</tr>
<tr>
<td>
<code class="methodname">db_map::value_comp();</code>
</td>
</tr>
<tr>
<td>
<code class="methodname">db_map::hash_funct();</code>
</td>
</tr>
<tr>
<td>
<code class="methodname">db_map::key_eq();</code>
</td>
</tr>
</table>
</div>
<div class="sect2" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a id="idm140654539200592"></a>Using correct container and iterator public
types</h3>
</div>
</div>
</div>
<p>
All public types defined by the C++ STL specification
are present in dbstl. One thing to note is the <span class="bold"><strong>value_type</strong></span>. dbstl defines the
<span class="bold"><strong>value_type</strong></span> for each
iterator and container class to be the raw type without
the
<code class="classname">ElementRef</code>/<code class="classname">ElementHolder</code>
wrapper, so this type of variable can not be used to store
data in a database. There is a <span class="bold"><strong>value_type_wrap</strong></span>
type for each container
and iterator type, with the raw type wrapped by the
<code class="classname">ElementRef</code>/<code class="classname">ElementHolder</code>.
</p>
<p>
For example, when type <code class="literal">int_vector_t</code>
is defined as
</p>
<pre class="programlisting">db_vector&lt;int, ElementHolder&lt;int&gt; &gt;</pre>
<p>
its <span class="bold"><strong>value_type</strong></span> is
<code class="literal">int</code>, its <span class="bold"><strong>value_type_wrap</strong></span>
is <code class="literal">ElementHolder&lt;int&gt;</code>, and its
reference and pointer types are
<code class="literal">ElementHolder&lt;int&gt;&amp;</code> and
<code class="literal">ElementHolder&lt;int&gt;*</code>
respectively. If you need to store data, use <span class="bold"><strong>value_type_wrap</strong></span> to make use of
the wrapper to store data into database.
</p>
<p>
The reason we leave <span class="bold"><strong>value_type</strong></span>
as the raw type is that we want the existing algorithms in the STL
library to work with dbstl because we have seen that without doing so,
a few tests will fail.
</p>
<p>
You need to use the same type as the return type of the
data element retrieval functions to hold a value in order
to properly manipulate the data element. For example, when
calling
</p>
<pre class="programlisting">db_vector&lt;T&gt;::operator[]</pre>
<p>
check that the return type for this function is
</p>
<pre class="programlisting">db_vector&lt;T&gt;::datatype_wrap</pre>
<p>
Then, hold the return value using an object of the same
type:
</p>
<pre class="programlisting">db_vector&lt;T&gt;::datatype_wrap refelem = vctr[3];</pre>
</div>
</div>
<div class="navfooter">
<hr />
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left"><a accesskey="p" href="stl_memory_mgmt.html">Prev</a> </td>
<td width="20%" align="center">
<a accesskey="u" href="stl.html">Up</a>
</td>
<td width="40%" align="right"> <a accesskey="n" href="stl_known_issues.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Dbstl memory management </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
<td width="40%" align="right" valign="top"> Dbstl known issues</td>
</tr>
</table>
</div>
</body>
</html>