1 2setMethod("length", signature(x="SpatVectorCollection"), 3 function(x) { 4 x@ptr$size() 5 } 6) 7 8setMethod("svc", signature(x="missing"), 9 function(x) { 10 v <- methods::new("SpatVectorCollection") 11 v@ptr <- SpatVectorCollection$new() 12 v 13 } 14) 15 16 17setMethod("svc", signature(x="SpatVector"), 18 function(x, ...) { 19 r <- methods::new("SpatVectorCollection") 20 r@ptr <- SpatVectorCollection$new() 21 r@ptr$push_back(x@ptr) 22 dots <- list(...) 23 if (length(dots) > 0) { 24 for (i in 1:length(dots)) { 25 if (inherits(dots[[i]], "SpatVector")) { 26 r@ptr$push_back(dots[[i]]@ptr) 27 } else { 28 warn("svc", "cannot add objects of class: ", class(dots[[i]])) 29 } 30 } 31 } 32 messages(r, "svc") 33 } 34) 35 36setMethod("svc", signature(x="list"), 37 function(x) { 38 r <- methods::new("SpatVectorCollection") 39 r@ptr <- SpatVectorCollection$new() 40 for (i in seq_along(x)) { 41 if (inherits(x[[i]], "SpatVector")) { 42 r@ptr$push_back(x[[i]]@ptr) 43 } 44 } 45 messages(r, "svc") 46 } 47) 48 49 50setReplaceMethod("[", c("SpatVectorCollection", "numeric", "missing"), 51 function(x, i, j, value) { 52 stopifnot(inherits(value, "SpatVector")) 53 if (any(!is.finite(i)) || any(i<1)) { 54 error("`[<-`", "invalid index") 55 } 56 i <- sort(i) 57 for (j in i) { 58 if (j == (length(x)+1)) { 59 x@ptr$push_back(value@ptr) 60 } else { 61 x@ptr$replace(value@ptr, j-1) 62 } 63 } 64 messages(x, "`[<-`") 65 } 66) 67 68 69setMethod("[", c("SpatVectorCollection", "numeric", "missing"), 70function(x, i, j, ... ,drop=TRUE) { 71 if (i<0) {i <- (1:length(x))[i]} 72 if (drop && (length(i) == 1)) { 73 ptr <- x@ptr$get(i-1) 74 x <- methods::new("SpatVector") 75 x@ptr <- ptr 76 } else { 77 x@ptr <- x@ptr$subset(i-1) 78 } 79 messages(x, "`[`") 80}) 81 82setMethod("[[", c("SpatVectorCollection", "numeric", "missing"), 83function(x, i, j, ... ,drop=TRUE) { 84 x[i,drop=drop] 85}) 86 87 88setMethod("c", signature(x="SpatVector"), 89 function(x, ...) { 90 svc(x, ...) 91 } 92) 93 94setMethod("c", signature(x="SpatVectorCollection"), 95 function(x, ...) { 96 97 x@ptr <- x@ptr$subset(0:(x@ptr$size()-1) ) ## deep copy 98 dots <- list(...) 99 for (i in seq_along(dots)) { 100 if (inherits(dots[[i]], "SpatVectorCollection")) { 101 for (j in 1:length(dots[[i]])) { 102 x@ptr$push_back(dots[[i]][[j]]@ptr) 103 } 104 } else if (inherits(dots[[i]], "SpatVector")) { 105 x@ptr$push_back(dots[[i]]@ptr) 106 } else { 107 error("c", "arguments must be SpatVector or SpatVectorCollection") 108 } 109 } 110 messages(x, "c") 111 } 112) 113