1# Author: Robert J. Hijmans
2# Date : October 2018
3# Version 1.0
4# License GPL v3
5
6error <- function(f, emsg="", ...) {
7	stop("[", f, "] ", emsg, ..., call.=FALSE)
8}
9
10warn <- function(f, wmsg="", ...) {
11	warning("[", f, "] ", wmsg, ..., call.=FALSE)
12}
13
14messages <- function(x, f="") {
15	if (methods::.hasSlot(x, "ptr")) {
16		if (x@ptr$has_warning()) {
17			warn(f, paste(x@ptr$getWarnings(), collapse="\n"))
18		}
19		if (x@ptr$has_error()) {
20			error(f, x@ptr$getError())
21		}
22		return(x)
23	} else {
24		if (x$has_warning()) {
25			warn(f, paste(x$getWarnings(), collapse="\n"))
26		}
27		if (x$has_error()) {
28			error(f, x$getError())
29		}
30		return(x)
31	}
32}
33
34
35mem_info <- function(x, n=1) {
36	n <- max(0,n)
37	opt <- spatOptions()
38	opt$ncopies = n;
39	v <- x@ptr$mem_needs(opt)
40	#if (print) {
41		gb <- 1024^3 / 8  #
42		cat("\n------------------------")
43		cat("\nMemory (GB) ")
44		cat("\n------------------------")
45		cat(paste("\navailable       :",  round(v[2] / gb, 2)))
46		cat(paste0("\nallowed (", round(100* v[3]) , "%)   : ", round(v[3] * v[2] / gb, 2)))
47
48		cat(paste0("\nneeded (n=", n, ")   ", ifelse(n<10, " : ", ": "), round(v[1] / gb, 2)))
49		cat("\n------------------------")
50		cat(paste("\nproc in memory  :", round(v[5]) != 0))
51		cat(paste("\nnr chunks       :", ceiling(nrow(x)/v[4])))
52		cat("\n------------------------\n")
53	#}
54	names(v) <- c("needed", "available", "memfrac", "chunksize")
55}
56
57
58free_RAM <- function() {
59	opt <- spatOptions()
60	x <- rast()
61	v <- x@ptr$mem_needs(opt)
62	v[2] / 128
63}
64
65
66
67