From: Bruno Deferrari Date: Wed, 17 Jun 2009 23:24:04 +0000 (-0300) Subject: tokyo.remotedb: Remote database using Tokyo Tyrant X-Git-Tag: 0.97~6105^2^2~3 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=9d515140fed3b74e18c16cc606b5435f717e9b46 tokyo.remotedb: Remote database using Tokyo Tyrant --- 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.