rust_re2.cpp
49 lines
| 1.1 KiB
| text/x-c
|
CppLexer
Raphaël Gomès
|
r44786 | /* | ||
rust_re2.cpp | ||||
C ABI export of Re2's C++ interface for Rust FFI. | ||||
Copyright 2020 Valentin Gatien-Baron | ||||
This software may be used and distributed according to the terms of the | ||||
GNU General Public License version 2 or any later version. | ||||
*/ | ||||
#include <re2/re2.h> | ||||
using namespace re2; | ||||
extern "C" { | ||||
RE2* rust_re2_create(const char* data, size_t len) { | ||||
RE2::Options o; | ||||
o.set_encoding(RE2::Options::Encoding::EncodingLatin1); | ||||
o.set_log_errors(false); | ||||
o.set_max_mem(50000000); | ||||
return new RE2(StringPiece(data, len), o); | ||||
} | ||||
void rust_re2_destroy(RE2* re) { | ||||
delete re; | ||||
} | ||||
bool rust_re2_ok(RE2* re) { | ||||
return re->ok(); | ||||
} | ||||
void rust_re2_error(RE2* re, const char** outdata, size_t* outlen) { | ||||
const std::string& e = re->error(); | ||||
*outdata = e.data(); | ||||
*outlen = e.length(); | ||||
} | ||||
bool rust_re2_match(RE2* re, char* data, size_t len, int ianchor) { | ||||
const StringPiece sp = StringPiece(data, len); | ||||
RE2::Anchor anchor = | ||||
ianchor == 0 ? RE2::Anchor::UNANCHORED : | ||||
(ianchor == 1 ? RE2::Anchor::ANCHOR_START : | ||||
RE2::Anchor::ANCHOR_BOTH); | ||||
return re->Match(sp, 0, len, anchor, NULL, 0); | ||||
} | ||||
} | ||||