! Copyright (C) 2009 Bruno Deferrari ! See http://factorcode.org/license.txt for BSD license. USING: accessors alien.c-types alien.data arrays assocs destructors functors kernel sequences serialize tokyo.alien.tcutil tokyo.utils vectors ; IN: tokyo.assoc-functor > swap object>bytes dup length 0 int DBGET [ [ memory>object ] [ tcfree ] bi t ] [ f f ] if* ; M: TYPE assoc-size handle>> DBRNUM ; : DBKEYS ( db -- keys ) [ assoc-size ] [ handle>> ] bi dup DBITERINIT drop 0 int [ 2dup DBITERNEXT ] [ [ memory>object ] [ tcfree ] bi reach push ] while* 2drop ; M: TYPE >alist [ DBKEYS dup ] keep '[ dup _ at 2array ] map! drop ; M: TYPE set-at handle>> swap rot [ object>bytes dup length ] bi@ DBPUT drop ; M: TYPE delete-at handle>> swap object>bytes dup length DBOUT drop ; M: TYPE clear-assoc handle>> DBVANISH drop ; M: TYPE equal? assoc= ; M: TYPE hashcode* assoc-hashcode ; ;FUNCTOR>