## A Common Lisp wrapper to the Berkeley DB library
This is a Common Lisp wrapper to the Berkeley DB library. It uses cffi and trivial-garbage. It's been tested on sbcl but should work on any distribution. There are a couple of functions that need to be implemented to make it work on other common-lisp implementations. This library has a BSD license. Our main project page has an implementation [summary](https://common-lisp.net/project/cl-berkeley-db/) as well as the [api](https://common-lisp.net/project/cl-berkeley-db/api/). Both are included in the docs directory of the main project.
<p>This is a Common Lisp wrapper to the Berkeley DB library. It uses cffi and trivial-garbage. It's been tested on sbcl but should work on any distribution. There are a couple of functions that need to be implemented to make it work on other common-lisp implementations. This library has a BSD license.</p>
<pid="mailing-lists"> You can discuss cl-berkeley-db on our <ahref="http://www.common-lisp.net/mailman/listinfo/cl-berkeley-db-devel">mailing list</a>
</p>
</div>
<divid="download">
<h3>Download</h3>
<p>tarball distributions of all versions <ahref="http://common-lisp.net/project/cl-berkeley-db/dist">available</a></p>
<p>The last <ahref="http://common-lisp.net/project/cl-berkeley-db/dist/cl-berkeley-db-0.2.1">version</a> supporting Berkeley DB 4.5</p>
<p>You can <ahref="http://common-lisp.net/project/cl-berkeley-db/darcs"> browse our darcs repository</a></p>
<p>You can <ahref="https://gitlab.common-lisp.net/cl-berkeley-db/cl-berkeley-db"> browse our GitLab repository</a></p>
</div>
<divid="implemented-api">
<pid="library versions">
...
...
@@ -118,7 +109,7 @@
<p>Once "1.0" status is reached, the version will be bumped up to the version of the Berkeley DB library is. It will have the version <emphasis>berkeley-major.berkeley-minor.cl-berkeley-version</emphasis>. So for example for 4.5 it will be 4.5.0. The very minor version number for the berkeley library will be droped in our versions</p>
<divid="developers">
<h3>Developer Notes</h3>
<p>There are 2 api's. An internal one created by swig and an external one that is seen by the users. The swig generated interface covers 70% of the direct interface to the package. But the swig needs help in understanding some of the structures in db.h. It ignores constant declarations inside structure declarations. Also, it assumes that sub-structures (structure declarations inside other structure declarations) are pointers, causing alignment problems. For these reasons, interface files need to be created for structures that aren't translated correctly.</p>
<p>There are 2 api's. An internal one created by swig and an external one that is seen by the users. The swig generated interface covers 70% of the direct interface to the package. But Swig needs help in understanding some of the structures in db.h. It ignores constant declarations inside structure declarations. Also, it assumes that sub-structures (structure declarations inside other structure declarations) are pointers, causing alignment problems. For these reasons, interface files need to be created for structures that aren't translated correctly.</p>
<p>berkeley-db is "object oriented" in the sense that all structure instances have function pointers for thier methods. There are helper macros to allow the creation of these methods in lisp. The functions in berkeley-db are of 3 types: