Skip to content

Commit 60ae697

Browse files
committed
Convert xml2_schema.cpp
1 parent e351747 commit 60ae697

File tree

2 files changed

+6
-17
lines changed

2 files changed

+6
-17
lines changed

src/cpp11.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -398,10 +398,10 @@ extern "C" SEXP _xml2_node_write_character(SEXP node_sxp, SEXP encoding_sxp, SEX
398398
END_CPP11
399399
}
400400
// xml2_schema.cpp
401-
cpp11::sexp doc_validate(SEXP doc_sxp, SEXP schema_sxp);
401+
cpp11::logicals doc_validate(cpp11::sexp doc_sxp, cpp11::sexp schema_sxp);
402402
extern "C" SEXP _xml2_doc_validate(SEXP doc_sxp, SEXP schema_sxp) {
403403
BEGIN_CPP11
404-
return cpp11::as_sexp(doc_validate(cpp11::as_cpp<cpp11::decay_t<SEXP>>(doc_sxp), cpp11::as_cpp<cpp11::decay_t<SEXP>>(schema_sxp)));
404+
return cpp11::as_sexp(doc_validate(cpp11::as_cpp<cpp11::decay_t<cpp11::sexp>>(doc_sxp), cpp11::as_cpp<cpp11::decay_t<cpp11::sexp>>(schema_sxp)));
405405
END_CPP11
406406
}
407407
// xml2_url.cpp

src/xml2_schema.cpp

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,13 @@ void handleSchemaError(void* userData, xmlError* error) {
1919
}
2020

2121
[[cpp11::register]]
22-
cpp11::sexp doc_validate(SEXP doc_sxp, SEXP schema_sxp) {
22+
cpp11::logicals doc_validate(cpp11::sexp doc_sxp, cpp11::sexp schema_sxp) {
2323

2424
XPtrDoc doc(doc_sxp);
2525
XPtrDoc schema(schema_sxp);
2626

2727
xmlLineNumbersDefault(1);
2828

29-
BEGIN_CPP
30-
3129
std::vector<std::string> vec;
3230

3331
xmlSchemaParserCtxtPtr cptr = xmlSchemaNewDocParserCtxt(schema.checked_get());
@@ -40,23 +38,14 @@ cpp11::sexp doc_validate(SEXP doc_sxp, SEXP schema_sxp) {
4038

4139
xmlSchemaSetValidStructuredErrors(vptr, handleSchemaError, &vec);
4240

43-
SEXP out = PROTECT(Rf_allocVector(LGLSXP, 1));
44-
45-
LOGICAL(out)[0] = xmlSchemaValidateDoc(vptr, doc.checked_get()) == 0;
41+
bool valid = (xmlSchemaValidateDoc(vptr, doc.checked_get()) == 0);
42+
cpp11::writable::logicals out{valid};
4643

4744
xmlSchemaFreeParserCtxt(cptr);
4845
xmlSchemaFreeValidCtxt(vptr);
4946
xmlSchemaFree(sptr);
5047

51-
SEXP errors = PROTECT(Rf_allocVector(STRSXP, vec.size()));
52-
for (size_t i = 0; i < vec.size(); ++i) {
53-
SET_STRING_ELT(errors, i, Rf_mkCharLenCE(vec[i].c_str(), vec[i].size(), CE_UTF8));
54-
}
55-
Rf_setAttrib(out, Rf_install("errors"), errors);
48+
out.attr("errors") = vec;
5649

57-
58-
UNPROTECT(2);
5950
return out;
60-
61-
END_CPP
6251
}

0 commit comments

Comments
 (0)