[Rcpp-devel] R_PreserveObject and R_ReleaseObject
Simon Dirmeier
simon.dirmeier at web.de
Thu Aug 16 10:10:53 CEST 2018
Dear all,
I have a question about /R_PreserveObject /and/R_ReleaseObject
/and//thought this would be good place to post it.
I apologize if the question is not suitable or naive.
Suppose I have something like the class below for which I use
Rcpp-modules to extend it to R (code not shown).
I use "insert" to add key-value pair to a map and "remove" to remove an
entry.
I am not having memory issues or so, but the solution seems wrong to me
and I am concerned that it causes problems.
Could you please give me some advice if this implementation is wrong or
unefficient?
Thank you in advance.
Best,
Simon
template<typename T>
class map
{
public:
map() = default;
size_t size()
{
return map_.size();
}
void insert(T& t, SEXP u)
{
SEXP s = Rf_duplicate(VECTOR_ELT(u, i));
R_PreserveObject(s);
map_.insert(std::pair<T, SEXP>(t[i], s));
}
void remove(T& t)
{
auto iter = map_.equal_range(t);
for (auto it = iter.first; it != iter.second; ++it)
{
R_ReleaseObject(it->second);
}
map_.erase(t);
}
private:
std::unordered_map<T, SEXP> map_;
};
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20180816/0253e173/attachment.html>
More information about the Rcpp-devel
mailing list