mirror of
https://github.com/berkeleydb/libdb.git
synced 2024-11-16 17:16:25 +00:00
207 lines
8.2 KiB
HTML
207 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 examples</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_usecase.html" title="Dbstl typical use cases" />
|
||
<link rel="next" href="stl_db_usage.html" title="Berkeley DB configuration" />
|
||
</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 examples</th>
|
||
</tr>
|
||
<tr>
|
||
<td width="20%" align="left"><a accesskey="p" href="stl_usecase.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_db_usage.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_examples"></a>Dbstl examples</h2>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<p>
|
||
Because dbstl is so much like C++ STL, its usage exactly mirrors that
|
||
of C++ STL, with the exception of a few optional Berkeley DB specific
|
||
configurations. In fact, the only difference between a program using
|
||
dbstl and one using C++ STL is the class names. That is,
|
||
<code class="classname">vector</code> becomes <code class="classname">db_vector</code>,
|
||
and <code class="classname">map</code> becomes <code class="classname">db_map</code>.
|
||
</p>
|
||
<p>
|
||
The typical procedure for using dbstl is:
|
||
</p>
|
||
<div class="orderedlist">
|
||
<ol type="1">
|
||
<li>
|
||
<p>
|
||
Optionally create and open your own Berkeley DB environment and
|
||
database handles using the DB C++ API. If you perform these opens
|
||
using the C++ API, make sure to perform necessary
|
||
environment and database configurations at that time.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
Optionally pass environment and database handles to dbstl container
|
||
constructors when you create dbstl container objects. Note that you
|
||
can create a dbstl container without passing it an environment and
|
||
database object. When you do this, an internal anonymous database
|
||
is created for you. In this situation, dbstl provides no data
|
||
persistence guarantees.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
Perform dbstl-specific configurations. For example, you can
|
||
configure cursor open flags, as well as database
|
||
access for autocommit. You can also configure callback functions.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
Interact with the data contained in your Berkeley DB databases using
|
||
dbstl containers and iterators. This usage of dbstl is identical to
|
||
C++ STL container and iterator usage.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
At this time, you can also use dbstl calls that are specific to Berkeley DB.
|
||
For example, you can use Berkeley DB specific calls that manage transaction
|
||
begin/commit/abort, handle registration, and so forth. While these
|
||
calls are part of dbstl, they have no equivalence in the C++ STL
|
||
APIs.
|
||
</p>
|
||
</li>
|
||
<li>
|
||
<p>
|
||
When your application is done using Berkeley DB, you do not need to
|
||
explicitly close any Berkeley DB handles (environments, database,
|
||
cursors, and so forth). Dbstl automatically closes all such handles
|
||
for you.
|
||
</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<p>
|
||
For examples of dbstl usage, see the example programs in the
|
||
<code class="filename">$db/examples_stl</code> directory.
|
||
</p>
|
||
<p>
|
||
The following program listing provides two code fragments. You can
|
||
find more example code in the <code class="filename">dbstl/examples/</code>
|
||
and <code class="filename">dbstl/test</code> directories.
|
||
</p>
|
||
<pre class="programlisting">//////////////// Code Snippet 1 ////////////////
|
||
db_vector<int, ElementHolder<int> > vctr(100);
|
||
for (int i = 0; i < 100; i++)
|
||
vctr[i] = i;
|
||
|
||
for (int i = 0; i < 100; i++) {
|
||
cout<<"\nvctr["<<i<<"] : "<<vctr[i];
|
||
vctr[i] = vctr[i] * vctr[i];
|
||
cout<<"\nvctr["<<i<<"] squre : "<<vctr[i];
|
||
}
|
||
|
||
//////////////// Code Snippet 2 ////////////////
|
||
typedef db_map<char *, const char *, ElementHolder<const char *> >
|
||
strmap_t2;
|
||
strmap_t2 strmap;
|
||
char str[2], str2[2];
|
||
str[1] = str2[1] = '\0';
|
||
for (char c = 0; c < 26; c++) {
|
||
str[0] = c + 'a';
|
||
str2[0] = 'z' - c;
|
||
strmap[str] = str2;
|
||
}
|
||
for (strmap_t2::iterator itr = strmap.begin(); itr != strmap.end(); ++itr)
|
||
cout<<endl<<itr->first<<" : "<<itr->second;
|
||
|
||
using namespace dbstl;
|
||
dbstl::db_map<char, int> v;
|
||
v['i'] = 1;
|
||
cout<<v['i'];
|
||
|
||
|
||
dbstl::db_map<char *, char *> name_addr_map;
|
||
// The strings rather than the memory pointers are stored into DB.
|
||
name_addr_map["Alex"] = "Sydney Australia";
|
||
name_addr_map["David"] = "Shenzhen China";
|
||
cout<<"Alex's address:"<<name_addr_map["Alex"];
|
||
|
||
dbstl::db_vector<Person> vi;
|
||
// Some callback configurations follow here.
|
||
|
||
// The strings and objects rather than pointers are stored into DB.
|
||
|
||
Person obj("David Zhao", "Oracle", new Office("Boston", "USA"));
|
||
vi.push_back(obj); // More person storage.
|
||
for (int I = 0; I < vi.size(); I++)
|
||
cout<<vi[I]; </pre>
|
||
<p>
|
||
The first snippet initializes a db_vector container of 100 elements,
|
||
with an in-memory anonymous database internally created by dbstl. The
|
||
only difference between this and C++ STL is dbstl requires one more
|
||
<code class="literal">type</code> parameter:
|
||
<em class="parameter"><code>ElementHolder<int></code></em>. The
|
||
<code class="classname">ElementHolder</code> class template should be used for
|
||
every type of dbstl container that will store C++ primitive data types,
|
||
such as <code class="literal">int</code>, <code class="literal">float</code>,
|
||
<code class="literal">char *</code>, <code class="literal">wchar_t *</code>, and so forth. But these
|
||
class templates should not be used for class types for reasons that we
|
||
explain in the following chapters.
|
||
</p>
|
||
<p>
|
||
In the second code snippet, the assignment:
|
||
</p>
|
||
<pre class="programlisting">strmap[str] = str2;</pre>
|
||
<p>
|
||
is used to store a string pair (<code class="literal">(str, str2)</code>) instead
|
||
of pointers to the underlying database.
|
||
</p>
|
||
<p>
|
||
The rest of the code used in these snippets is identical to the code
|
||
you would use for C++ STL containers. However, by using dbstl, you are
|
||
storing data into a Berkeley DB database. If you create your own
|
||
database with backing files on disk, your data or objects can persist
|
||
and be restored when the program runs again.
|
||
</p>
|
||
</div>
|
||
<div class="navfooter">
|
||
<hr />
|
||
<table width="100%" summary="Navigation footer">
|
||
<tr>
|
||
<td width="40%" align="left"><a accesskey="p" href="stl_usecase.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_db_usage.html">Next</a></td>
|
||
</tr>
|
||
<tr>
|
||
<td width="40%" align="left" valign="top">Dbstl typical use cases </td>
|
||
<td width="20%" align="center">
|
||
<a accesskey="h" href="index.html">Home</a>
|
||
</td>
|
||
<td width="40%" align="right" valign="top"> Berkeley DB configuration</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
</body>
|
||
</html>
|