-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathr_package.cpp
62 lines (51 loc) · 1.97 KB
/
r_package.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "Application.hpp"
#include "Package.hpp"
#include "Function.hpp"
#include "r_package.h"
using instrumentr::Function;
using instrumentr::FunctionSPtr;
using instrumentr::Package;
using instrumentr::PackageSPtr;
using instrumentr::from_sexp;
using instrumentr::to_sexp;
SEXP r_package_create_package(SEXP r_package_name,
SEXP r_package_directory,
SEXP r_package_environment) {
std::string package_name = CHAR(asChar(r_package_name));
std::string package_directory = CHAR(asChar(r_package_directory));
PackageSPtr package = std::make_shared<Package>(
package_name, package_directory, r_package_environment);
return to_sexp<Package>(package);
}
SEXP r_package_get_name(SEXP r_package) {
PackageSPtr package = from_sexp<Package>(r_package);
const std::string& name = package->get_name();
return mkString(name.c_str());
}
SEXP r_package_get_directory(SEXP r_package) {
PackageSPtr package = from_sexp<Package>(r_package);
const std::string& directory = package->get_directory();
return mkString(directory.c_str());
}
SEXP r_package_get_environment(SEXP r_package) {
PackageSPtr package = from_sexp<Package>(r_package);
SEXP r_environment = package->get_environment();
return r_environment;
}
SEXP r_package_get_functions(SEXP r_package) {
PackageSPtr package = from_sexp<Package>(r_package);
const std::vector<FunctionSPtr>& functions = package->get_functions();
int length = functions.size();
SEXP result = PROTECT(allocVector(VECSXP, length));
for (int index = 0; index < length; ++index) {
SET_VECTOR_ELT(result, index, to_sexp<Function>(functions.at(index)));
}
UNPROTECT(1);
return result;
}
SEXP r_package_add_function(SEXP r_package, SEXP r_function) {
PackageSPtr package = from_sexp<Package>(r_package);
FunctionSPtr function = from_sexp<Function>(r_function);
package->add_function(function);
return r_package;
}