Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2020-04-19 22:51:05 +0300
committerAnna Henningsen <anna@addaleax.net>2020-05-06 07:44:04 +0300
commit86fdaa745572a3bec4370ac7bd05d18e6bf64c01 (patch)
tree45890dbc713ad29edd830fd2aa17f592909ccbb7 /src/util-inl.h
parentf446b2058dcfaf9d4e2f6bdfe555bc4437f41acf (diff)
src: retrieve binding data from the context
Instead of passing them through the data bound to function templates, store references to them in a list embedded inside the context. This makes the function templates more context-independent, and makes it possible to embed binding data in non-main contexts. Co-authored-by: Anna Henningsen <anna@addaleax.net> PR-URL: https://github.com/nodejs/node/pull/33139 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Diffstat (limited to 'src/util-inl.h')
-rw-r--r--src/util-inl.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/util-inl.h b/src/util-inl.h
index d44ee09fefb..6b4bdfe034d 100644
--- a/src/util-inl.h
+++ b/src/util-inl.h
@@ -533,6 +533,37 @@ inline bool IsSafeJsInt(v8::Local<v8::Value> v) {
return false;
}
+constexpr size_t FastStringKey::HashImpl(const char* str) {
+ // Low-quality hash (djb2), but just fine for current use cases.
+ size_t h = 5381;
+ do {
+ h = h * 33 + *str; // NOLINT(readability/pointer_notation)
+ } while (*(str++) != '\0');
+ return h;
+}
+
+constexpr size_t FastStringKey::Hash::operator()(
+ const FastStringKey& key) const {
+ return key.cached_hash_;
+}
+
+constexpr bool FastStringKey::operator==(const FastStringKey& other) const {
+ const char* p1 = name_;
+ const char* p2 = other.name_;
+ if (p1 == p2) return true;
+ do {
+ if (*(p1++) != *(p2++)) return false;
+ } while (*p1 != '\0');
+ return true;
+}
+
+constexpr FastStringKey::FastStringKey(const char* name)
+ : name_(name), cached_hash_(HashImpl(name)) {}
+
+constexpr const char* FastStringKey::c_str() const {
+ return name_;
+}
+
} // namespace node
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS