/* -------------------- */ /* --- ecc_common.c --- */ /* -------------------- */ #include #include #include #include #include "nrc_os_config.h" #include "nrc.h" #if TARGET_OS == LINUX #include #include #include #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; char complete_filename[64]; snprintf(complete_filename, 64, "%s.dot", filename); #if TARGET_OS == GIETVM int fd; fd = open(complete_filename, O_CREAT | O_TRUNC); 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); #elif TARGET_OS == LINUX FILE * f; f = fopen(complete_filename, "w"); if (f == NULL) { fprintf(stderr, "Can't open file %s in %s\n", complete_filename, __func__); } fprintf(f, "digraph %s {\n", filename); for (i = i0; i <= i1; i++) { fprintf(f, "%3d -> %3d;\n", i, v[i]); } fprintf(f, "}\n"); fclose(f); #endif } /* ------------------------------------------------------------------------------------ */ void graphviz_write_ui16vector(uint16 * v, int i0, int i1, char * format, char * filename) /* ------------------------------------------------------------------------------------ */ { int i; char complete_filename[64]; snprintf(complete_filename, 64, "%s.dot", filename); #if TARGET_OS == GIETVM int fd; fd = open(complete_filename, O_CREAT | O_TRUNC); 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); #elif TARGET_OS == LINUX FILE * f; f = fopen(complete_filename, "w"); if (f == NULL) { fprintf(stderr, "Can't open file %s in %s\n", complete_filename, __func__); } fprintf(f, "digraph %s {\n", filename); for (i = i0; i <= i1; i++) { fprintf(f, "%3d -> %3d;\n", i, v[i]); } fprintf(f, "}\n"); fclose(f); #endif } /* ------------------------------------------------------------------------------------ */ void graphviz_write_ui32vector(uint32 * v, int i0, int i1, char * format, char * filename) /* ------------------------------------------------------------------------------------ */ { int i; char complete_filename[64]; snprintf(complete_filename, 64, "%s.dot", filename); #if TARGET_OS == GIETVM int fd; fd = open(complete_filename, O_CREAT | O_TRUNC); 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); #elif TARGET_OS == LINUX FILE * f; f = fopen(complete_filename, "w"); if (f == NULL) { fprintf(stderr, "Can't open file %s in %s\n", complete_filename, __func__); } fprintf(f, "digraph %s {\n", filename); for (i = i0; i <= i1; i++) { fprintf(f, "%3d -> %3d;\n", i, v[i]); } fprintf(f, "}\n"); fclose(f); #endif } /* -------------------------------------------------------------------------------- */ 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; char complete_filename[64]; snprintf(complete_filename, 64, "%s.dot", filename); #if TARGET_OS == GIETVM int fd; fd = open(complete_filename, O_CREAT | O_TRUNC); 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); #else FILE * f; f = fopen(complete_filename, "w"); if (f == NULL) { fprintf(stderr, "Can't open file %s in %s\n", complete_filename, __func__); } fprintf(f, "digraph %s {\n", filename); for (i = i0; i <= i1; i++) { fprintf(f, "%3d -> %3d;\n", i, v[i]); } fprintf(f, "}\n"); fclose(f); #endif } // -------------------------------------- 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]); } } } }