2011-09-13 17:44:24 +00:00
<?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" >
2011-12-20 00:07:10 +00:00
< a href = "stl_misc.html#id3946759" > Special notes about trivial methods< / a >
2011-09-13 17:44:24 +00:00
< / span >
< / dt >
< dt >
< span class = "sect2" >
2011-12-20 00:07:10 +00:00
< a href = "stl_misc.html#id3946773" > Using correct container and iterator public types< / a >
2011-09-13 17:44:24 +00:00
< / span >
< / dt >
< / dl >
< / div >
< div class = "sect2" lang = "en" xml:lang = "en" >
< div class = "titlepage" >
< div >
< div >
2011-12-20 00:07:10 +00:00
< h3 class = "title" > < a id = "id3946759" > < / a > Special notes about trivial methods< / h3 >
2011-09-13 17:44:24 +00:00
< / 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 >
2011-12-20 00:07:10 +00:00
< h3 class = "title" > < a id = "id3946773" > < / a > Using correct container and iterator public types< / h3 >
2011-09-13 17:44:24 +00:00
< / 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 >