/
embind.patch
78 lines (74 loc) · 2.98 KB
/
embind.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
diff --git a/src/nnet_language_identifier.cc b/src/nnet_language_identifier.cc
index abc3950..a3ef6b9 100644
--- a/src/nnet_language_identifier.cc
+++ b/src/nnet_language_identifier.cc
@@ -33,6 +33,45 @@ limitations under the License.
#include "task_context.h"
#include "workspace.h"
+#ifdef __EMSCRIPTEN__
+ #include <emscripten/bind.h>
+ using namespace emscripten;
+
+ // not sure why but llvm link strips and 'optimize' embind, does not export
+ // binding correctly. This function is dummy to ensure class is considered as in use,
+ // prevent strip out.
+ void dummy() {
+ chrome_lang_id::NNetLanguageIdentifier* dummy;
+ throw "should not be called";
+ }
+
+ // expose NNetLanguageIdentifier via embind
+ EMSCRIPTEN_BINDINGS(cld3) {
+ //bind NNetLanguageIdentifier::Result struct
+ value_object<chrome_lang_id::NNetLanguageIdentifier::Result>("Result")
+ .field("language", &chrome_lang_id::NNetLanguageIdentifier::Result::language)
+ .field("probability", &chrome_lang_id::NNetLanguageIdentifier::Result::probability)
+ .field("is_reliable", &chrome_lang_id::NNetLanguageIdentifier::Result::is_reliable)
+ .field("proportion", &chrome_lang_id::NNetLanguageIdentifier::Result::proportion)
+ ;
+
+ //regisver std::vector<Result>
+ register_vector<chrome_lang_id::NNetLanguageIdentifier::Result>("ResultVector");
+
+ //bind NNetLanguageIdentifier class
+ class_<chrome_lang_id::NNetLanguageIdentifier>("NNetLanguageIdentifier")
+ .constructor<int, int>()
+ .class_property("kMinNumBytesToConsider", &chrome_lang_id::NNetLanguageIdentifier::kMinNumBytesToConsider)
+ .class_property("kMaxNumBytesToConsider", &chrome_lang_id::NNetLanguageIdentifier::kMaxNumBytesToConsider)
+ .class_property("kMaxNumInputBytesToConsider", &chrome_lang_id::NNetLanguageIdentifier::kMaxNumInputBytesToConsider)
+ .class_property("kReliabilityThreshold", &chrome_lang_id::NNetLanguageIdentifier::kReliabilityThreshold)
+ .class_property("kReliabilityHrBsThreshold", &chrome_lang_id::NNetLanguageIdentifier::kReliabilityHrBsThreshold)
+ .function("FindLanguage", &chrome_lang_id::NNetLanguageIdentifier::FindLanguage)
+ .function("FindTopNMostFreqLangs", &chrome_lang_id::NNetLanguageIdentifier::FindTopNMostFreqLangs)
+ ;
+ }
+#endif
+
namespace chrome_lang_id {
namespace {
@@ -377,4 +416,4 @@ string NNetLanguageIdentifier::SelectTextGivenBeginAndSize(
return output_text;
}
-} // namespace chrome_lang_id
+} // namespace chrome_lang_id
\ No newline at end of file
diff --git a/src/nnet_language_identifier.h b/src/nnet_language_identifier.h
index 820aba6..54b4090 100644
--- a/src/nnet_language_identifier.h
+++ b/src/nnet_language_identifier.h
@@ -173,3 +173,15 @@ class NNetLanguageIdentifier {
} // namespace chrome_lang_id
#endif // NNET_LANGUAGE_IDENTIFIER_H_
+
+#ifdef __EMSCRIPTEN__
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+
+ void dummy();
+
+ #ifdef __cplusplus
+ }
+ #endif
+#endif
\ No newline at end of file