1# Author: Robert J. Hijmans
2# Date :  September 2018
3# Version 1.0
4# License GPL v3
5
6#to do
7#"gamma", "lgamma", "digamma", "trigamma")
8
9setMethod("log", signature(x="SpatRaster"),
10    function(x, base=exp(1)){
11		opt <- spatOptions()
12		if (base == exp(1)) {
13			x@ptr <- x@ptr$math("log", opt)
14		} else if (base == 2) {
15			x@ptr <- x@ptr$math("log2", opt)
16		} else if (base == 10) {
17			x@ptr <- x@ptr$math("log10", opt)
18		} else {
19			x <- app(x, function(i) log(i, base))
20		}
21		x
22	}
23)
24
25
26setMethod("Math", signature(x="SpatRaster"),
27    function(x){
28		oper <- as.vector(.Generic)[1]
29		opt <- spatOptions()
30		if (substr(oper, 1, 3) == "cum") {
31			x@ptr <- x@ptr$cum(substr(oper, 4, 10), FALSE, "", FALSE)
32		} else if (oper %in% c("acos", "acosh", "asin", "asinh", "atan", "atanh", "cos", "cosh", "cospi", "sin", "sinh", "sinpi", "tan", "tanh", "tanpi")) {
33			x@ptr <- x@ptr$trig(oper, opt)
34		} else {
35			x@ptr <- x@ptr$math(oper, opt)
36		}
37		messages(x, oper)
38	}
39)
40
41
42setMethod("Math2", signature(x="SpatRaster"),
43    function(x, digits=0){
44		opt <- spatOptions()
45		oper <- as.vector(.Generic)[1]
46		x@ptr <- x@ptr$math2(oper, digits, opt)
47		messages(x, oper)
48	}
49)
50
51
52setMethod("Math", signature(x="SpatExtent"),
53    function(x){
54		oper <- as.vector(.Generic)[1]
55		if (oper == "floor") {
56			x@ptr <- x@ptr$floor()
57		} else if (oper == "ceiling") {
58			x@ptr <- x@ptr$ceil()
59		} else {
60			error(oper, "not implemented for SpatExtent")
61		}
62		if (!x@ptr$valid) {
63			error(oper, "invalid extent")
64		}
65		return(x)
66	}
67)
68
69setMethod("Math2", signature(x="SpatExtent"),
70    function(x, digits=0){
71		oper <- as.vector(.Generic)[1]
72		if (oper == "round") {
73			x@ptr <- x@ptr$round(digits)
74			if (!x@ptr$valid) {
75				error(oper, "invalid extent")
76			}
77			return(x)
78		} else {
79			error(oper, "not implemented for SpatExtent")
80		}
81	}
82)
83
84
85