diff --git a/R/RcppExports.R b/R/RcppExports.R
index 7419159..c1c57d8 100644
--- a/R/RcppExports.R
+++ b/R/RcppExports.R
@@ -41,8 +41,8 @@ bitset_or <- function(a, b) {
invisible(.Call(`_individual_bitset_or`, a, b))
}
-bitset_assign <- function(a, b) {
- invisible(.Call(`_individual_bitset_assign`, a, b))
+bitset_copy_from <- function(a, b) {
+ invisible(.Call(`_individual_bitset_copy_from`, a, b))
}
bitset_xor <- function(a, b) {
diff --git a/R/bitset.R b/R/bitset.R
index f18e829..aa94e73 100644
--- a/R/bitset.R
+++ b/R/bitset.R
@@ -108,17 +108,6 @@ Bitset <- list(
self
},
- #' ```{r echo=FALSE, results="asis"}
- #' bitset_method_doc(
- #' "assign",
- #' "overwrite the value of a bitset from another bitset",
- #' other = "the other bitset.")
- #' ```
- assign = function(other) {
- bitset_assign(self$.bitset, other$.bitset)
- self
- },
-
#' ```{r echo=FALSE, results="asis"}
#' bitset_method_doc(
#' "size",
@@ -221,10 +210,28 @@ Bitset <- list(
#' ```{r echo=FALSE, results="asis"}
#' bitset_method_doc(
#' "copy",
- #' "returns a copy of the bitset.")
+ #' "returns a copy of the bitset.
+ #'
+ #' In cases where a destination bitset already exists, it may be more
+ #' performant to use the \\code{copy_from} method instead.")
#' ```
copy = function() Bitset$new(from = bitset_copy(self$.bitset)),
+
+ #' ```{r echo=FALSE, results="asis"}
+ #' bitset_method_doc(
+ #' "copy_from",
+ #' "overwrite the value of the bitset from another bitset.
+ #'
+ #' This is similar to calling \\code{other$copy()}, but can be more
+ #' efficient by reusing the resources of the existing bitset.",
+ #' other = "the other bitset.")
+ #' ```
+ copy_from = function(other) {
+ bitset_copy_from(self$.bitset, other$.bitset)
+ self
+ },
+
#' ```{r echo=FALSE, results="asis"}
#' bitset_method_doc(
#' "to_vector",
diff --git a/man/Bitset.Rd b/man/Bitset.Rd
index b4c8b25..22b97c9 100644
--- a/man/Bitset.Rd
+++ b/man/Bitset.Rd
@@ -61,18 +61,6 @@ clear the bitset.
}
}
\if{html}{\out{
}}
-\subsection{Method \code{assign()}}{
-overwrite the value of a bitset from another bitset
-\subsection{Usage}{
-\preformatted{b$assign(other)}
-}
-\subsection{Arguments}{
-\describe{
-\item{\code{other}}{the other bitset.}
-}
-}
-}
-\if{html}{\out{
}}
\subsection{Method \code{size()}}{
get the number of elements in the set.
\subsection{Usage}{
@@ -172,11 +160,29 @@ k should be chosen such that \eqn{0 \le k \le N}.}
\if{html}{\out{
}}
\subsection{Method \code{copy()}}{
returns a copy of the bitset.
+
+In cases where a destination bitset already exists, it may be more
+performant to use the \code{copy_from} method instead.
\subsection{Usage}{
\preformatted{b$copy()}
}
}
\if{html}{\out{
}}
+\subsection{Method \code{copy_from()}}{
+overwrite the value of the bitset from another bitset.
+
+This is similar to calling \code{other$copy()}, but can be more
+efficient by reusing the resources of the existing bitset.
+\subsection{Usage}{
+\preformatted{b$copy_from(other)}
+}
+\subsection{Arguments}{
+\describe{
+\item{\code{other}}{the other bitset.}
+}
+}
+}
+\if{html}{\out{
}}
\subsection{Method \code{to_vector()}}{
return an integer vector of the elements stored in this bitset.
\subsection{Usage}{
diff --git a/man/restore_object_state.Rd b/man/restore_object_state.Rd
index f9a600a..8d79701 100644
--- a/man/restore_object_state.Rd
+++ b/man/restore_object_state.Rd
@@ -27,5 +27,7 @@ and the \code{restore_state} method of each object is called.
If the list of object is named, more objects may be specified than were
originally present in the saved simulation, allowing a simulation to be
extended with more features upon resuming. In this case, the
-\code{restore_state} method is called with a \code{NULL} argument.
+\code{restore_state} method of the new objects is called with a \code{NULL}
+argument. Conversly, the list of objects may omit certain entries, in which
+case their state to be restored is ignored.
}
diff --git a/src/RcppExports.cpp b/src/RcppExports.cpp
index f8a76a1..86132a3 100644
--- a/src/RcppExports.cpp
+++ b/src/RcppExports.cpp
@@ -124,14 +124,14 @@ BEGIN_RCPP
return R_NilValue;
END_RCPP
}
-// bitset_assign
-void bitset_assign(const Rcpp::XPtr a, const Rcpp::XPtr b);
-RcppExport SEXP _individual_bitset_assign(SEXP aSEXP, SEXP bSEXP) {
+// bitset_copy_from
+void bitset_copy_from(const Rcpp::XPtr a, const Rcpp::XPtr b);
+RcppExport SEXP _individual_bitset_copy_from(SEXP aSEXP, SEXP bSEXP) {
BEGIN_RCPP
Rcpp::RNGScope rcpp_rngScope_gen;
Rcpp::traits::input_parameter< const Rcpp::XPtr >::type a(aSEXP);
Rcpp::traits::input_parameter< const Rcpp::XPtr >::type b(bSEXP);
- bitset_assign(a, b);
+ bitset_copy_from(a, b);
return R_NilValue;
END_RCPP
}
@@ -1475,7 +1475,7 @@ static const R_CallMethodDef CallEntries[] = {
{"_individual_bitset_and", (DL_FUNC) &_individual_bitset_and, 2},
{"_individual_bitset_not", (DL_FUNC) &_individual_bitset_not, 2},
{"_individual_bitset_or", (DL_FUNC) &_individual_bitset_or, 2},
- {"_individual_bitset_assign", (DL_FUNC) &_individual_bitset_assign, 2},
+ {"_individual_bitset_copy_from", (DL_FUNC) &_individual_bitset_copy_from, 2},
{"_individual_bitset_xor", (DL_FUNC) &_individual_bitset_xor, 2},
{"_individual_bitset_set_difference", (DL_FUNC) &_individual_bitset_set_difference, 2},
{"_individual_bitset_sample", (DL_FUNC) &_individual_bitset_sample, 2},
diff --git a/src/bitset.cpp b/src/bitset.cpp
index 01feb96..c6854f6 100644
--- a/src/bitset.cpp
+++ b/src/bitset.cpp
@@ -89,7 +89,7 @@ void bitset_or(
}
//[[Rcpp::export]]
-void bitset_assign(
+void bitset_copy_from(
const Rcpp::XPtr a,
const Rcpp::XPtr b
) {
diff --git a/tests/testthat/test-bitset.R b/tests/testthat/test-bitset.R
index eb3ae2a..606cb0e 100644
--- a/tests/testthat/test-bitset.R
+++ b/tests/testthat/test-bitset.R
@@ -80,13 +80,13 @@ test_that("bitset or works", {
expect_equal(a$to_vector(), c(1, 3, 5, 6, 7))
})
-test_that("bitset assign works", {
+test_that("bitset copy from works", {
a <- Bitset$new(10)
a$insert(c(1, 5, 6))
b <- Bitset$new(10)
b$insert(c(1, 3, 7))
- a$assign(b)
+ a$copy_from(b)
expect_equal(a$to_vector(), c(1, 3, 7))
# Check the two bitsets aren't aliases of each other.
@@ -95,13 +95,13 @@ test_that("bitset assign works", {
expect_equal(b$to_vector(), numeric(0))
})
-test_that("bitset assign requires bitsets to have same max size", {
+test_that("bitset copy from requires bitsets to have same max size", {
a <- Bitset$new(8)
a$insert(c(1, 5, 6))
b <- Bitset$new(10)
b$insert(c(1, 3, 7))
- expect_error(a$assign(b), "Incompatible bitmap sizes")
+ expect_error(a$copy_from(b), "Incompatible bitmap sizes")
})