mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-16 17:16:25 +00:00
200 lines
8.2 KiB
HTML
200 lines
8.2 KiB
HTML
<?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 11.2.5.2</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#id3946759">Special notes about trivial methods</a>
|
||
</span>
|
||
</dt>
|
||
<dt>
|
||
<span class="sect2">
|
||
<a href="stl_misc.html#id3946773">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="id3946759"></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<>::max_size()</code> and
|
||
<code class="methodname">db_map<>::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="id3946773"></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<int, ElementHolder<int> ></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<int></code>,
|
||
and its reference and pointer types are <code class="literal">ElementHolder<int>&</code> and
|
||
<code class="literal">ElementHolder<int>*</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<T>::operator[]</pre>
|
||
<p>
|
||
check that the return type for this function is
|
||
</p>
|
||
<pre class="programlisting">db_vector<T>::datatype_wrap</pre>
|
||
<p>
|
||
Then, hold the return value using an object of the same type:
|
||
</p>
|
||
<pre class="programlisting">db_vector<T>::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>
|