From 0b68f70cccd7de212173c6288344ba71049f43e1 Mon Sep 17 00:00:00 2001 From: Bruno Deferrari Date: Wed, 17 Jun 2009 12:13:59 -0300 Subject: [PATCH] tokyo.cabinet.abstract: Optimization, deserialize objects directly from memory, without the intermediate bytes-array --- extra/tokyo/cabinet/abstract/abstract.factor | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/extra/tokyo/cabinet/abstract/abstract.factor b/extra/tokyo/cabinet/abstract/abstract.factor index a6ce2408d9..245267f488 100644 --- a/extra/tokyo/cabinet/abstract/abstract.factor +++ b/extra/tokyo/cabinet/abstract/abstract.factor @@ -1,11 +1,20 @@ ! Copyright (C) 2009 Bruno Deferrari ! See http://factorcode.org/license.txt for BSD license. -USING: accessors alien.c-types arrays assocs destructors kernel libc locals +USING: accessors alien.c-types arrays assocs destructors +io io.streams.memory kernel libc locals sequences serialize tokyo.alien.tcadb tokyo.alien.tcutil vectors ; IN: tokyo.cabinet.abstract TUPLE: tokyo-abstractdb handle disposed ; + ] dip with-input-stream* ; inline + +: memory>object ( memory -- object ) + [ deserialize ] with-memory-reader ; +PRIVATE> + INSTANCE: tokyo-abstractdb assoc : ( name -- tokyo-abstractdb ) @@ -21,7 +30,7 @@ M:: tokyo-abstractdb at* ( key db -- value/f ? ) kbytes length :> key-size handle kbytes key-size sizeout tcadbget :> output output [ - [ sizeout *int memory>byte-array ] [ tcfree ] bi bytes>object t + [ memory>object ] [ tcfree ] bi t ] [ f f ] if* ; M: tokyo-abstractdb assoc-size ( db -- size ) handle>> tcadbrnum ; @@ -33,8 +42,8 @@ M:: tokyo-abstractdb >alist ( db -- alist ) db assoc-size :> keys handle tcadbiterinit drop [ handle size-out tcadbiternext dup ] [ - [ size-out *int memory>byte-array ] [ tcfree ] bi - bytes>object keys push + [ memory>object ] [ tcfree ] bi + keys push ] while drop keys [ dup db at 2array ] { } map-as ; -- 2.34.1