From: Evan Nemerson Date: Wed, 4 Aug 2010 19:30:07 +0000 (-0700) Subject: tokyocabinet: Add Tokyo Cabinet bindings. X-Git-Tag: 0.9.5~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ffef0eb1c476b08ce5618ecfbe73401a093ee349;p=thirdparty%2Fvala.git tokyocabinet: Add Tokyo Cabinet bindings. --- diff --git a/vapi/Makefile.am b/vapi/Makefile.am index d3e7d8d9e..83db45d8c 100644 --- a/vapi/Makefile.am +++ b/vapi/Makefile.am @@ -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 index 000000000..eb8514662 --- /dev/null +++ b/vapi/tokyocabinet.vapi @@ -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 + */ + +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 (); } } + } +}