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