From 0835f40ae25f97360dc393928796387d3cd6b16e Mon Sep 17 00:00:00 2001
From: Guilherme Andrade
Date: Wed, 19 Apr 2017 00:43:37 +0100
Subject: erts: Add enif_phash2 and enif_phash2_ranged
These allow one to hash VM terms from NIF code.
---
erts/doc/src/erl_nif.xml | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
(limited to 'erts/doc/src/erl_nif.xml')
diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml
index 6bb1109415..34dae418ef 100644
--- a/erts/doc/src/erl_nif.xml
+++ b/erts/doc/src/erl_nif.xml
@@ -2369,6 +2369,36 @@ enif_map_iterator_destroy(env, &iter);
+
+
+ unsigned long
+ enif_phash2(ERL_NIF_TERM term)
+
+ Portable hash function.
+
+ Portable hash function that gives the same hash for the same Erlang term
+ regardless of machine architecture and ERTS version. Corresponds to
+ erlang:phash2/1.
+ Returns an unsigned integer within 0..2^27-1.
+
+
+
+
+
+ unsigned long
+ enif_phash2_ranged(ERL_NIF_TERM term, unsigned long range)
+
+ Portable hash function.
+
+ Similar to enif_phash2
+ but hash range can be specified. Corresponds to
+ erlang:phash2/2.
+ Returns an unsigned integer within 0..range-1
+ if 0 < range < 2^32, and within 0..2^32-1 otherwise.
+
+
+
+
intenif_port_command(ErlNifEnv* env, const
ErlNifPort* to_port, ErlNifEnv *msg_env, ERL_NIF_TERM msg)
--
cgit v1.2.3
From 1b37d0b010ea31b04b9d0a15d0bec9c75a013dc9 Mon Sep 17 00:00:00 2001
From: Guilherme Andrade
Date: Thu, 20 Apr 2017 21:35:54 +0100
Subject: erts: Remove enif_phash2_ranged
---
erts/doc/src/erl_nif.xml | 16 ----------------
1 file changed, 16 deletions(-)
(limited to 'erts/doc/src/erl_nif.xml')
diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml
index 34dae418ef..35c42ac517 100644
--- a/erts/doc/src/erl_nif.xml
+++ b/erts/doc/src/erl_nif.xml
@@ -2383,22 +2383,6 @@ enif_map_iterator_destroy(env, &iter);
-
-
- unsigned long
- enif_phash2_ranged(ERL_NIF_TERM term, unsigned long range)
-
- Portable hash function.
-
- Similar to enif_phash2
- but hash range can be specified. Corresponds to
- erlang:phash2/2.
- Returns an unsigned integer within 0..range-1
- if 0 < range < 2^32, and within 0..2^32-1 otherwise.
-
-
-
-
intenif_port_command(ErlNifEnv* env, const
ErlNifPort* to_port, ErlNifEnv *msg_env, ERL_NIF_TERM msg)
--
cgit v1.2.3
From d8756f8665a42effa2f3515369058cff4441abeb Mon Sep 17 00:00:00 2001
From: Guilherme Andrade
Date: Thu, 20 Apr 2017 22:44:04 +0100
Subject: erts: Refactor enif_phash2 into enif_hash
A more generic hashing function which can also hash terms based on
`make_internal_hash'.
---
erts/doc/src/erl_nif.xml | 49 ++++++++++++++++++++++++++++++++++--------------
1 file changed, 35 insertions(+), 14 deletions(-)
(limited to 'erts/doc/src/erl_nif.xml')
diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml
index 35c42ac517..53b6fdeaa1 100644
--- a/erts/doc/src/erl_nif.xml
+++ b/erts/doc/src/erl_nif.xml
@@ -813,6 +813,28 @@ typedef enum {
+ ErlNifHash
+ -
+
An enumeration of the supported hash types that can be generated
+ using enif_hash.
+
+
+ ERL_NIF_INTERNAL_HASH
+ -
+
Non-portable hash function that gives different hashes for the same Erlang
+ term depending on machine architecture and ERTS version.
+ Generated hash values within 0..2^32-1.
+
+ ERL_NIF_PHASH2
+ -
+
Portable hash function that gives the same hash for the same Erlang term
+ regardless of machine architecture and ERTS version. Corresponds to
+ erlang:phash2/1.
+ Slower than ERL_NIF_INTERNAL_HASH.
+ Generated hash values within 0..2^27-1.
+
+
+
@@ -1386,6 +1408,19 @@ typedef enum {
+
+
+ unsigned long
+ enif_hash(ErlNifHash type, ERL_NIF_TERM term)
+
+ Hash terms.
+
+ Hash terms according to the specified
+ ErlNifHash type.
+ Range of returned value depends on the hash type.
+
+
+
intenif_inspect_binary(ErlNifEnv* env,
ERL_NIF_TERM bin_term, ErlNifBinary* bin)
@@ -2369,20 +2404,6 @@ enif_map_iterator_destroy(env, &iter);
-
-
- unsigned long
- enif_phash2(ERL_NIF_TERM term)
-
- Portable hash function.
-
- Portable hash function that gives the same hash for the same Erlang term
- regardless of machine architecture and ERTS version. Corresponds to
- erlang:phash2/1.
- Returns an unsigned integer within 0..2^27-1.
-
-
-
intenif_port_command(ErlNifEnv* env, const
ErlNifPort* to_port, ErlNifEnv *msg_env, ERL_NIF_TERM msg)
--
cgit v1.2.3
From 21e1d879faaae2278a68200fe1085d7e73791fa0 Mon Sep 17 00:00:00 2001
From: Guilherme Andrade
Date: Sat, 22 Apr 2017 17:22:32 +0100
Subject: erts: Support custom salt in enif_hash
---
erts/doc/src/erl_nif.xml | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
(limited to 'erts/doc/src/erl_nif.xml')
diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml
index 53b6fdeaa1..03c96dd3ca 100644
--- a/erts/doc/src/erl_nif.xml
+++ b/erts/doc/src/erl_nif.xml
@@ -827,11 +827,13 @@ typedef enum {
ERL_NIF_PHASH2
-
-
Portable hash function that gives the same hash for the same Erlang term
- regardless of machine architecture and ERTS version. Corresponds to
- erlang:phash2/1.
- Slower than ERL_NIF_INTERNAL_HASH.
+ Portable hash function that gives the same hash for the
+ same Erlang term regardless of machine architecture and ERTS version.
Generated hash values within 0..2^27-1.
+ Slower than ERL_NIF_INTERNAL_HASH.
+ When used with salt=0,
+ it corresponds to
+ erlang:phash2/1.
@@ -1411,12 +1413,15 @@ typedef enum {
unsigned long
- enif_hash(ErlNifHash type, ERL_NIF_TERM term)
+
+ enif_hash(ErlNifHash type, ERL_NIF_TERM term, unsigned long salt)
+
Hash terms.
- Hash terms according to the specified
- ErlNifHash type.
+ Hash term according to the specified
+ ErlNifHash type
+ and using the least significant 32 bits of salt.
Range of returned value depends on the hash type.
--
cgit v1.2.3
From d810cd2b1ce642703d4986ba26ba50fd7949fcab Mon Sep 17 00:00:00 2001
From: Guilherme Andrade
Date: Sat, 22 Apr 2017 18:46:16 +0100
Subject: erts: Improve enif_hash documentation
---
erts/doc/src/erl_nif.xml | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
(limited to 'erts/doc/src/erl_nif.xml')
diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml
index 03c96dd3ca..5faf1a05fc 100644
--- a/erts/doc/src/erl_nif.xml
+++ b/erts/doc/src/erl_nif.xml
@@ -821,8 +821,8 @@ typedef enum {
ERL_NIF_INTERNAL_HASH
-
-
Non-portable hash function that gives different hashes for the same Erlang
- term depending on machine architecture and ERTS version.
+ Non-portable hash function that only guarantees the same hash
+ for the same term within one Erlang VM instance.
Generated hash values within 0..2^32-1.
ERL_NIF_PHASH2
@@ -831,8 +831,7 @@ typedef enum {
same Erlang term regardless of machine architecture and ERTS version.
Generated hash values within 0..2^27-1.
Slower than ERL_NIF_INTERNAL_HASH.
- When used with salt=0,
- it corresponds to
+ When used with salt=0, it corresponds to
erlang:phash2/1.
--
cgit v1.2.3
From da9abd24a93ae8fe174cdd38fc9699bbc45fdf56 Mon Sep 17 00:00:00 2001
From: Guilherme Andrade
Date: Sat, 22 Apr 2017 20:00:28 +0100
Subject: erts: Allow for easier future enif_hash expansion
Allow for expanding support to 64-bit hashes without breaking the
interface.
---
erts/doc/src/erl_nif.xml | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
(limited to 'erts/doc/src/erl_nif.xml')
diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml
index 5faf1a05fc..534c90cbdc 100644
--- a/erts/doc/src/erl_nif.xml
+++ b/erts/doc/src/erl_nif.xml
@@ -823,13 +823,13 @@ typedef enum {
-
Non-portable hash function that only guarantees the same hash
for the same term within one Erlang VM instance.
- Generated hash values within 0..2^32-1.
+ It takes 32-bit salt values and generates hashes within 0..2^32-1.
ERL_NIF_PHASH2
-
Portable hash function that gives the same hash for the
same Erlang term regardless of machine architecture and ERTS version.
- Generated hash values within 0..2^27-1.
+ It takes 32-bit salt values and generates hashes within 0..2^27-1.
Slower than ERL_NIF_INTERNAL_HASH.
When used with salt=0, it corresponds to
erlang:phash2/1.
@@ -1411,17 +1411,14 @@ typedef enum {
- unsigned long
-
- enif_hash(ErlNifHash type, ERL_NIF_TERM term, unsigned long salt)
-
+ ErlNifUInt64
+ enif_hash(ErlNifHash type, ERL_NIF_TERM term, ErlNifUInt64 salt)
Hash terms.
- Hash term according to the specified
- ErlNifHash type
- and using the least significant 32 bits of salt.
- Range of returned value depends on the hash type.
+ Hashes term according to the specified
+ ErlNifHash type.
+ Ranges of taken salt and returned value depend on the hash type.
--
cgit v1.2.3
From 3d6b8e7fb68543713f1620a45b8a590ef4ed88a5 Mon Sep 17 00:00:00 2001
From: Guilherme Andrade
Date: Mon, 24 Apr 2017 22:51:49 +0100
Subject: erts: Discontinue salted use of enif_hash/phash2
---
erts/doc/src/erl_nif.xml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
(limited to 'erts/doc/src/erl_nif.xml')
diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml
index 534c90cbdc..05b519fe7d 100644
--- a/erts/doc/src/erl_nif.xml
+++ b/erts/doc/src/erl_nif.xml
@@ -829,10 +829,10 @@ typedef enum {
-
Portable hash function that gives the same hash for the
same Erlang term regardless of machine architecture and ERTS version.
- It takes 32-bit salt values and generates hashes within 0..2^27-1.
+ It ignores salt values and generates hashes within 0..2^27-1.
Slower than ERL_NIF_INTERNAL_HASH.
- When used with salt=0, it corresponds to
- erlang:phash2/1.
+ It corresponds to erlang:phash2/1.
+
@@ -1418,7 +1418,7 @@ typedef enum {
Hashes term according to the specified
ErlNifHash type.
- Ranges of taken salt and returned value depend on the hash type.
+ Ranges of taken salt (if any) and returned value depend on the hash type.
--
cgit v1.2.3