2 representation(queue = "filehashDB1",
6 createQ <- function(filename) {
7 dbCreate(filename, "DB1")
8 queue <- dbInit(filename, "DB1")
9 dbInsert(queue, "head", NULL)
10 dbInsert(queue, "tail", NULL)
12 new("queue", queue = queue, name = filename)
15 initQ <- function(filename) {
17 queue = dbInit(filename, "DB1"),
21 setGeneric("lockFile", function(db, ...) standardGeneric("lockFile"))
24 setGeneric("pop", function(db, ...) standardGeneric("pop"))
25 setGeneric("push", function(db, val, ...) standardGeneric("push"))
26 setGeneric("isEmpty", function(db, ...) standardGeneric("isEmpty"))
27 setGeneric("top", function(db, ...) standardGeneric("top"))
30 ################################################################################
33 setMethod("lockFile", "queue",
35 paste(db@name, "qlock", sep = ".")
38 setMethod("push", c("queue", "ANY"), function(db, val, ...) {
39 ## Create a new tail node
40 node <- list(value = val,
44 if(!createLockFile(lockFile(db)))
45 stop("cannot create lock file")
46 on.exit(deleteLockFile(lockFile(db)))
49 dbInsert(db@queue, "head", key)
51 ## Convert tail node to regular node
52 tailkey <- dbFetch(db@queue, "tail")
53 oldtail <- dbFetch(db@queue, tailkey)
54 dbInsert(db@queue, tl,
55 list(value = oldtail$value, nextkey = key))
57 ## Insert new node and point tail to new node
58 dbInsert(db@queue, key, node)
59 dbInsert(db@queue, "tail", key)
62 setMethod("isEmpty", "queue", function(db) {
63 is.null(dbFetch(db@queue, "head"))
66 setMethod("top", "queue", function(db, ...) {
67 if(!createLockFile(lockFile(db)))
68 stop("cannot create lock file")
70 h <- dbFetch(db@queue, "head")
74 node <- dbFetch(db@queue, h)
76 deleteLockFile(lockFile(db))
81 setMethod("pop", "queue", function(db, ...) {
82 if(!createLockFile(lockFile(db)))
83 stop("cannot create lock file")
85 h <- dbFetch(db@queue, "head")
89 node <- dbFetch(db@queue, h)
90 dbInsert(db@queue, "head", node$nextkey)
92 deleteLockFile(lockFile(db))