/* -------------------- */ /* --- ecc_common.c --- */ /* -------------------- */ #include #include #include #ifdef CLI #include "nrc_os_config.h" #include "nrc.h" #endif #include "ecc_common.h" #include "mt19937.h" #ifdef ENABLE_GLOBAL_DEBUG // variables globales externes pour log de configurations particulieres int g_density; int g_granularity; int g_iter; int g_i; int g_j; int g_p; uint32 g_ne; uint32 g_ne_start; uint32 g_ne_end; #endif // -------------------------------- uint32 ui32Max2(uint32 a, uint32 b) // -------------------------------- { return (a > b ? a : b); } // ------------------------------------------ uint32 ui32Max3(uint32 a, uint32 b, uint32 c) // ------------------------------------------ { return ui32Max2(ui32Max2(a, b), c); } // ---------------------------------------------------- uint32 ui32Max4(uint32 a, uint32 b, uint32 c, uint32 d) // ---------------------------------------------------- { return ui32Max2(ui32Max2(a, b), ui32Max2(c,d)); } // -------------------------------- uint32 ui32Min2(uint32 a, uint32 b) // -------------------------------- { return (a < b ? a : b); } // ------------------------------------------ uint32 ui32Min3(uint32 a, uint32 b, uint32 c) // ------------------------------------------ { return ui32Min2(ui32Min2(a, b), c); } // ---------------------------------------------------- uint32 ui32Min4(uint32 a, uint32 b, uint32 c, uint32 d) // ---------------------------------------------------- { return ui32Min2(ui32Min2(a, b), ui32Min2(c,d)); } /* ----------------------------------- */ uint32 ui32MinNonNul2(uint32 a, uint32 b) /* ----------------------------------- */ { if (a && b) return (a < b ? a : b); if (a == 0) return b; return a; } /* --------------------------------------------- */ uint32 ui32MinNonNul3(uint32 a, uint32 b, uint32 c) /* --------------------------------------------- */ { uint32 m = 0xffffffff; if (a) m = a; if (b && (b= seuil) y = val; else y = 0; Y[i][j] = y; } } } /* ------------------------------------------------------------------- */ void applyTable(uint32 **X, int height, int width, uint32 *T, uint32 **Y) /* ------------------------------------------------------------------- */ { int i, j; uint32 e, a; for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { e = X[i][j]; a = T[e]; Y[i][j] = a; } } } /* ------------------------------------------------------------------------------- */ void graphviz_write_ui8vector(uint8 *v, int i0, int i1, char *format, char *filename) /* ------------------------------------------------------------------------------- */ { int i; int fd; char complete_filename[64]; sprintf(complete_filename, "%s.dot", filename); fd = open(complete_filename, O_CREAT | O_TRUNC); //if(f == NULL) { nrerror("Can't open file in grawrite_bvector"); } fprintf(fd, "digraph %s {\n", filename); for (i = i0; i <= i1; i++) { fprintf(fd, "%3d -> %3d;\n", i, v[i]); } fprintf(fd, "}\n"); close(fd); } /* --------------------------------------------------------------------------------- */ void graphviz_write_ui16vector(uint16 *v, int i0, int i1, char *format, char *filename) /* --------------------------------------------------------------------------------- */ { int i; int fd; char complete_filename[64]; sprintf(complete_filename, "%s.dot", filename); fd = open(complete_filename, O_CREAT | O_TRUNC); //if(f == NULL) { nrerror("Can't open file in grawrite_bvector"); } fprintf(fd, "digraph %s {\n", filename); for (i = i0; i <= i1; i++) { fprintf(fd, "%3d -> %3d;\n", i, v[i]); } fprintf(fd, "}\n"); close(fd); } /* --------------------------------------------------------------------------------- */ void graphviz_write_ui32vector(uint32 *v, int i0, int i1, char *format, char *filename) /* --------------------------------------------------------------------------------- */ { int i; int fd; char complete_filename[64]; sprintf(complete_filename, "%s.dot", filename); fd = open(complete_filename, O_CREAT | O_TRUNC); //if(f == NULL) { nrerror("Can't open file in grawrite_bvector"); } fprintf(fd, "digraph %s {\n", filename); for (i = i0; i <= i1; i++) { fprintf(fd, "%3d -> %3d;\n", i, v[i]); } fprintf(fd, "}\n"); close(fd); } /* ------------------------------------------------------------------------------ */ void mod_ui32matrix_ui8matrix(uint32 **X, int i0, int i1, int j0, int j1, uint8 **Y) /* ------------------------------------------------------------------------------ */ { int i, j; for (i = i0; i <= i1; i++) { for (j = j0; j <= j1; j++) { Y[i][j] = X[i][j] & 255; } } } // ------------------------------------------------------------------------------------------ void positive_mod_ui32matrix_ui8matrix(uint32 **X, int i0, int i1, int j0, int j1, uint8 **Y) // ------------------------------------------------------------------------------------------ { int i, j; for (i = i0; i <= i1; i++) { for (j = j0; j <= j1; j++) { if (X[i][j]) { if (X[i][j] < 255) { Y[i][j] = X[i][j]; // pour que e=1 reste rouge } else { Y[i][j] = (X[i][j] % 254) + 1; } } else { Y[i][j] = 0; } } } } /* --------------------------------------------------------------------------------- */ void graphviz_write_ui32vector_par(uint32 *v, int i0, int i1, char *format, char *filename) /* --------------------------------------------------------------------------------- */ { int i; int fd; char complete_filename[64]; sprintf(complete_filename, "%s.dot", filename); fd = open(complete_filename, O_CREAT | O_TRUNC); //if(f == NULL) { nrerror("Can't open file in grawrite_bvector"); } fprintf(fd, "digraph %s {\n", filename); for (i = i0; i <= i1; i++) { fprintf(fd, "%3d -> %3d;\n", i, v[i]); } fprintf(fd, "}\n"); close(fd); } // -------------------------------------- uint32 mt19937_uint32(uint32 a, uint32 b) // -------------------------------------- // nombre aleatoire 32 bit sur [a..b] { uint32 d; uint32 x32; if (b < a) return mt19937_uint32(b, a); //printf("a = %u b = %u\n", a, b); d = b - a + 1; x32 = genrand_int32(); //printf("x32 = %u, d = %u\n", x32, d); x32 = (x32 % d) + a; return x32; } // ----------------------- BOOL strto_Bool(char *str) // ----------------------- { BOOL b = TRUE; if (strcmp(str, "TRUE" ) == 0) b = TRUE; if (strcmp(str, "true" ) == 0) b = TRUE; if (strcmp(str, "FALSE") == 0) b = FALSE; if (strcmp(str, "false") == 0) b = FALSE; return b; } // ------------------------------------------------------------ void check_no_write(uint32 **T, int i0, int i1, int j0, int j1) // ------------------------------------------------------------ { int i, j; for (i = i0; i <= i1; i++) { for (j = j0; j <= j1; j++) { if (T[i][j] == 0xDEADBEFF) { printf("[check_no_write]: T[%d][%d] = %d\n", i, j, T[i][j]); } } } }