1<!--$Id: memp_register.so,v 10.38 2004/08/13 03:38:58 bostic Exp $-->
2<!--Copyright (c) 1997,2008 Oracle.  All rights reserved.-->
3<!--See the file LICENSE for redistribution information.-->
4<html>
5<head>
6<title>Berkeley DB: DbEnv::memp_register</title>
7<meta name="description" content="Berkeley DB: An embedded database programmatic toolkit.">
8<meta name="keywords" content="embedded,database,programmatic,toolkit,btree,hash,hashing,transaction,transactions,locking,logging,access method,access methods,Java,C,C++">
9</head>
10<body bgcolor=white>
11<table width="100%"><tr valign=top>
12<td>
13<b>DbEnv::memp_register</b>
14</td>
15<td align=right>
16<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a>
17<a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a></td>
18</tr></table>
19<hr size=1 noshade>
20<tt>
21<b><pre>
22#include &lt;db_cxx.h&gt;
23<p>
24extern "C" {
25    typedef int (*pgin_fcn_type)(DB_ENV *dbenv,
26	db_pgno_t pgno, void *pgaddr, DBT *pgcookie);
27    typedef int (*pgout_fcn_type)(DB_ENV *dbenv,
28	db_pgno_t pgno, void *pgaddr, DBT *pgcookie);
29};
30int
31DbEnv::memp_register(int ftype,
32    pgin_fcn_type pgin_fcn, pgout_fcn_type pgout_fcn);
33</pre></b>
34<hr size=1 noshade>
35<b>Description: DbEnv::memp_register</b>
36<p>The DbEnv::memp_register method registers page-in and page-out
37functions for files of type <b>ftype</b> in the specified pool.</p>
38<p>If the <b>pgin_fcn</b> function is non-NULL, it is called each time
39a page is read into the memory pool from a file of type <b>ftype</b>, or
40a page is created for a file of type <b>ftype</b> (see the
41DB_MPOOL_CREATE flag for the <a href="../api_cxx/memp_fget.html">DbMpoolFile::get</a> method).</p>
42<p>If the <b>pgout_fcn</b> function is non-NULL, it is called each time
43a page is written to a file of type <b>ftype</b>.</p>
44<p>The purpose of the DbEnv::memp_register function is to support processing
45when pages are entered into, or flushed from, the pool.  For example, this
46functionality might be used to do byte-endian conversion as pages are read
47from, or written to, the underlying file.</p>
48<p>A file type must be specified to make it possible for unrelated threads
49or processes that are sharing a pool, to evict each other's pages from
50the pool.  During initialization, applications should call
51DbEnv::memp_register for each type of file requiring input or output
52processing that will be sharing the underlying pool.  (No registry is
53necessary for the standard Berkeley DB access method types because
54<a href="../api_cxx/db_open.html">Db::open</a> registers them separately.)</p>
55<p>If a thread or process does not call DbEnv::memp_register for a file
56type, it is impossible for it to evict pages for any file requiring input
57or output processing from the pool.  For this reason,
58DbEnv::memp_register should always be called by each application sharing
59a pool for each type of file included in the pool, regardless of whether
60or not the application itself uses files of that type.</p>
61<p>The DbEnv::memp_register method
62either returns a non-zero error value
63or throws an exception that encapsulates a non-zero error value on
64failure, and returns 0 on success.
65</p>
66<b>Parameters</b> <br>
67 <b>ftype</b><ul compact><li>The <b>ftype</b> parameter specifies the type of file for which the
68page-in and page-out functions will be called.
69<p>The <b>ftype</b> value for a file must be a non-zero positive number
70less than 128 (0 and negative numbers are reserved for internal use by
71the Berkeley DB library).</p></ul>
72 <b>pgin_fcn, pgout_fcn</b><ul compact><li>The page-in and page-out functions.
73<p>The <b>pgin_fcn</b> and <b>pgout_fcn</b> functions are called with a
74reference to the current database environment, the page number being
75read or written, a pointer to the page being read or written, and any
76parameter <b>pgcookie</b> that was specified to the
77<a href="../api_cxx/memp_set_pgcookie.html">DbMpoolFile::set_pgcookie</a> method.</p>
78<p>The <b>pgin_fcn</b> and <b>pgout_fcn</b> functions should return 0 on
79success, and a non-zero value on failure, in which case the shared Berkeley DB
80library function calling it will also fail, returning that non-zero
81value.  The non-zero value should be selected from values outside of the
82Berkeley DB library namespace.</p></ul>
83<br>
84<hr size=1 noshade>
85<br><b>Class</b>
86<a href="../api_cxx/env_class.html">DbEnv</a>, <a href="../api_cxx/mempfile_class.html">DbMpoolFile</a>
87<br><b>See Also</b>
88<a href="../api_cxx/memp_list.html">Memory Pools and Related Methods</a>
89</tt>
90<table width="100%"><tr><td><br></td><td align=right>
91<a href="../api_cxx/api_core.html"><img src="../images/api.gif" alt="API"></a><a href="../ref/toc.html"><img src="../images/ref.gif" alt="Ref"></a>
92</td></tr></table>
93<p><font size=1>Copyright (c) 1996,2008 Oracle.  All rights reserved.</font>
94</body>
95</html>
96