From 9d515140fed3b74e18c16cc606b5435f717e9b46 Mon Sep 17 00:00:00 2001 From: Bruno Deferrari Date: Wed, 17 Jun 2009 20:24:04 -0300 Subject: [PATCH] tokyo.remotedb: Remote database using Tokyo Tyrant --- extra/tokyo/remotedb/authors.txt | 1 + extra/tokyo/remotedb/remotedb.factor | 60 ++++++++++++++++++++++++++++ extra/tokyo/remotedb/summary.txt | 1 + 3 files changed, 62 insertions(+) create mode 100644 extra/tokyo/remotedb/authors.txt create mode 100644 extra/tokyo/remotedb/remotedb.factor create mode 100644 extra/tokyo/remotedb/summary.txt diff --git a/extra/tokyo/remotedb/authors.txt b/extra/tokyo/remotedb/authors.txt new file mode 100644 index 0000000000..f4a8cb1dc2 --- /dev/null +++ b/extra/tokyo/remotedb/authors.txt @@ -0,0 +1 @@ +Bruno Deferrari diff --git a/extra/tokyo/remotedb/remotedb.factor b/extra/tokyo/remotedb/remotedb.factor new file mode 100644 index 0000000000..2ccf41a901 --- /dev/null +++ b/extra/tokyo/remotedb/remotedb.factor @@ -0,0 +1,60 @@ +! Copyright (C) 2009 Bruno Deferrari +! See http://factorcode.org/license.txt for BSD license. +USING: accessors alien.c-types arrays assocs destructors +kernel locals sequences serialize vectors +tokyo.alien.tcrdb tokyo.alien.tcutil tokyo.utils ; +IN: tokyo.remotedb + +TUPLE: tokyo-remotedb handle disposed ; + +INSTANCE: tokyo-remotedb assoc + +: ( host port -- tokyo-remotedb ) + [ tcrdbnew dup ] 2dip tcrdbopen drop + tokyo-remotedb new [ (>>handle) ] keep ; + +M: tokyo-remotedb dispose* [ tcrdbdel f ] change-handle drop ; + +M:: tokyo-remotedb at* ( key db -- value/f ? ) + 0 :> sizeout + db handle>> :> handle + key object>bytes :> kbytes + kbytes length :> key-size + handle kbytes key-size sizeout tcrdbget :> output + output [ + [ memory>object ] [ tcfree ] bi t + ] [ f f ] if* ; + +M: tokyo-remotedb assoc-size ( db -- size ) handle>> tcrdbrnum ; + +! FIXME: make this nicer +M:: tokyo-remotedb >alist ( db -- alist ) + db handle>> :> handle + 0 :> size-out + db assoc-size :> keys + handle tcrdbiterinit drop + [ handle size-out tcrdbiternext dup ] [ + [ memory>object ] [ tcfree ] bi + keys push + ] while drop + keys [ dup db at 2array ] { } map-as ; + +M:: tokyo-remotedb set-at ( value key db -- ) + db handle>> :> handle + key object>bytes :> kbytes + kbytes length :> key-size + value object>bytes :> vbytes + vbytes length :> value-size + handle kbytes key-size vbytes value-size tcrdbput drop ; + +M:: tokyo-remotedb delete-at ( key db -- ) + db handle>> :> handle + key object>bytes :> kbytes + kbytes length :> key-size + handle kbytes key-size tcrdbout drop ; + +M: tokyo-remotedb clear-assoc ( db -- ) handle>> tcrdbvanish drop ; + +M: tokyo-remotedb equal? assoc= ; + +M: tokyo-remotedb hashcode* assoc-hashcode ; diff --git a/extra/tokyo/remotedb/summary.txt b/extra/tokyo/remotedb/summary.txt new file mode 100644 index 0000000000..ef5b9af089 --- /dev/null +++ b/extra/tokyo/remotedb/summary.txt @@ -0,0 +1 @@ +Higher level API for Tokyo Tyrant's Remote database API. Implements the associative protocol. -- 2.34.1