(require 'stdlib) (require 'rep.io.db.sdbm) ;; (sdbm-open file flags mode) ;; flags = append | write, default = readonly ;; mode = filemode ;; (sdbm-close dbm) ;; (sdbm-fetch dbm key) ;; (sdbm-store dbm key val flags) ;; flags = insert | replace, default = replace ;; (sdbm-delete dbm key) ;; (sdbm-firstkey dbm), (sdbm-nextkey dbm) ;; iterate over all keys, nil = EOF ;; (sdbm-rdonly dbm), (sdbm-error dbm), (sdbmp dbm) ;; predicates (define dbfile "db-sdbm") (defmacro sdbm-each-key (db form) `(let ((key (sdbm-firstkey ,db))) (while key (funcall ,form key) (setq key (sdbm-nextkey ,db))))) (let ((db (sdbm-open dbfile 'write))) ;; insert 1000 values (do ((i 0 (1+ i))) ((= i 100)) (sdbm-store db (number->string i) "value")) ;; iterate over all of them (let ((key (sdbm-firstkey db))) (while key (printf "%s -> %s\n" key (sdbm-fetch db key)) (setq key (sdbm-nextkey db)))) (sdbm-close db))