2 representation(queue = "filehashDB1",
6 setMethod("show", "queue",
8 cat(gettextf("<queue: %s>\n", object@name))
12 createQ <- function(filename) {
13 dbCreate(filename, "DB1")
14 queue <- dbInit(filename, "DB1")
15 dbInsert(queue, "head", NULL)
16 dbInsert(queue, "tail", NULL)
18 new("queue", queue = queue, name = filename)
21 initQ <- function(filename) {
23 queue = dbInit(filename, "DB1"),
27 setGeneric("lockFile", function(db, ...) standardGeneric("lockFile"))
30 setGeneric("pop", function(db, ...) standardGeneric("pop"))
31 setGeneric("push", function(db, val, ...) standardGeneric("push"))
32 setGeneric("isEmpty", function(db, ...) standardGeneric("isEmpty"))
33 setGeneric("top", function(db, ...) standardGeneric("top"))
36 ################################################################################
39 setMethod("lockFile", "queue",
41 paste(db@name, "qlock", sep = ".")
44 setMethod("push", c("queue", "ANY"), function(db, val, ...) {
45 ## Create a new tail node
46 node <- list(value = val,
50 createLockFile(lockFile(db))
51 on.exit(deleteLockFile(lockFile(db)))
54 dbInsert(db@queue, "head", key)
56 ## Convert tail node to regular node
57 tailkey <- dbFetch(db@queue, "tail")
58 oldtail <- dbFetch(db@queue, tailkey)
59 dbInsert(db@queue, tl,
60 list(value = oldtail$value, nextkey = key))
62 ## Insert new node and point tail to new node
63 dbInsert(db@queue, key, node)
64 dbInsert(db@queue, "tail", key)
67 setMethod("isEmpty", "queue", function(db) {
68 is.null(dbFetch(db@queue, "head"))
71 setMethod("top", "queue", function(db, ...) {
72 createLockFile(lockFile(db))
73 on.exit(deleteLockFile(lockFile(db)))
76 stop("queue is empty")
77 h <- dbFetch(db@queue, "head")
78 node <- dbFetch(db@queue, h)
82 setMethod("pop", "queue", function(db, ...) {
83 createLockFile(lockFile(db))
84 on.exit(deleteLockFile(lockFile(db)))
87 stop("queue is empty")
88 h <- dbFetch(db@queue, "head")
89 node <- dbFetch(db@queue, h)
90 dbInsert(db@queue, "head", node$nextkey)