]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
tokyocabinet: Add Tokyo Cabinet bindings.
authorEvan Nemerson <evan@coeus-group.com>
Wed, 4 Aug 2010 19:30:07 +0000 (12:30 -0700)
committerEvan Nemerson <evan@coeus-group.com>
Wed, 4 Aug 2010 19:30:07 +0000 (12:30 -0700)
vapi/Makefile.am
vapi/tokyocabinet.vapi [new file with mode: 0644]

index d3e7d8d9e8626b1902d16c3da599b16cead24310..83db45d8c44cfca3d224a95bec69ec7d3825f600 100644 (file)
@@ -198,6 +198,7 @@ dist_vapi_DATA = \
        sqlite3.vapi \
        taglib_c.vapi \
        tiff.vapi \
+       tokyocabinet.vapi \
        tracker-indexer-module-1.0.vapi \
        twitter-glib-1.0.deps \
        twitter-glib-1.0.vapi \
diff --git a/vapi/tokyocabinet.vapi b/vapi/tokyocabinet.vapi
new file mode 100644 (file)
index 0000000..eb85146
--- /dev/null
@@ -0,0 +1,930 @@
+/* tokyocabinet.vala
+ *
+ * Copyright (C) 2008-2010  Evan Nemerson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ * Author:
+ *      Evan Nemerson <evan@coeus-group.com>
+ */
+
+namespace TokyoCabinet {
+       [CCode (cname = "tcversion")]
+       public const string version;
+
+       [CCode (cname = "tcfatalfunc")]
+       public delegate void FatalFunc (string msg);
+       [CCode (cname = "TCCMP")]
+       public delegate int CompareFunc (uint8[] a, uint8[] b);
+       [CCode (cname = "TCCODEC")]
+       public delegate uint8[] CodecFunc (uint8[] data);
+       [CCode (cname = "TCPDPROC")]
+       public delegate uint8[] ProcessDuplicateFunc (uint8[] value);
+       [CCode (cname = "TCITER")]
+       public delegate bool IteratorFunc (uint8[] key, uint8[] data);
+
+       [CCode (lower_case_cprefix = "tc", cheader_filename = "tcutil.h")]
+       namespace Memory {
+               public static void* malloc (size_t size);
+               public static void* calloc (size_t nmemb, size_t size);
+               public static void* realloc (void *ptr, size_t size);
+               [CCode (cname = "tcmemdup")]
+               public static void* copy (void *ptr, size_t size);
+               public static string strdup (string str);
+               public static void free ([CCode (type = "void*")] void* ptr);
+
+               public static uint8[]? copy_and_free (uint8[]? data) {
+                       if ( data == null )
+                               return null;
+
+                       uint8[] ret = new uint8[data.length];
+                       GLib.Memory.copy (ret, data, data.length);
+                       TokyoCabinet.Memory.free (data);
+                       return ret;
+               }
+               public static string? copy_and_free_string (string? str) {
+                       if ( str == null )
+                               return null;
+
+                       string ret = str;
+                       TokyoCabinet.Memory.free (str);
+                       return ret;
+               }
+       }
+
+       [Compact, CCode (cname = "TCXSTR", crpefix = "tcxstr", free_function = "tcxstrdel", cheader_filename = "tcutil.h", copy_function = "tcxstrdup")]
+       public class XString {
+               public XString ();
+               [CCode (cname = "tcxstrnew2")]
+               public XString.from_string (string str);
+               [CCode (cname = "tcxstrnew3")]
+               public XString.sized (int asiz);
+               [CCode (cname = "tcxstrdup")]
+               public XString copy ();
+               [CCode (cname = "tcxstrcat")]
+               public void append (uint8[] data);
+               [CCode (cname = "tcxstrcat2")]
+               public void append_string (string str);
+               public void clear ();
+               [PrintfFormat ()]
+               public void printf (string format, ...);
+
+               [CCode (cname = "ptr", array_length_cname = "size")]
+               public uint8[] data;
+               [CCode (cname = "ptr")]
+               public string str;
+               [CCode (cname = "asize")]
+               public int allocated;
+       }
+
+       [Compact, CCode (cname = "TCLIST", cprefix = "tclist", free_function = "tclistdel", cheader_filename = "tcutil.h", copy_function = "tclistdup")]
+       public class List {
+               [CCode (has_target = false)]
+               public delegate int CompareDatumFunc (TokyoCabinet.List.Datum a, TokyoCabinet.List.Datum b);
+
+               [CCode (cname = "TCLISTDATUM")]
+               public struct Datum {
+                       [CCode (cname = "ptr", array_length_cname = "size")]
+                       public uint8[] data;
+                       [CCode (cname = "ptr")]
+                       public string str;
+               }
+
+               public List ();
+               [CCode (cname = "tclistnew3")]
+               public List.from_strings (string s1, ...);
+               [CCode (cname = "tclistnew2")]
+               public List.sized (int anum);
+               [CCode (cname = "tclistdup")]
+               public List copy ();
+               [CCode (cname = "tclistval")]
+               public unowned uint8[]? index (int index);
+               [CCode (cname = "tclistval2")]
+               public unowned string? index_string (int index);
+               public void push (uint8[] data);
+               [CCode (cname = "tclistpush2")]
+               public void push_string (string str);
+               [CCode (cname = "tclistpop")]
+               public unowned uint8[] _pop ();
+               [CCode (cname = "_vala_tclistpop")]
+               public uint8[] pop () {
+                       return TokyoCabinet.Memory.copy_and_free (this._pop ());
+               }
+               [CCode (cname = "tclistpop2")]
+               public unowned string _pop_string ();
+               [CCode (cname = "_vala_tclistpop2")]
+               public string pop_string () {
+                       return TokyoCabinet.Memory.copy_and_free_string (this._pop_string ());
+               }
+               public void unshift (uint8[] data);
+               [CCode (cname = "tclistunshift2")]
+               public void unshift_string (string str);
+               [CCode (cname = "tclistshift")]
+               public unowned uint8[] _shift ();
+               [CCode (cname = "_vala_tclistshift")]
+               public uint8[] shift () {
+                       return TokyoCabinet.Memory.copy_and_free (this._shift ());
+               }
+               [CCode (cname = "tclistshift2")]
+               public unowned string _shift_string ();
+               [CCode (cname = "_vala_tclistshift2")]
+               public string shift_string () {
+                       return TokyoCabinet.Memory.copy_and_free_string (this._shift_string ());
+               }
+               public void insert (int index, uint8[] data);
+               [CCode (cname = "tclistinsert2")]
+               public void insert_string (int index, string str);
+               [CCode (cname = "tclistremove")]
+               public unowned uint8[] _remove (int index);
+               [CCode (cname = "_vala_tclistremove")]
+               public uint8[] remove (int index) {
+                       return TokyoCabinet.Memory.copy_and_free (this._remove (index));
+               }
+               [CCode (cname = "tclistremove2")]
+               public unowned string _remove_string (int index);
+               [CCode (cname = "_vala_tclistremove2")]
+               public string remove_string (int index) {
+                       return TokyoCabinet.Memory.copy_and_free_string (this._remove_string (index));
+               }
+               [CCode (cname = "tclistover")]
+               public void replace (int index, uint8[] data);
+               [CCode (cname = "tclistover2")]
+               public void replace_string (int index, string str);
+               [CCode (cname = "tclistsort")]
+               public void sort_sensitive ();
+               [CCode (cname = "tclistsortci")]
+               public void sort_insensitive ();
+               public void sort (TokyoCabinet.List.CompareDatumFunc func);
+               public void lsearch (char[] ptr);
+               public void bsearch (char[] ptr);
+               public void clear ();
+               [CCode (cname = "tclistdump")]
+               public unowned uint8[] _dump ();
+               [CCode (cname = "_vala_tclistdump")]
+               public uint8[] dump () {
+                       return TokyoCabinet.Memory.copy_and_free (this._dump ());
+               }
+               public List.load (uint8[] ptr);
+               [CCode (cname = "tclistinvert")]
+               public void reverse ();
+               [PrintfFormat]
+               public void push_printf (string fmt, ...);
+
+               [CCode (array_length_cname = "anum")]
+               public TokyoCabinet.List.Datum[] array;
+               public int start;
+               [CCode (cname = "num")]
+               public int num_used;
+       }
+
+       [Compact, CCode (cname = "TCMAPREC")]
+       public class MapRecord {
+               [CCode (cname = "ksiz")]
+               public int32 key_size;
+               [CCode (cname = "vsiz")]
+               public int32 value_size;
+               public TokyoCabinet.MapRecord left;
+               public TokyoCabinet.MapRecord right;
+               public TokyoCabinet.MapRecord prev;
+               public TokyoCabinet.MapRecord next;
+       }
+
+       [Compact, CCode (cname = "TCMAP", cprefix = "tcmap", free_function = "tcmapdel", cheader_filename = "tcutil.h", copy_function = "tcmapdup")]
+       public class Map {
+               public Map ();
+               [CCode (cname = "tcmapnew2")]
+               public Map.sized (uint32 bnum);
+               [CCode (cname = "tcmapnew3")]
+               public Map.from_strings (string key1, string val1, ...);
+               [CCode (cname = "tcmapload")]
+               public Map.load (uint8[] ptr);
+               [CCode (cname = "tcmapdup")]
+               public Map copy ();
+               [CCode (cname = "tcmapputkeep")]
+               public void put (uint8[] key, uint8[] value);
+               [CCode (cname = "tcmapputkeep2")]
+               public void put_string (string key, string value);
+               [CCode (cname = "tcmapput")]
+               public bool replace (uint8[] key, uint8[] value);
+               [CCode (cname = "tcmapput2")]
+               public bool replace_string (string key, string value);
+               [CCode (cname = "tcmapputcat")]
+               public void append (uint8[] key, uint8[] value);
+               [CCode (cname = "tcmapputcat2")]
+               public void append_string (string key, string value);
+               [CCode (cname = "tcmapout")]
+               public bool remove (uint8[] key);
+               [CCode (cname = "tcmapout2")]
+               public bool remove_string (string key);
+               [CCode (cname = "tcmapget")]
+               public unowned uint8[]? get (char[] key);
+               [CCode (cname = "tcmapget2")]
+               public unowned string? get_string (string key);
+               public bool move (char[] key, bool head = true);
+               [CCode (cname = "tcmapmove2")]
+               public bool move_string (string key, bool head = true);
+               [CCode (cname = "tcmapiterinit")]
+               public void iterator_init ();
+               [CCode (cname = "tcmapiternext")]
+               public unowned uint8[] iterator_next ();
+               [CCode (cname = "tcmapiternext2")]
+               public unowned string? iterator_next_string ();
+               [CCode (cname = "tcmapiterval2")]
+               public unowned string? iterator_value_string (string key);
+               [CCode (cname = "tcmapiterval")]
+               public unowned uint8[]? iterator_value (char[] key);
+               public TokyoCabinet.List keys ();
+               [CCode (cname = "tcmapvals")]
+               public TokyoCabinet.List values ();
+               [CCode (cname = "tcmapaddint")]
+               public int add_int (uint8[] key, int num);
+               [CCode (cname = "tcmapadddouble")]
+               public double add_double (char[] key, double num);
+               public void clear ();
+               [CCode (cname = "tcmapcutfront")]
+               public void cut_front (int num);
+               [CCode (cname = "tcmapdump")]
+               public unowned uint8[] _dump ();
+               [CCode (cname = "_vala_tcmapdump")]
+               public uint8[] dump () {
+                       return TokyoCabinet.Memory.copy_and_free (this._dump ());
+               }
+
+               [CCode (array_length_cname = "bnum", array_length_type = "guint32")]
+               public TokyoCabinet.MapRecord[] buckets;
+               public TokyoCabinet.MapRecord first;
+               public TokyoCabinet.MapRecord last;
+               public TokyoCabinet.MapRecord cur;
+               [CCode (cname = "rnum")]
+               public uint64 num_records;
+               [CCode (cname = "msiz")]
+               public uint64 size;
+       }
+
+       [Compact, CCode (cname = "TCTREE", cprefix = "tctree", free_function = "tctreedel", cheader_filename = "tcutil.h", copy_function = "tctreedup")]
+       public class Tree {
+               [CCode (cname = "TREECMP")]
+               public delegate int Compare (uint8[] a, uint8[] b);
+
+               [Compact, CCode (cname = "TCTREEREC")]
+               public class Record {
+                       [CCode (cname = "ksiz")]
+                       public int32 key_size;
+                       [CCode (cname = "vsiz")]
+                       public int32 value_size;
+                       TokyoCabinet.Tree.Record left;
+                       TokyoCabinet.Tree.Record right;
+               }
+
+               [CCode (cname = "tctreecmplexical")]
+               public static int compare_lexical (uint8[] a, uint8[] b);
+               [CCode (cname = "tctreecmpdecimal")]
+               public static int compare_decimal (uint8[] a, uint8[] b);
+               [CCode (cname = "tctreecmpint32")]
+               public static int compare_int32 (uint8[] a, uint8[] b);
+               [CCode (cname = "tctreecmpint64")]
+               public static int compare_int64 (uint8[] a, uint8[] b);
+
+               [CCode (cname = "tctreenew2")]
+               public Tree (TokyoCabinet.Tree.Compare cmp = TokyoCabinet.Tree.compare_lexical);
+               public Tree.load (uint8[] data, TokyoCabinet.Tree.Compare cmp = TokyoCabinet.Tree.compare_lexical);
+               [CCode (cname = "tctreedup")]
+               public Tree copy ();
+               [CCode (cname = "tctreeput")]
+               public void replace (uint8[] key, uint8[] value);
+               [CCode (cname = "tctreeput2")]
+               public void replace_string (string key, string value);
+               [CCode (cname = "tctreeputkeep")]
+               public bool put (uint8[] key, uint8[] value);
+               [CCode (cname = "tctreeputkeep2")]
+               public bool put_string (string key, string value);
+               [CCode (cname = "tctreeputcat")]
+               public void append (uint8[] key, uint8[] value);
+               [CCode (cname = "tctreeputcat2")]
+               public void append_string (string key, string value);
+               [CCode (cname = "tctreeout")]
+               public bool remove (uint8[] key);
+               [CCode (cname = "tctreeout2")]
+               public bool remove_string (string key);
+               [CCode (cname = "tctreeget")]
+               public unowned uint8[]? get (uint8[] key);
+               [CCode (cname = "tctreeget2")]
+               public unowned string? get_string (string key);
+               [CCode (cname = "tctreeiterinit")]
+               public void iterator_init ();
+               [CCode (cname = "tctreeiternext")]
+               public unowned uint8[]? iterator_next ();
+               [CCode (cname = "tctreeiternext2")]
+               public unowned string? iterator_next_string ();
+               [CCode (cname = "tctreeiterval")]
+               public unowned uint8[]? iterator_value (uint8[] key);
+               [CCode (cname = "tctreeiterval2")]
+               public unowned string? iterator_value_string (string key);
+               [CCode (cname = "tctreekeys")]
+               public TokyoCabinet.List get_keys ();
+               [CCode (cname = "tctreevals")]
+               public TokyoCabinet.List get_values ();
+               [CCode (cname = "tctreeaddint")]
+               public int add_int (uint8[] key, int num);
+               [CCode (cname = "tctreeadddouble")]
+               public double add_double (uint8[] key, double num);
+               public void clear ();
+               [CCode (cname = "tctreedump")]
+               public unowned uint8[] _dump ();
+               [CCode (cname = "tctreedump")]
+               public uint8[] dump () {
+                       return TokyoCabinet.Memory.copy_and_free (this._dump ());
+               }
+
+               public TokyoCabinet.Tree.Record root;
+               public TokyoCabinet.Tree.Record cur;
+               public uint64 rnum;
+               public uint64 msiz;
+               [CCode (deletage_target_cname = "cmpop")]
+               public TokyoCabinet.Tree.Compare cmp;
+       }
+
+       [Compact, CCode (cname = "TCMDB", cprefix = "tcmdb", free_function = "tctreedel", cheader_filename = "tcutil.h")]
+       public class MDB {
+               public MDB ();
+               public MDB.with_num_buckets (uint32 bnum);
+               public void replace (uint8[] key, uint8[] value);
+               [CCode (cname = "tcmdbput2")]
+               public void replace_string (string key, string value);
+               [CCode (cname = "tcmdbputkeep")]
+               public bool put (uint8[] key, uint8[] value);
+               [CCode (cname = "tcmdbputkeep2")]
+               public bool put_string (string key, string value);
+               [CCode (cname = "tcmdbputcat")]
+               public void append (uint8[] key, uint8[] value);
+               [CCode (cname = "tcmdbputcat2")]
+               public void append_string (string key, string value);
+               [CCode (cname = "tcmdbout")]
+               public bool remove (uint8[] key);
+               [CCode (cname = "tcmdbout2")]
+               public bool remove_string (string key);
+               [CCode (cname = "tcmdbget2")]
+               public unowned string? get_string (string key);
+               [CCode (cname = "tcmdbget")]
+               public unowned uint8[]? get (uint8[] key);
+               [CCode (cname = "tcmdbvsiz")]
+               public int value_size (uint8[] key);
+               [CCode (cname = "tcmdbvsiz2")]
+               public int value_size_string (string key);
+               [CCode (cname = "tcmdbiterinit")]
+               public void iterator_init ();
+               [CCode (cname = "tcmdbiternext")]
+               public uint8[]? iterator_next ();
+               [CCode (cname = "tcmdbiternext2")]
+               public unowned string? iterator_next_string ();
+               [CCode (cname = "tcmdbfwmkeys")]
+               public TokyoCabinet.List forward_matching_keys (uint8[] pbuf, int max);
+               [CCode (cname = "tcmdbfwmkeys2")]
+               public TokyoCabinet.List forward_matching_keys_string (string pstr, int max);
+               [CCode (cname = "tcmdbrnum")]
+               public uint64 get_length ();
+               [CCode (cname = "tcmdbmsiz")]
+               public uint64 get_size ();
+               [CCode (cname = "tcmdbaddint")]
+               public int add_int (uint8[] key, int num);
+               [CCode (cname = "tcmdbadddouble")]
+               public double add_double (uint8[] key, double num);
+               [CCode (cname = "tcmdbvanish")]
+               public void clear ();
+               [CCode (cname = "tcmdbcutfront")]
+               public void cut_front (int num);
+
+               public uint64 length { get { return this.get_length (); } }
+               public uint64 size { get { return this.get_size (); } }
+       }
+
+       [Compact, CCode (cname = "TCNDB", cprefix = "tcndb", free_function = "tcndbdel", cheader_filename = "tcutil.h")]
+       public class NDB {
+               [CCode (cname = "tcndbnew2")]
+               public NDB (TokyoCabinet.BDB.Compare cmp = TokyoCabinet.Tree.compare_lexical, void * cmpop = null);
+               public void replace (uint8[] key, uint8[] value);
+               [CCode (cname = "tcndbput2")]
+               public void replace_string (string key, string value);
+               [CCode (cname = "tcndbputkeep")]
+               public bool put (uint8[] key, uint8[] value);
+               [CCode (cname = "tcndbputkeep2")]
+               public bool put_string (string key, string value);
+               [CCode (cname = "tcndbputcat")]
+               public bool append (uint8[] key, uint8[] value);
+               [CCode (cname = "tcndbputcat2")]
+               public bool append_string (string key, string value);
+               [CCode (cname = "tcndbout")]
+               public bool remove (uint8[] key);
+               [CCode (cname = "tcndbout2")]
+               public bool remove_string (string key);
+               [CCode (cname = "tcndbget")]
+               private unowned uint8[]? _get (uint8[] key);
+               [CCode (name = "_vala_tcndbget")]
+               public uint8[]? get (uint8[] key) {
+                       return TokyoCabinet.Memory.copy_and_free (this._get (key));
+               }
+               public string? get_string (string key) {
+                       unowned uint8[] kbuf = (uint8[]) key;
+                       kbuf.length = (int) key.size ();
+                       return (string) this.get (kbuf);
+               }
+               [CCode (cname = "tcndbvsiz")]
+               public int value_size (uint8[] key);
+               [CCode (cname = "tcndbvsiz2")]
+               public int value_size_string (string key);
+               [CCode (cname = "tcndbiterinit")]
+               public void iterator_init ();
+               [CCode (cname = "tcndbiterinit2")]
+               public void iterator_init_before (uint8[] key);
+               [CCode (cname = "tcndbiterinit3")]
+               public void iterator_init_before_string (string key);
+               [CCode (cname = "tcndbiternext")]
+               public unowned uint8[]? _iterator_next ();
+               public uint8[]? iterator_next () {
+                       return TokyoCabinet.Memory.copy_and_free (this._iterator_next ());
+               }
+               [CCode (cname = "tcndbiternext2")]
+               public unowned string? _iterator_next_string ();
+               public string? iterator_next_string () {
+                       return TokyoCabinet.Memory.copy_and_free_string (this._iterator_next_string ());
+               }
+               [CCode (cname = "tcndbfwmkeys")]
+               public TokyoCabinet.List forward_matching_keys (uint8[] pbuf, int max);
+               [CCode (cname = "tcndbfwnkeys2")]
+               public TokyoCabinet.List forward_matching_keys_string (string pstr, int max);
+               [CCode (cname = "tcndbrnum")]
+               public uint64 get_length ();
+               [CCode (cname = "tcndbmsiz")]
+               public uint64 get_size ();
+               [CCode (cname = "tcndbaddint")]
+               public int add_int (uint8[] key, int num);
+               [CCode (cname = "tcndbadddouble")]
+               public double add_double (uint8[] key, double num);
+               [CCode (cname = "tcndbvanish")]
+               public void clear ();
+               [CCode (cname = "tcndbcutfringe")]
+               public void cut_fringe (int num);
+
+               public uint64 length { get { return this.get_length (); } }
+               public uint64 size { get { return this.get_size (); } }
+       }
+
+       [CCode (cname = "int", cprefix = "TCE", cheader_filename = "tchdb.h")]
+       public enum ErrorCode {
+               SUCCESS,
+               THREAD,
+               INVALID,
+               NOFILE,
+               NOPERM,
+               META,
+               RHEAD,
+               OPEN,
+               CLOSE,
+               TRUNC,
+               SYNC,
+               STAT,
+               SEEK,
+               READ,
+               WRITE,
+               MMAP,
+               LOCK,
+               UNLINK,
+               RENAME,
+               MKDIR,
+               RMDIR,
+               KEEP,
+               NOREC,
+               MISC
+       }
+
+       [Compact, CCode (cname = "TCHDB", cprefix = "tchdb", free_function = "tchdbdel", cheader_filename = "tchdb.h")]
+       public class HDB {
+               [Flags, CCode (cname = "uint8_t", cprefix = "HDBT", cheader_filename = "tchdb.h")]
+               public enum TuningOption {
+                       LARGE,
+                       DEFLATE,
+                       BZIP,
+                       TCBS,
+                       EXCODEC
+               }
+
+               [Flags, CCode (cname = "uint8_t", cprefix = "HDBO", cheader_filename = "tchdb.h")]
+               public enum OpenMode {
+                       READER,
+                       WRITER,
+                       CREAT,
+                       TRUNC,
+                       NOLCK,
+                       LCKNB,
+                       TSYNC
+               }
+
+               [CCode (cname = "tchdberrstr")]
+               public static unowned string get_error_message (TokyoCabinet.ErrorCode ecode);
+               public HDB ();
+               [CCode (cname = "tchdberrcode")]
+               public TokyoCabinet.ErrorCode get_error_code ();
+               [CCode (cname = "tchdbsetmutex")]
+               public bool set_mutex ();
+               [CCode (cname = "tchdbtune")]
+               public bool tune (int64 bnum, int8 apow, int8 fpow, TokyoCabinet.HDB.TuningOption opts);
+               [CCode (cname = "tchdbsetcache")]
+               public bool set_cache (int32 rcnum);
+               [CCode (cname = "tchdbsetxmsiz")]
+               public bool setxmsiz (int64 xmsiz);
+               [CCode (cname = "tchdbopen")]
+               public bool open (string path, TokyoCabinet.HDB.OpenMode omode);
+               [CCode (cname = "tchdbclose")]
+               public bool close ();
+               [CCode (cname = "tchdbput")]
+               public bool replace (uint8[] key, uint8[] value);
+               [CCode (cname = "tchdbput2")]
+               public bool replace_string (string key, string value);
+               [CCode (cname = "tchdbputkeep")]
+               public bool put (uint8[] key, uint8[] value);
+               [CCode (cname = "tchdbputkeep2")]
+               public bool put_string (string key, string value);
+               [CCode (cname = "tchdbputcat")]
+               public bool append (uint8[] key, uint8[] value);
+               [CCode (cname = "tchdbputcat2")]
+               public bool append_string (string key, string value);
+               [CCode (cname = "tchdbputasync")]
+               public bool replace_async (uint8[] key, uint8[] ksiz);
+               [CCode (cname = "tchdbputasync2")]
+               public bool replace_async_string (string key, string value);
+               [CCode (cname = "tchdbout")]
+               public bool remove (uint8[] key);
+               [CCode (cname = "tchdbout2")]
+               public bool remove_string (string key);
+               [CCode (cname = "tchdbget3")]
+               public int _get (uint8[] kbuf, uint8[] vbuf);
+               [CCode (cname = "_vala_tchdbget")]
+               public uint8[]? get (uint8[] key) {
+                       int vsiz = this.value_size (key);
+                       if ( vsiz < 0 )
+                               return null;
+
+                       var vbuf = new uint8[vsiz];
+                       this._get (key, vbuf);
+                       return vbuf;
+               }
+               [CCode (cname = "_vala_tchdbget2")]
+               public string? get_string (string key) {
+                       unowned uint8[] kbuf = (uint8[]) key;
+                       kbuf.length = (int) key.size ();
+                       return (string) this.get (kbuf);
+               }
+               [CCode (cname = "tchdbvsiz")]
+               public int value_size (uint8[] key);
+               [CCode (cname = "tchdbvsiz2")]
+               public int value_size_string (string key);
+               [CCode (cname = "tchdbfwmkeys")]
+               public TokyoCabinet.List forward_matching_keys (uint8[] pbuf, int max);
+               [CCode (cname = "tchdbfwmkeys2")]
+               public TokyoCabinet.List forward_matching_keys_string (string pstr, int max);
+               [CCode (cname = "tchdbaddint")]
+               public int add_int (uint8[] key, int num);
+               [CCode (cname = "tchdbadddouble")]
+               public double add_double (uint8[] key, double num);
+               [CCode (cname = "tchdbsync")]
+               public bool sync ();
+               [CCode (cname = "tchdboptimize")]
+               public bool optimize (int64 bnum, int8 apow, int8 fpow, TuningOption opts);
+               [CCode (cname = "tchdbvanish")]
+               public bool clear ();
+               [CCode (cname = "tchdbcopy")]
+               public bool copy (string path);
+               [CCode (cname = "tchdbpath")]
+               public unowned string path ();
+               [CCode (cname = "tchdbrnum")]
+               public uint64 get_length ();
+               [CCode (cname = "tchdbfsiz")]
+               public uint64 get_size ();
+
+               public uint64 length { get { return this.get_length (); } }
+               public uint64 size { get { return this.get_size (); } }
+       }
+
+       [Compact, CCode (cname = "TCBDB", cprefix = "tcbdb", free_function = "tcbdbdel", cheader_filename = "tcbdb.h")]
+       public class BDB {
+               [CCode (cname = "BDBCMP")]
+               public delegate int Compare (uint8[] a, uint8[] b);
+
+               [Compact, CCode (cname = "BDBCUR", cprefix = "tcbdbcur", free_function = "tcbdbcurdel", cheader_filename = "tcbdb.h")]
+               public class Cursor {
+                       [CCode (cname = "int", cprefix = "BDBCP")]
+                       public enum PutMode {
+                               CURRENT,
+                               BEFORE,
+                               AFTER
+                       }
+
+                       [CCode (cname = "tcbdbcurnew")]
+                       public Cursor (TokyoCabinet.BDB bdb);
+                       public bool first ();
+                       public bool last ();
+                       public bool jump (uint8[] key);
+                       [CCode (cname = "tcbdbcurjump2")]
+                       public bool jump_string (string key);
+                       [CCode (cname = "tcbdbcurprev")]
+                       public bool previous ();
+                       public bool next ();
+                       public bool put (uint8[] value, TokyoCabinet.BDB.Cursor.PutMode cpmode);
+                       [CCode (cname = "tcbdbput2")]
+                       public bool put_string (string value, TokyoCabinet.BDB.Cursor.PutMode cpmode);
+                       [CCode (cname = "tcbdbcurout")]
+                       public bool remove ();
+                       [CCode (cname = "tcbdbcurkey3")]
+                       public unowned uint8[]? key ();
+                       [CCode (cname = "_vala_tcbdbcurkey2")]
+                       public unowned string? key_string () {
+                               return (string) this.key ();
+                       }
+                       [CCode (cname = "tcbdbcurval3")]
+                       public unowned uint8[]? value ();
+                       [CCode (cname = "_vala_tcbdbcurval2")]
+                       public unowned string? value_string () {
+                               return (string) this.value ();
+                       }
+                       [CCode (cname = "tcbdbcurrec")]
+                       public bool record (TokyoCabinet.XString kxstr, TokyoCabinet.XString vxstr);
+               }
+
+               [Flags, CCode (cname = "int", cprefix = "BDBO", cheader_filename = "tcbdb.h")]
+               public enum OpenMode {
+                       READER,
+                       WRITER,
+                       CREAT,
+                       TRUNC,
+                       NOLCK,
+                       LCKNB
+               }
+
+               [Flags, CCode (cname = "uint8_t", cprefix = "BDBT", cheader_filename = "tcbdb.h")]
+               public enum TuningOption {
+                       LARGE,
+                       DEFLATE,
+                       BZIP,
+                       TCBS,
+                       EXCODEC
+               }
+
+               [CCode (cname = "tcbdberrmsg")]
+               public static unowned string get_error_message (TokyoCabinet.ErrorCode ecode);
+               public BDB ();
+               [CCode (cname = "tcbdbecode")]
+               public TokyoCabinet.ErrorCode get_error_code ();
+               [CCode (cname = "tcbdbsetmutex")]
+               public bool set_mutex ();
+               [CCode (cname = "tcbdbsetcmpfunc")]
+               public bool set_compare_func (TokyoCabinet.BDB.Compare cmp);
+               [CCode (cname = "tcbdbtune")]
+               public bool tune (int32 lmemb, int32 nmemb, int64 bnum, int8 apow, int8 fpow, TokyoCabinet.BDB.TuningOption opts);
+               [CCode (cname = "tcbdbsetxmsiz")]
+               public bool set_extra_mapped_size (int64 xmsiz);
+               [CCode (cname = "tcbdbopen")]
+               public bool open (string path, TokyoCabinet.BDB.OpenMode mode = TokyoCabinet.BDB.OpenMode.READER | TokyoCabinet.BDB.OpenMode.WRITER | TokyoCabinet.BDB.OpenMode.CREAT);
+               [CCode (cname = "tcbdbclose")]
+               public bool close ();
+               [CCode (cname = "tcbdbput")]
+               public bool replace (uint8[] key, uint8[] value);
+               [CCode (cname = "tcbdbput2")]
+               public bool replace_string (string key, string value);
+               [CCode (cname = "tcbdbputkeep")]
+               public bool put (uint8[] key, uint8[] value);
+               [CCode (cname = "tcbdbputkeep2")]
+               public bool put_string (string key, string value);
+               [CCode (cname = "tcbdbputcat")]
+               public bool append (uint8[] key, uint8[] value);
+               [CCode (cname = "tcbdbputcat2")]
+               public bool append_string (string key, string value);
+               [CCode (cname = "tcbdbputdup")]
+               public bool put_duplicate (uint8[] key, uint8[] value);
+               [CCode (cname = "tcbdbputdup2")]
+               public bool put_duplicate_string (string key, string value);
+               [CCode (cname = "tcbdbout")]
+               public bool remove (uint8[] key);
+               [CCode (cname = "tcbdbout2")]
+               public bool remove_string (string key);
+               [CCode (cname = "tcbdbget3")]
+               private unowned uint8[]? _get (uint8[] key);
+               [CCode (cname = "_vala_tcbdbget")]
+               public uint8[]? get (uint8[] key) {
+                       return this._get (key);
+               }
+               public string? get_string (string key) {
+                       unowned uint8[] k = (uint8[]) key;
+                       k.length = (int) key.size ();
+                       return (string) this._get (k);
+               }
+               [CCode (cname = "tcbdbget4")]
+               public TokyoCabinet.List get_list (uint8[] key);
+               [CCode (cname = "tcbdbvnum")]
+               public int value_count (uint8[] key);
+               [CCode (cname = "tcbdbvnum2")]
+               public int value_count_string (string key);
+               [CCode (cname = "tcbdbvsiz")]
+               public int value_size (uint8[] key);
+               [CCode (cname = "tcbdbvsiz2")]
+               public int value_size_string (string key);
+               [CCode (cname = "tcbdbrange")]
+               public TokyoCabinet.List range (uint8[] bkey, bool binc, uint8[] ekey, bool einc, int max);
+               [CCode (cname = "tcbdbrange2")]
+               public TokyoCabinet.List range_string (string bkey, bool binc, string ekey, bool einc, int max);
+               [CCode (cname = "tcbdbfwmkeys")]
+               public TokyoCabinet.List forward_matching_keys (uint8[] pbuf, int max);
+               [CCode (cname = "tcbdbfwmkeys2")]
+               public TokyoCabinet.List forward_matching_keys_string (string pstr, int max);
+               [CCode (cname = "tcbdbaddint")]
+               public int add_int (uint8[] key, int num);
+               [CCode (cname = "tcbdbadddouble")]
+               public double add_double (uint8[] key, double num);
+               [CCode (cname = "tcbdbsync")]
+               public bool sync ();
+               [CCode (cname = "tcbdboptimize")]
+               public bool optimize (int32 lmemb, int32 nmemb, int64 bnum, int8 apow, int8 fpow, TuningOption opts);
+               [CCode (cname = "tcbdbvanish")]
+               public bool clear ();
+               [CCode (cname = "tcbdbcopy")]
+               public bool copy (string path);
+               [CCode (cname = "tcbdbtranbegin")]
+               public bool transaction_begin ();
+               [CCode (cname = "tcbdbtrancommit")]
+               public bool transaction_commit ();
+               [CCode (cname = "tcbdbtranabort")]
+               public bool transaction_abort ();
+               [CCode (cname = "tcbdbpath")]
+               public unowned string path ();
+               [CCode (cname = "tcbdbrnum")]
+               public uint64 get_length ();
+               [CCode (cname = "tcbdbfsiz")]
+               public uint64 get_size ();
+               [CCode (cname = "tcbdbcurnew")]
+               public BDB.Cursor iterator ();
+
+               public uint64 length { get { return this.get_length (); } }
+               public uint64 size { get { return this.get_size (); } }
+       }
+
+       [Compact, CCode (cname = "TCFDB", cprefix = "tcfdb", free_function = "tcfdbdel", cheader_filename = "tcfdb.h")]
+       public class FDB {
+               [CCode (cname = "FDBIDMIN")]
+               public const int IDMIN;
+               [CCode (cname = "FDBIDMAX")]
+               public const int IDMAX;
+               [CCode (cname = "FDBIDPREV")]
+               public const int IDPREV;
+               [CCode (cname = "FDBIDNEXT")]
+               public const int IDNEXT;
+
+               [CCode (cname = "tcfdberrmsg")]
+               public unowned string get_error_message (TokyoCabinet.ErrorCode ecode);
+               [CCode (cname = "tcfdbnew")]
+               public FDB ();
+               [CCode (cname = "tcfdbecode")]
+               public TokyoCabinet.ErrorCode get_error_code ();
+               [CCode (cname = "tcfdbsetmutex")]
+               public bool set_mutex ();
+               [CCode (cname = "tcfdbtune")]
+               public bool tune (int32 width = 0, int64 limsiz = 0);
+               [CCode (cname = "tcfdbclose")]
+               public bool close ();
+               [CCode (cname = "tcfdbput")]
+               public bool replace (int64 id, uint8[] value);
+               [CCode (cname = "tcfdbputkeep")]
+               public bool put (int64 id, uint8[] value);
+               [CCode (cname = "tcfdbputcat")]
+               public bool append (int64 id, uint8[] value);
+               [CCode (cname = "tcfdbout")]
+               public bool remove (int64 id);
+               [CCode (cname = "tcfdbget4")]
+               public int _get (int64 id, uint8[] value);
+               [CCode (cname = "_vala_tcfdbget")]
+               public uint8[]? get (int64 id) {
+                       var vsiz = this.get_value_size (id);
+                       if ( vsiz < 0 )
+                               return null;
+
+                       var vbuf = new uint8[vsiz];
+                       this._get (id, vbuf);
+                       return vbuf;
+               }
+               [CCode (cname = "tcfdbvsiz")]
+               public int get_value_size (int64 id);
+               [CCode (cname = "tcfdbiterinit")]
+               public bool iterator_init ();
+               [CCode (cname = "tcfdbiternext")]
+               public uint64 iterator_next ();
+               [CCode (cname = "tcfdbaddint")]
+               public int add_int (int64 id, int num);
+               [CCode (cname = "tcfdbadddouble")]
+               public double add_double (int64 id, double num);
+               [CCode (cname = "tcfdbsync")]
+               public bool sync ();
+               [CCode (cname = "tcfdboptimize")]
+               public bool optimize (int32 width = 0, int64 limsiz = 0);
+               [CCode (cname = "tcfdbvanish")]
+               public bool clear ();
+               [CCode (cname = "tcfdbcopy")]
+               public bool copy (string path);
+               [CCode (cname = "tcfdbpath")]
+               public unowned string path ();
+               [CCode (cname = "tcfdbrnum")]
+               public uint64 get_length ();
+               [CCode (cname = "tcfdbfsiz")]
+               public uint64 get_size ();
+
+               public uint64 length { get { return this.get_length (); } }
+               public uint64 size { get { return this.get_size (); } }
+       }
+
+       [Compact, CCode (cname = "TCADB", cprefix = "tcadb", free_function = "tcadbdel", cheader_filename = "tcadb.h")]
+       public class ADB {
+               [CCode (cname = "tcadbnew")]
+               public ADB ();
+               [CCode (cname = "tcadbopen")]
+               public bool open (string name);
+               [CCode (cname = "tcadbclose")]
+               public bool close ();
+               [CCode (cname = "tcadbput")]
+               public bool replace (uint8[] key, uint8[] vsiz);
+               [CCode (cname = "tcadbput2")]
+               public bool replace_string (string key, string value);
+               [CCode (cname = "tcadbputkeep")]
+               public bool put (uint8[] key, uint8[] value);
+               [CCode (cname = "tcadbputkeep2")]
+               public bool put_string (string key, string value);
+               [CCode (cname = "tcadbputcat")]
+               public bool append (uint8[] key, uint8[] value);
+               [CCode (cname = "tcadbputcat2")]
+               public bool append_string (string key, string value);
+               [CCode (cname = "tcadbout")]
+               public bool remove (uint8[] key);
+               [CCode (cname = "tcadbout2")]
+               public bool remove_string (string key);
+               [CCode (cname = "tcadbget")]
+               public unowned uint8[]? _get (uint8[] key);
+               [CCode (cname = "_vala_tcadbget")]
+               public uint8[]? get (uint8[] key) {
+                       return TokyoCabinet.Memory.copy_and_free (this._get (key));
+               }
+               [CCode (cname = "tcadbget2")]
+               public unowned string? _get_string (string key);
+               public string? get_string (string key) {
+                       return TokyoCabinet.Memory.copy_and_free_string (this._get_string (key));
+               }
+               [CCode (cname = "tcadbvsiz")]
+               public int value_size (uint8[] key);
+               [CCode (cname = "tcadbvsiz2")]
+               public int value_size_string (string key);
+               [CCode (cname = "tcadbiterinit")]
+               public bool iterator_init ();
+
+               [CCode (cname = "tcadbiternext")]
+               public unowned uint8[]? _iterator_next ();
+               [CCode (cname = "_vala_tcadbiternext")]
+               public uint8[]? iterator_next () {
+                       return TokyoCabinet.Memory.copy_and_free (this._iterator_next ());
+               }
+               [CCode (cname = "tcadbiternext2")]
+               public unowned string? _iterator_next_string ();
+               [CCode (cname = "_vala_tcadbiternext")]
+               public string? iterator_next_string () {
+                       return TokyoCabinet.Memory.copy_and_free_string (this._iterator_next_string ());
+               }
+
+               [CCode (cname = "tcadbfwmkeys")]
+               public TokyoCabinet.List forward_matching_keys (uint8[] pbuf, int max);
+               [CCode (cname = "tcadbfwmkeys2")]
+               public TokyoCabinet.List forward_matching_keys_string (string pstr, int max);
+               [CCode (cname = "tcadbaddint")]
+               public int add_int (uint8[] key, int num);
+               [CCode (cname = "tcadbadddouble")]
+               public double add_double (uint8[] key, double num);
+               [CCode (cname = "tcadbsync")]
+               public bool sync ();
+               [CCode (cname = "tcadbvanish")]
+               public bool clear ();
+               [CCode (cname = "tcadbcopy")]
+               public bool copy (string path);
+               [CCode (cname = "tcadbrnum")]
+               public uint64 get_length ();
+               [CCode (cname = "tcadbsize")]
+               public uint64 get_size ();
+
+               public uint64 length { get { return this.get_length (); } }
+               public uint64 size { get { return this.get_size (); } }
+       }
+}