Paste: dir-tbl (treat a directory as an assoc)
Author: | dharmatech |
Mode: | factor |
Date: | Mon, 6 Oct 2008 01:46:23 |
Plain Text |
USING: kernel arrays sequences accessors assocs
prettyprint io.files io.encodings.utf8
eval locals ;
IN: dir-tbl
TUPLE: dir-tbl path ;
:: dir-tbl-at*
KEY TBL path>> directory keys member?
[
TBL path>> KEY append-path
utf8 file-contents
t
]
[ f f ]
if ;
: dir-tbl-size path>> directory length ;
:: dir-tbl>alist
TBL path>> directory keys
[| KEY | KEY KEY TBL dir-tbl-at* drop 2array ]
map ;
:: dir-tbl-set-at
VAL
TBL path>> KEY append-path
utf8
set-file-contents ;
:: dir-tbl-delete-at TBL path>> KEY append-path delete-file ;
: dir-tbl-clear-assoc path>> directory* keys [ delete-file ] each ;
INSTANCE: dir-tbl assoc
M: dir-tbl at* dir-tbl-at* ;
M: dir-tbl assoc-size dir-tbl-size ;
M: dir-tbl >alist dir-tbl>alist ;
M: dir-tbl set-at dir-tbl-set-at ;
M: dir-tbl delete-at dir-tbl-delete-at ;
M: dir-tbl clear-assoc dir-tbl-clear-assoc ;
New Annotation