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_;
};



_______________________________________________
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to