On 13/03/17 05:32, Grazvydas Ignotas wrote:
This is useful when we need to compute many hashes which all have some
common data hashed in. It works by first hashing the common data and
keeping the context, then for each hashing operation clone the common
context and continue hashing from there.

Is this actually anymore performant? Can we have some numbers to go with it? Otherwise I'm not sure its worth the added complexity.



Signed-off-by: Grazvydas Ignotas <nota...@gmail.com>
---
 src/util/mesa-sha1.c | 13 +++++++++++++
 src/util/mesa-sha1.h |  3 +++
 2 files changed, 16 insertions(+)

diff --git a/src/util/mesa-sha1.c b/src/util/mesa-sha1.c
index e8f1bad..2c47465 100644
--- a/src/util/mesa-sha1.c
+++ b/src/util/mesa-sha1.c
@@ -24,6 +24,7 @@
  * DEALINGS IN THE SOFTWARE.
  */

+#include <string.h>
 #include "sha1/sha1.h"
 #include "mesa-sha1.h"

@@ -39,6 +40,18 @@ _mesa_sha1_init(void)
    return (struct mesa_sha1 *) ctx;
 }

+struct mesa_sha1 *
+_mesa_sha1_clone(const struct mesa_sha1 *ctx)
+{
+   SHA1_CTX *ctx_clone = malloc(sizeof(*ctx_clone));
+
+   if (!ctx_clone)
+      return NULL;
+
+   memcpy(ctx_clone, ctx, sizeof(*ctx_clone));
+   return (struct mesa_sha1 *) ctx_clone;
+}
+
 int
 _mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, int size)
 {
diff --git a/src/util/mesa-sha1.h b/src/util/mesa-sha1.h
index 0be5485..07ca71e 100644
--- a/src/util/mesa-sha1.h
+++ b/src/util/mesa-sha1.h
@@ -34,6 +34,9 @@ struct mesa_sha1;
 struct mesa_sha1 *
 _mesa_sha1_init(void);

+struct mesa_sha1 *
+_mesa_sha1_clone(const struct mesa_sha1 *ctx);
+
 int
 _mesa_sha1_update(struct mesa_sha1 *ctx, const void *data, int size);


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to