star-uvm

Spatial structuring of unstructured volumetric meshes
git clone git://git.meso-star.fr/star-uvm.git
Log | Files | Refs | README | LICENSE

commit 3d276fabd3897ce587ed402e212d0b47a22d1045
parent 32d0e08281f6cf6e9789a57fcf785095787f9322
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed,  7 Sep 2022 09:39:05 +0200

Add the suvm_mesh_desc_compute_hash function

Diffstat:
Msrc/suvm.h | 5+++++
Msrc/suvm_volume.c | 24++++++++++++++++++++++++
Msrc/test_suvm_volume.c | 9+++++++++
3 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/src/suvm.h b/src/suvm.h @@ -246,6 +246,11 @@ suvm_volume_get_mesh_desc (const struct suvm_volume* volume, struct suvm_mesh_desc* desc); +SUVM_API res_T +suvm_mesh_desc_compute_hash + (const struct suvm_mesh_desc* desc, + hash256_T hash); + /******************************************************************************* * Primitive API ******************************************************************************/ diff --git a/src/suvm_volume.c b/src/suvm_volume.c @@ -716,3 +716,27 @@ exit: error: goto exit; } + +res_T +suvm_mesh_desc_compute_hash(const struct suvm_mesh_desc* desc, hash256_T hash) +{ + struct sha256_ctx ctx; + + if(!desc || !hash) return RES_BAD_ARG; + + #define HASH(Var, Nb) \ + sha256_ctx_update(&ctx, (const char*)(Var), sizeof(*Var)*(Nb)); + + sha256_ctx_init(&ctx); + HASH(desc->positions, desc->nvertices*desc->dvertex); + HASH(desc->indices, desc->nprimitives*desc->dprimitive); + HASH(&desc->nvertices, 1); + HASH(&desc->nprimitives, 1); + HASH(&desc->dvertex, 1); + HASH(&desc->dprimitive, 1); + sha256_ctx_finalize(&ctx, hash); + + #undef HASH + + return RES_OK; +} diff --git a/src/test_suvm_volume.c b/src/test_suvm_volume.c @@ -537,6 +537,15 @@ check_hash hash_sha256(NULL, 0, hash1); CHK(hash256_eq(hash0, hash1)); + msh_desc = SUVM_MESH_DESC_NULL; + CHK(suvm_mesh_desc_compute_hash(NULL, hash0) == RES_BAD_ARG); + CHK(suvm_mesh_desc_compute_hash(&msh_desc, NULL) == RES_BAD_ARG); + CHK(suvm_mesh_desc_compute_hash(&msh_desc, hash0) == RES_OK); + + CHK(suvm_volume_get_mesh_desc(vol, &msh_desc) == RES_OK); + CHK(suvm_mesh_desc_compute_hash(&msh_desc, hash1) == RES_OK); + CHK(!hash256_eq(hash0, hash1)); + /* Compute data size to hash */ sz_pos = msh->nvertices*sizeof(float[3]); sz_ids = msh->ntetrahedra*sizeof(uint32_t[4]);