Skip to content

Commit 1148f59

Browse files
committed
wrap all unit and converter pointers to free memory automatically
1 parent fc0583a commit 1148f59

File tree

6 files changed

+115
-130
lines changed

6 files changed

+115
-130
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Package: units
2-
Version: 1.0-0.2
2+
Version: 1.0-0.3
33
Title: Measurement Units for R Vectors
44
Authors@R: c(person("Edzer", "Pebesma", role = c("aut", "cre"), email = "edzer.pebesma@uni-muenster.de", comment = c(ORCID = "0000-0001-8049-7069")),
55
person("Thomas", "Mailund", role = "aut", email = "mailund@birc.au.dk"),

NEWS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
* Fix `print` methods for `units` and `mixed_units`, which now correctly return
99
invisibly the object being printed; #422
1010

11+
* Wrap all pointers to avoid memory leaks derived from errors.
12+
1113
# version 1.0-0
1214

1315
* Breaking change: a new tokenizer fixes longstanding issues with parsing

R/RcppExports.R

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,16 @@ ud_convert_doubles <- function(x, from, to) {
2929
.Call('_units_ud_convert_doubles', PACKAGE = 'units', x, from, to)
3030
}
3131

32-
ud_map_names <- function(names, inunit) {
33-
invisible(.Call('_units_ud_map_names', PACKAGE = 'units', names, inunit))
32+
ud_map_names <- function(names, unit) {
33+
invisible(.Call('_units_ud_map_names', PACKAGE = 'units', names, unit))
3434
}
3535

3636
ud_unmap_names <- function(names) {
3737
invisible(.Call('_units_ud_unmap_names', PACKAGE = 'units', names))
3838
}
3939

40-
ud_map_symbols <- function(symbols, inunit) {
41-
invisible(.Call('_units_ud_map_symbols', PACKAGE = 'units', symbols, inunit))
40+
ud_map_symbols <- function(symbols, unit) {
41+
invisible(.Call('_units_ud_map_symbols', PACKAGE = 'units', symbols, unit))
4242
}
4343

4444
ud_unmap_symbols <- function(symbols) {

src/RcppExports.cpp

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Generated by using Rcpp::compileAttributes() -> do not edit by hand
22
// Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393
33

4+
#include "units_types.h"
45
#include <Rcpp.h>
56

67
using namespace Rcpp;
@@ -85,12 +86,12 @@ BEGIN_RCPP
8586
END_RCPP
8687
}
8788
// ud_map_names
88-
void ud_map_names(CharacterVector names, SEXP inunit);
89-
RcppExport SEXP _units_ud_map_names(SEXP namesSEXP, SEXP inunitSEXP) {
89+
void ud_map_names(CharacterVector names, xut_unit unit);
90+
RcppExport SEXP _units_ud_map_names(SEXP namesSEXP, SEXP unitSEXP) {
9091
BEGIN_RCPP
9192
Rcpp::traits::input_parameter< CharacterVector >::type names(namesSEXP);
92-
Rcpp::traits::input_parameter< SEXP >::type inunit(inunitSEXP);
93-
ud_map_names(names, inunit);
93+
Rcpp::traits::input_parameter< xut_unit >::type unit(unitSEXP);
94+
ud_map_names(names, unit);
9495
return R_NilValue;
9596
END_RCPP
9697
}
@@ -104,12 +105,12 @@ BEGIN_RCPP
104105
END_RCPP
105106
}
106107
// ud_map_symbols
107-
void ud_map_symbols(CharacterVector symbols, SEXP inunit);
108-
RcppExport SEXP _units_ud_map_symbols(SEXP symbolsSEXP, SEXP inunitSEXP) {
108+
void ud_map_symbols(CharacterVector symbols, xut_unit unit);
109+
RcppExport SEXP _units_ud_map_symbols(SEXP symbolsSEXP, SEXP unitSEXP) {
109110
BEGIN_RCPP
110111
Rcpp::traits::input_parameter< CharacterVector >::type symbols(symbolsSEXP);
111-
Rcpp::traits::input_parameter< SEXP >::type inunit(inunitSEXP);
112-
ud_map_symbols(symbols, inunit);
112+
Rcpp::traits::input_parameter< xut_unit >::type unit(unitSEXP);
113+
ud_map_symbols(symbols, unit);
113114
return R_NilValue;
114115
END_RCPP
115116
}
@@ -123,7 +124,7 @@ BEGIN_RCPP
123124
END_RCPP
124125
}
125126
// R_ut_get_dimensionless_unit_one
126-
SEXP R_ut_get_dimensionless_unit_one();
127+
xut_unit R_ut_get_dimensionless_unit_one();
127128
RcppExport SEXP _units_R_ut_get_dimensionless_unit_one() {
128129
BEGIN_RCPP
129130
Rcpp::RObject rcpp_result_gen;
@@ -132,7 +133,7 @@ BEGIN_RCPP
132133
END_RCPP
133134
}
134135
// R_ut_new_base_unit
135-
SEXP R_ut_new_base_unit();
136+
xut_unit R_ut_new_base_unit();
136137
RcppExport SEXP _units_R_ut_new_base_unit() {
137138
BEGIN_RCPP
138139
Rcpp::RObject rcpp_result_gen;
@@ -141,7 +142,7 @@ BEGIN_RCPP
141142
END_RCPP
142143
}
143144
// R_ut_new_dimensionless_unit
144-
SEXP R_ut_new_dimensionless_unit();
145+
xut_unit R_ut_new_dimensionless_unit();
145146
RcppExport SEXP _units_R_ut_new_dimensionless_unit() {
146147
BEGIN_RCPP
147148
Rcpp::RObject rcpp_result_gen;
@@ -150,114 +151,114 @@ BEGIN_RCPP
150151
END_RCPP
151152
}
152153
// R_ut_get_name
153-
CharacterVector R_ut_get_name(SEXP unit);
154+
CharacterVector R_ut_get_name(xut_unit unit);
154155
RcppExport SEXP _units_R_ut_get_name(SEXP unitSEXP) {
155156
BEGIN_RCPP
156157
Rcpp::RObject rcpp_result_gen;
157-
Rcpp::traits::input_parameter< SEXP >::type unit(unitSEXP);
158+
Rcpp::traits::input_parameter< xut_unit >::type unit(unitSEXP);
158159
rcpp_result_gen = Rcpp::wrap(R_ut_get_name(unit));
159160
return rcpp_result_gen;
160161
END_RCPP
161162
}
162163
// R_ut_get_symbol
163-
CharacterVector R_ut_get_symbol(SEXP unit);
164+
CharacterVector R_ut_get_symbol(xut_unit unit);
164165
RcppExport SEXP _units_R_ut_get_symbol(SEXP unitSEXP) {
165166
BEGIN_RCPP
166167
Rcpp::RObject rcpp_result_gen;
167-
Rcpp::traits::input_parameter< SEXP >::type unit(unitSEXP);
168+
Rcpp::traits::input_parameter< xut_unit >::type unit(unitSEXP);
168169
rcpp_result_gen = Rcpp::wrap(R_ut_get_symbol(unit));
169170
return rcpp_result_gen;
170171
END_RCPP
171172
}
172173
// R_ut_scale
173-
SEXP R_ut_scale(SEXP unit, double factor);
174+
xut_unit R_ut_scale(xut_unit unit, double factor);
174175
RcppExport SEXP _units_R_ut_scale(SEXP unitSEXP, SEXP factorSEXP) {
175176
BEGIN_RCPP
176177
Rcpp::RObject rcpp_result_gen;
177-
Rcpp::traits::input_parameter< SEXP >::type unit(unitSEXP);
178+
Rcpp::traits::input_parameter< xut_unit >::type unit(unitSEXP);
178179
Rcpp::traits::input_parameter< double >::type factor(factorSEXP);
179180
rcpp_result_gen = Rcpp::wrap(R_ut_scale(unit, factor));
180181
return rcpp_result_gen;
181182
END_RCPP
182183
}
183184
// R_ut_offset
184-
SEXP R_ut_offset(SEXP unit, double origin);
185+
xut_unit R_ut_offset(xut_unit unit, double origin);
185186
RcppExport SEXP _units_R_ut_offset(SEXP unitSEXP, SEXP originSEXP) {
186187
BEGIN_RCPP
187188
Rcpp::RObject rcpp_result_gen;
188-
Rcpp::traits::input_parameter< SEXP >::type unit(unitSEXP);
189+
Rcpp::traits::input_parameter< xut_unit >::type unit(unitSEXP);
189190
Rcpp::traits::input_parameter< double >::type origin(originSEXP);
190191
rcpp_result_gen = Rcpp::wrap(R_ut_offset(unit, origin));
191192
return rcpp_result_gen;
192193
END_RCPP
193194
}
194195
// R_ut_multiply
195-
SEXP R_ut_multiply(SEXP a, SEXP b);
196+
xut_unit R_ut_multiply(xut_unit a, xut_unit b);
196197
RcppExport SEXP _units_R_ut_multiply(SEXP aSEXP, SEXP bSEXP) {
197198
BEGIN_RCPP
198199
Rcpp::RObject rcpp_result_gen;
199-
Rcpp::traits::input_parameter< SEXP >::type a(aSEXP);
200-
Rcpp::traits::input_parameter< SEXP >::type b(bSEXP);
200+
Rcpp::traits::input_parameter< xut_unit >::type a(aSEXP);
201+
Rcpp::traits::input_parameter< xut_unit >::type b(bSEXP);
201202
rcpp_result_gen = Rcpp::wrap(R_ut_multiply(a, b));
202203
return rcpp_result_gen;
203204
END_RCPP
204205
}
205206
// R_ut_invert
206-
SEXP R_ut_invert(SEXP a);
207+
xut_unit R_ut_invert(xut_unit a);
207208
RcppExport SEXP _units_R_ut_invert(SEXP aSEXP) {
208209
BEGIN_RCPP
209210
Rcpp::RObject rcpp_result_gen;
210-
Rcpp::traits::input_parameter< SEXP >::type a(aSEXP);
211+
Rcpp::traits::input_parameter< xut_unit >::type a(aSEXP);
211212
rcpp_result_gen = Rcpp::wrap(R_ut_invert(a));
212213
return rcpp_result_gen;
213214
END_RCPP
214215
}
215216
// R_ut_divide
216-
SEXP R_ut_divide(SEXP numer, SEXP denom);
217+
xut_unit R_ut_divide(xut_unit numer, xut_unit denom);
217218
RcppExport SEXP _units_R_ut_divide(SEXP numerSEXP, SEXP denomSEXP) {
218219
BEGIN_RCPP
219220
Rcpp::RObject rcpp_result_gen;
220-
Rcpp::traits::input_parameter< SEXP >::type numer(numerSEXP);
221-
Rcpp::traits::input_parameter< SEXP >::type denom(denomSEXP);
221+
Rcpp::traits::input_parameter< xut_unit >::type numer(numerSEXP);
222+
Rcpp::traits::input_parameter< xut_unit >::type denom(denomSEXP);
222223
rcpp_result_gen = Rcpp::wrap(R_ut_divide(numer, denom));
223224
return rcpp_result_gen;
224225
END_RCPP
225226
}
226227
// R_ut_raise
227-
SEXP R_ut_raise(SEXP a, int i);
228+
xut_unit R_ut_raise(xut_unit a, int i);
228229
RcppExport SEXP _units_R_ut_raise(SEXP aSEXP, SEXP iSEXP) {
229230
BEGIN_RCPP
230231
Rcpp::RObject rcpp_result_gen;
231-
Rcpp::traits::input_parameter< SEXP >::type a(aSEXP);
232+
Rcpp::traits::input_parameter< xut_unit >::type a(aSEXP);
232233
Rcpp::traits::input_parameter< int >::type i(iSEXP);
233234
rcpp_result_gen = Rcpp::wrap(R_ut_raise(a, i));
234235
return rcpp_result_gen;
235236
END_RCPP
236237
}
237238
// R_ut_root
238-
SEXP R_ut_root(SEXP a, int i);
239+
xut_unit R_ut_root(xut_unit a, int i);
239240
RcppExport SEXP _units_R_ut_root(SEXP aSEXP, SEXP iSEXP) {
240241
BEGIN_RCPP
241242
Rcpp::RObject rcpp_result_gen;
242-
Rcpp::traits::input_parameter< SEXP >::type a(aSEXP);
243+
Rcpp::traits::input_parameter< xut_unit >::type a(aSEXP);
243244
Rcpp::traits::input_parameter< int >::type i(iSEXP);
244245
rcpp_result_gen = Rcpp::wrap(R_ut_root(a, i));
245246
return rcpp_result_gen;
246247
END_RCPP
247248
}
248249
// R_ut_log
249-
SEXP R_ut_log(SEXP a, double base);
250+
xut_unit R_ut_log(xut_unit a, double base);
250251
RcppExport SEXP _units_R_ut_log(SEXP aSEXP, SEXP baseSEXP) {
251252
BEGIN_RCPP
252253
Rcpp::RObject rcpp_result_gen;
253-
Rcpp::traits::input_parameter< SEXP >::type a(aSEXP);
254+
Rcpp::traits::input_parameter< xut_unit >::type a(aSEXP);
254255
Rcpp::traits::input_parameter< double >::type base(baseSEXP);
255256
rcpp_result_gen = Rcpp::wrap(R_ut_log(a, base));
256257
return rcpp_result_gen;
257258
END_RCPP
258259
}
259260
// R_ut_parse
260-
SEXP R_ut_parse(std::string name);
261+
xut_unit R_ut_parse(std::string name);
261262
RcppExport SEXP _units_R_ut_parse(SEXP nameSEXP) {
262263
BEGIN_RCPP
263264
Rcpp::RObject rcpp_result_gen;
@@ -267,11 +268,11 @@ BEGIN_RCPP
267268
END_RCPP
268269
}
269270
// R_ut_format
270-
CharacterVector R_ut_format(SEXP p, bool names, bool definition, bool ascii);
271+
CharacterVector R_ut_format(xut_unit p, bool names, bool definition, bool ascii);
271272
RcppExport SEXP _units_R_ut_format(SEXP pSEXP, SEXP namesSEXP, SEXP definitionSEXP, SEXP asciiSEXP) {
272273
BEGIN_RCPP
273274
Rcpp::RObject rcpp_result_gen;
274-
Rcpp::traits::input_parameter< SEXP >::type p(pSEXP);
275+
Rcpp::traits::input_parameter< xut_unit >::type p(pSEXP);
275276
Rcpp::traits::input_parameter< bool >::type names(namesSEXP);
276277
Rcpp::traits::input_parameter< bool >::type definition(definitionSEXP);
277278
Rcpp::traits::input_parameter< bool >::type ascii(asciiSEXP);

0 commit comments

Comments
 (0)