Skip to content

Commit

Permalink
Use doubles instead of integers for obj_size()
Browse files Browse the repository at this point in the history
Fixes #45
  • Loading branch information
hadley committed Dec 4, 2020
1 parent 908d817 commit 0a47c93
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 18 deletions.
2 changes: 2 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# lobstr (development version)

* `obj_sizes()` no longer returns NA for objects larger than 2^31 bytes (#45)

# lobstr 1.1.1

* Fix PROTECT error.
Expand Down
13 changes: 6 additions & 7 deletions R/cpp11.R
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
# Generated by cpp11: do not edit by hand

obj_addr_ <- function(name, env) {
.Call("_lobstr_obj_addr_", name, env)
.Call("_lobstr_obj_addr_", name, env, PACKAGE = "lobstr")
}

obj_addrs_ <- function(x) {
.Call("_lobstr_obj_addrs_", x)
.Call("_lobstr_obj_addrs_", x, PACKAGE = "lobstr")
}

obj_inspect_ <- function(x, max_depth, expand_char, expand_altrep, expand_env, expand_call, expand_bytecode) {
.Call("_lobstr_obj_inspect_", x, max_depth, expand_char, expand_altrep, expand_env, expand_call, expand_bytecode)
.Call("_lobstr_obj_inspect_", x, max_depth, expand_char, expand_altrep, expand_env, expand_call, expand_bytecode, PACKAGE = "lobstr")
}

v_size <- function(n, element_size) {
.Call("_lobstr_v_size", n, element_size)
.Call("_lobstr_v_size", n, element_size, PACKAGE = "lobstr")
}

obj_size_ <- function(objects, base_env, sizeof_node, sizeof_vector) {
.Call("_lobstr_obj_size_", objects, base_env, sizeof_node, sizeof_vector)
.Call("_lobstr_obj_size_", objects, base_env, sizeof_node, sizeof_vector, PACKAGE = "lobstr")
}

obj_csize_ <- function(objects, base_env, sizeof_node, sizeof_vector) {
.Call("_lobstr_obj_csize_", objects, base_env, sizeof_node, sizeof_vector)
.Call("_lobstr_obj_csize_", objects, base_env, sizeof_node, sizeof_vector, PACKAGE = "lobstr")
}

16 changes: 8 additions & 8 deletions src/cpp11.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// Generated by cpp11: do not edit by hand
// clang-format off


#include "cpp11/declarations.hpp"
Expand All @@ -7,42 +8,42 @@
std::string obj_addr_(SEXP name, cpp11::environment env);
extern "C" SEXP _lobstr_obj_addr_(SEXP name, SEXP env) {
BEGIN_CPP11
return cpp11::as_sexp(obj_addr_(cpp11::unmove(cpp11::as_cpp<SEXP>(name)), cpp11::unmove(cpp11::as_cpp<cpp11::environment>(env))));
return cpp11::as_sexp(obj_addr_(cpp11::as_cpp<cpp11::decay_t<SEXP>>(name), cpp11::as_cpp<cpp11::decay_t<cpp11::environment>>(env)));
END_CPP11
}
// address.cpp
std::vector<std::string> obj_addrs_(SEXP x);
extern "C" SEXP _lobstr_obj_addrs_(SEXP x) {
BEGIN_CPP11
return cpp11::as_sexp(obj_addrs_(cpp11::unmove(cpp11::as_cpp<SEXP>(x))));
return cpp11::as_sexp(obj_addrs_(cpp11::as_cpp<cpp11::decay_t<SEXP>>(x)));
END_CPP11
}
// inspect.cpp
cpp11::list obj_inspect_(SEXP x, double max_depth, bool expand_char, bool expand_altrep, bool expand_env, bool expand_call, bool expand_bytecode);
extern "C" SEXP _lobstr_obj_inspect_(SEXP x, SEXP max_depth, SEXP expand_char, SEXP expand_altrep, SEXP expand_env, SEXP expand_call, SEXP expand_bytecode) {
BEGIN_CPP11
return cpp11::as_sexp(obj_inspect_(cpp11::unmove(cpp11::as_cpp<SEXP>(x)), cpp11::unmove(cpp11::as_cpp<double>(max_depth)), cpp11::unmove(cpp11::as_cpp<bool>(expand_char)), cpp11::unmove(cpp11::as_cpp<bool>(expand_altrep)), cpp11::unmove(cpp11::as_cpp<bool>(expand_env)), cpp11::unmove(cpp11::as_cpp<bool>(expand_call)), cpp11::unmove(cpp11::as_cpp<bool>(expand_bytecode))));
return cpp11::as_sexp(obj_inspect_(cpp11::as_cpp<cpp11::decay_t<SEXP>>(x), cpp11::as_cpp<cpp11::decay_t<double>>(max_depth), cpp11::as_cpp<cpp11::decay_t<bool>>(expand_char), cpp11::as_cpp<cpp11::decay_t<bool>>(expand_altrep), cpp11::as_cpp<cpp11::decay_t<bool>>(expand_env), cpp11::as_cpp<cpp11::decay_t<bool>>(expand_call), cpp11::as_cpp<cpp11::decay_t<bool>>(expand_bytecode)));
END_CPP11
}
// size.cpp
double v_size(double n, int element_size);
extern "C" SEXP _lobstr_v_size(SEXP n, SEXP element_size) {
BEGIN_CPP11
return cpp11::as_sexp(v_size(cpp11::unmove(cpp11::as_cpp<double>(n)), cpp11::unmove(cpp11::as_cpp<int>(element_size))));
return cpp11::as_sexp(v_size(cpp11::as_cpp<cpp11::decay_t<double>>(n), cpp11::as_cpp<cpp11::decay_t<int>>(element_size)));
END_CPP11
}
// size.cpp
double obj_size_(cpp11::list objects, cpp11::environment base_env, int sizeof_node, int sizeof_vector);
extern "C" SEXP _lobstr_obj_size_(SEXP objects, SEXP base_env, SEXP sizeof_node, SEXP sizeof_vector) {
BEGIN_CPP11
return cpp11::as_sexp(obj_size_(cpp11::unmove(cpp11::as_cpp<cpp11::list>(objects)), cpp11::unmove(cpp11::as_cpp<cpp11::environment>(base_env)), cpp11::unmove(cpp11::as_cpp<int>(sizeof_node)), cpp11::unmove(cpp11::as_cpp<int>(sizeof_vector))));
return cpp11::as_sexp(obj_size_(cpp11::as_cpp<cpp11::decay_t<cpp11::list>>(objects), cpp11::as_cpp<cpp11::decay_t<cpp11::environment>>(base_env), cpp11::as_cpp<cpp11::decay_t<int>>(sizeof_node), cpp11::as_cpp<cpp11::decay_t<int>>(sizeof_vector)));
END_CPP11
}
// size.cpp
cpp11::integers obj_csize_(cpp11::list objects, cpp11::environment base_env, int sizeof_node, int sizeof_vector);
cpp11::doubles obj_csize_(cpp11::list objects, cpp11::environment base_env, int sizeof_node, int sizeof_vector);
extern "C" SEXP _lobstr_obj_csize_(SEXP objects, SEXP base_env, SEXP sizeof_node, SEXP sizeof_vector) {
BEGIN_CPP11
return cpp11::as_sexp(obj_csize_(cpp11::unmove(cpp11::as_cpp<cpp11::list>(objects)), cpp11::unmove(cpp11::as_cpp<cpp11::environment>(base_env)), cpp11::unmove(cpp11::as_cpp<int>(sizeof_node)), cpp11::unmove(cpp11::as_cpp<int>(sizeof_vector))));
return cpp11::as_sexp(obj_csize_(cpp11::as_cpp<cpp11::decay_t<cpp11::list>>(objects), cpp11::as_cpp<cpp11::decay_t<cpp11::environment>>(base_env), cpp11::as_cpp<cpp11::decay_t<int>>(sizeof_node), cpp11::as_cpp<cpp11::decay_t<int>>(sizeof_vector)));
END_CPP11
}

Expand Down Expand Up @@ -70,4 +71,3 @@ extern "C" void R_init_lobstr(DllInfo* dll){
R_registerRoutines(dll, NULL, CallEntries, NULL, NULL);
R_useDynamicSymbols(dll, FALSE);
}

6 changes: 3 additions & 3 deletions src/size.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include <cpp11/environment.hpp>
#include <cpp11/integers.hpp>
#include <cpp11/doubles.hpp>
#include <cpp11/list.hpp>
#include <Rversion.h>
#include <set>
Expand Down Expand Up @@ -211,11 +211,11 @@ double obj_size_(cpp11::list objects, cpp11::environment base_env, int sizeof_no
}

[[cpp11::register]]
cpp11::integers obj_csize_(cpp11::list objects, cpp11::environment base_env, int sizeof_node, int sizeof_vector) {
cpp11::doubles obj_csize_(cpp11::list objects, cpp11::environment base_env, int sizeof_node, int sizeof_vector) {
std::set<SEXP> seen;
int n = objects.size();

cpp11::writable::integers out(n);
cpp11::writable::doubles out(n);
for (int i = 0; i < n; ++i) {
out[i] = out[i] + obj_size_tree(objects[i], base_env, sizeof_node, sizeof_vector, seen, 0);
}
Expand Down

0 comments on commit 0a47c93

Please sign in to comment.