Skip to content

Commit 50120f9

Browse files
authored
Merge pull request #61 from snipsco/task/remove-parser-caching
Remove caching of BuiltinEntityParser objects
2 parents fe892b7 + 609c1a8 commit 50120f9

File tree

2 files changed

+18
-32
lines changed

2 files changed

+18
-32
lines changed

snips-nlu-ontology-parsers-ffi-macros/src/builtin_entity_parser.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use std::ffi::{CStr};
22
use std::slice;
3-
use std::sync::Arc;
43
use std::str::FromStr;
54

65
use failure::ResultExt;
@@ -29,9 +28,9 @@ pub fn create_builtin_entity_parser(
2928
) -> Result<()> {
3029
let lang = unsafe { CStr::from_ptr(lang) }.to_str()?;
3130
let lang = Language::from_str(&*lang.to_uppercase())?;
32-
let parser = BuiltinEntityParser::get(lang);
31+
let parser = BuiltinEntityParser::new(lang);
3332

34-
let c_parser = CBuiltinEntityParser(Arc::into_raw(parser) as _).into_raw_pointer();
33+
let c_parser = CBuiltinEntityParser(parser.into_raw_pointer() as _).into_raw_pointer();
3534

3635
unsafe {
3736
*ptr = c_parser;
@@ -108,7 +107,7 @@ pub fn extract_entity(
108107
pub fn destroy_builtin_entity_parser(ptr: *mut CBuiltinEntityParser) -> Result<()> {
109108
unsafe {
110109
let parser = CBuiltinEntityParser::from_raw_pointer(ptr)?.0;
111-
let _ = Arc::from_raw(parser);
110+
let _ = BuiltinEntityParser::from_raw_pointer(parser as _);
112111
}
113112
Ok(())
114113
}

snips-nlu-ontology-parsers/src/builtin_entity_parser.rs

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use std::collections::{HashMap, HashSet};
22
use std::iter::FromIterator;
33
use std::ops::Range;
4-
use std::sync::{Arc, Mutex};
54

65
use itertools::Itertools;
76
use regex::Regex;
@@ -26,31 +25,19 @@ lazy_static! {
2625
}
2726

2827
impl BuiltinEntityParser {
29-
pub fn get(lang: Language) -> Arc<BuiltinEntityParser> {
30-
lazy_static! {
31-
static ref CACHED_PARSERS: Mutex<HashMap<String, Arc<BuiltinEntityParser>>> =
32-
Mutex::new(HashMap::new());
33-
}
34-
35-
CACHED_PARSERS
36-
.lock()
37-
.unwrap()
38-
.entry(lang.to_string())
39-
.or_insert_with(|| {
40-
let supported_entity_kinds = BuiltinEntityKind::supported_entity_kinds(lang);
41-
let ordered_entity_kinds = OutputKind::all()
42-
.iter()
43-
.map(|output_kind| output_kind.into_builtin())
44-
.filter(|builtin_entity_kind| supported_entity_kinds.contains(&builtin_entity_kind))
45-
.collect();
28+
pub fn new(lang: Language) -> Self {
29+
let supported_entity_kinds = BuiltinEntityKind::supported_entity_kinds(lang);
30+
let ordered_entity_kinds = OutputKind::all()
31+
.iter()
32+
.map(|output_kind| output_kind.into_builtin())
33+
.filter(|builtin_entity_kind| supported_entity_kinds.contains(&builtin_entity_kind))
34+
.collect();
4635

47-
Arc::new(BuiltinEntityParser {
48-
parser: build_parser(lang.into_builtin()).unwrap(),
49-
lang,
50-
supported_entity_kinds: ordered_entity_kinds,
51-
})
52-
})
53-
.clone()
36+
BuiltinEntityParser {
37+
parser: build_parser(lang.into_builtin()).unwrap(),
38+
lang,
39+
supported_entity_kinds: ordered_entity_kinds,
40+
}
5441
}
5542

5643
pub fn extract_entities(
@@ -182,7 +169,7 @@ mod test {
182169

183170
#[test]
184171
fn test_entities_extraction() {
185-
let parser = BuiltinEntityParser::get(Language::EN);
172+
let parser = BuiltinEntityParser::new(Language::EN);
186173
assert_eq!(
187174
vec![BuiltinEntityKind::Number, BuiltinEntityKind::Time],
188175
parser
@@ -225,7 +212,7 @@ mod test {
225212

226213
#[test]
227214
fn test_entities_extraction_for_non_space_separated_languages() {
228-
let parser = BuiltinEntityParser::get(Language::JA);
215+
let parser = BuiltinEntityParser::new(Language::JA);
229216
let expected_time_value = InstantTimeValue {
230217
value: "2013-02-10 00:00:00 +01:00".to_string(),
231218
grain: Grain::Day,
@@ -268,7 +255,7 @@ mod test {
268255
#[test]
269256
fn test_entity_examples_should_be_parsed() {
270257
for language in Language::all() {
271-
let parser = BuiltinEntityParser::get(*language);
258+
let parser = BuiltinEntityParser::new(*language);
272259
for entity_kind in BuiltinEntityKind::all() {
273260
for example in entity_kind.examples(*language) {
274261
let results = parser.extract_entities(example, Some(&[*entity_kind]));

0 commit comments

Comments
 (0)