source: soft/giet_vm/applications/rosenfeld/src/ecc_common.c @ 772

Last change on this file since 772 was 772, checked in by meunier, 8 years ago
  • Ajout de l'application rosenfeld
  • Changement du nom du flag O_CREATE en O_CREAT
File size: 13.2 KB
Line 
1/* -------------------- */
2/* --- ecc_common.c --- */
3/* -------------------- */
4
5#include <stdio.h>
6#include <stdlib.h>
7#include <math.h>
8
9
10#ifdef CLI
11#include "nrc_os_config.h"
12#include "nrc.h"
13#endif
14
15#include "ecc_common.h"
16#include "mt19937.h"
17
18#ifdef ENABLE_GLOBAL_DEBUG
19// variables globales externes pour log de configurations particulieres
20int g_density;
21int g_granularity;
22int g_iter;
23int g_i;
24int g_j;
25
26int g_p;
27uint32 g_ne;
28uint32 g_ne_start;
29uint32 g_ne_end; 
30#endif
31
32
33// --------------------------------
34uint32 ui32Max2(uint32 a, uint32 b)
35// --------------------------------
36{
37    return (a > b ? a : b);
38}
39// ------------------------------------------
40uint32 ui32Max3(uint32 a, uint32 b, uint32 c)
41// ------------------------------------------
42{
43    return ui32Max2(ui32Max2(a, b), c);
44}
45// ----------------------------------------------------
46uint32 ui32Max4(uint32 a, uint32 b, uint32 c, uint32 d)
47// ----------------------------------------------------
48{
49    return ui32Max2(ui32Max2(a, b), ui32Max2(c,d));
50}
51// --------------------------------
52uint32 ui32Min2(uint32 a, uint32 b)
53// --------------------------------
54{
55    return (a < b ? a : b);
56}
57// ------------------------------------------
58uint32 ui32Min3(uint32 a, uint32 b, uint32 c)
59// ------------------------------------------
60{
61    return ui32Min2(ui32Min2(a, b), c);
62}
63// ----------------------------------------------------
64uint32 ui32Min4(uint32 a, uint32 b, uint32 c, uint32 d)
65// ----------------------------------------------------
66{
67    return ui32Min2(ui32Min2(a, b), ui32Min2(c,d));
68}
69/* ----------------------------------- */
70uint32 ui32MinNonNul2(uint32 a, uint32 b)
71/* ----------------------------------- */
72{
73    if (a && b)
74        return (a < b ? a : b);
75    if (a == 0)
76        return b;
77    return a;
78}
79/* --------------------------------------------- */
80uint32 ui32MinNonNul3(uint32 a, uint32 b, uint32 c)
81/* --------------------------------------------- */
82{
83    uint32 m = 0xffffffff;
84   
85    if (a) m = a;
86    if (b && (b<m)) m = b;
87    if (c && (c<m)) m = c;
88   
89    return m;
90}
91/* ---------------------------------------------------- */
92uint32 ui32MinNonNul3Cond(uint32 a0, uint32 a1, uint32 a2)
93/* ---------------------------------------------------- */
94{
95    uint32 m = 0;
96   
97    if (a1) m = ui32MinNonNul3(a0, a1, a2);
98    return m;
99}
100/* ----------------------------------------------------------- */
101uint32 ui32MinNonNul4(uint32 a0, uint32 a1, uint32 a2, uint32 a3)
102/* ----------------------------------------------------------- */
103{
104    uint32 m = 0xffffffff;
105   
106    if (a0) m = a0;
107    if (a1 && (a1<m)) m = a1;
108    if (a2 && (a2<m)) m = a2;
109    if (a3 && (a3<m)) m = a3;
110
111    return m;
112}
113/* ---------------------------------------------------------------------- */
114uint32 ui32MinNonNul5(uint32 a0, uint32 a1, uint32 a2, uint32 a3, uint32 a4)
115/* ---------------------------------------------------------------------- */
116{
117    uint32 m = 0xffffffff;
118   
119    if (a0) m = a0;
120    if (a1 && (a1<m)) m = a1;
121    if (a2 && (a2<m)) m = a2;
122    if (a3 && (a3<m)) m = a3;
123    if (a4 && (a4<m)) m = a4;
124
125    return m;
126}
127/* -------------------------------------------------------------------------- */
128uint32 ui32MinNonNul5Cond(uint32 a0, uint32 a1, uint32 a2, uint32 a3, uint32 a4)
129/* -------------------------------------------------------------------------- */
130{
131    uint32 m = 0;
132   
133    if (a2) m = ui32MinNonNul5(a0, a1, a2, a3, a4);
134    return m;
135}
136/* ------------------------------------------------------------------------------------------------------- */
137uint32 ui32MinNonNul8(uint32 a0, uint32 a1, uint32 a2, uint32 a3, uint32 a4, uint32 a5, uint32 a6, uint32 a7)
138/* ------------------------------------------------------------------------------------------------------- */
139{
140    uint32 m = 0xffffffff;
141   
142    if (a0) m = a0;
143    if (a1 && (a1<m)) m = a1;
144    if (a2 && (a2<m)) m = a2;
145    if (a3 && (a3<m)) m = a3;
146    if (a4 && (a4<m)) m = a4;
147    if (a5 && (a5<m)) m = a5;
148    if (a6 && (a6<m)) m = a6;
149    if (a7 && (a7<m)) m = a7;
150   
151    return m;
152}
153/* ------------------------------------------------------------------------------------------------------------------ */
154uint32 ui32MinNonNul9(uint32 a0, uint32 a1, uint32 a2, uint32 a3, uint32 a4, uint32 a5, uint32 a6, uint32 a7, uint32 a8)
155/* ------------------------------------------------------------------------------------------------------------------ */
156{
157    uint32 m = 0xffffffff;
158   
159    if (a0) m = a0;
160    if (a1 && (a1<m)) m = a1;
161    if (a2 && (a2<m)) m = a2;
162    if (a3 && (a3<m)) m = a3;
163    if (a4 && (a4<m)) m = a4;
164    if (a5 && (a5<m)) m = a5;
165    if (a6 && (a6<m)) m = a6;
166    if (a7 && (a7<m)) m = a7;
167    if (a8 && (a8<m)) m = a8;
168   
169    return m;
170}
171/* ---------------------------------------------------------------------------------------------------------------------- */
172uint32 ui32MinNonNul9Cond(uint32 a0, uint32 a1, uint32 a2, uint32 a3, uint32 a4, uint32 a5, uint32 a6, uint32 a7, uint32 a8)
173/* ---------------------------------------------------------------------------------------------------------------------- */
174{
175    // a0  b0  c0
176    // a1  b1  c1
177    // a2  b2  c2
178   
179    uint32 m = 0;
180   
181    if (a4) m = ui32MinNonNul9(a0, a1, a2, a3, a4, a5, a6, a7, a8);
182   
183    return m;
184}
185// --------------------------------
186void initT(uint32 *T, uint32 nemax)
187// --------------------------------
188{
189    int i;
190    for (i = 0; i <= (int) nemax; i++) {
191        T[i] = i;
192    }
193}
194/* -------------------------- */
195//void initA(uint32 *A, uint32 nemax)
196/* ------------------------------- */
197/*{
198    int i;
199    for(i=0; i<=nemax; i++) {
200        A[i] = 0;
201    }
202}*/
203// --------------------------------
204void initZ(uint32 *T, uint32 nemax)
205// --------------------------------
206{
207    int i;
208    for (i = 0; i <= (int) nemax; i++) {
209        T[i] = 0;
210    }
211}
212// --------------------------------------
213void check_initT(uint32 *T, uint32 nemax)
214// --------------------------------------
215{
216    check_initT_range(T, 0, nemax, nemax);
217}
218// --------------------------------------
219void check_initZ(uint32 *T, uint32 nemax)
220// --------------------------------------
221{
222    check_initZ_range(T, 0, nemax, nemax);
223}
224// ---------------------------------------------------------------
225void check_initT_range(uint32 *T, uint32 i0, uint32 ii, uint32 i1)
226// ---------------------------------------------------------------
227{
228    uint32 i;
229   
230    printf("check_initT_range[%d %d %d]\n", i0, ii, i1);
231   
232    for (i = i0; i <= i1; i++) {
233        if (T[i] != i) {
234            printf("[check_initT]: T[%d] = %d\n", i, T[i]);
235        }
236    }
237}
238// ---------------------------------------------------------------
239void check_initR_range(uint32 *R, uint32 i0, uint32 ii, uint32 i1)
240// ---------------------------------------------------------------
241{
242    uint32 i;
243   
244    printf("check_initR_range[%d %d %d]\n", i0, ii, i1);
245   
246    for (i = i0; i <= i1; i++) {
247        if (R[i] != i) {
248            printf("[check_initR]: R[%d] = %d\n", i, R[i]);
249        }
250    }
251}
252// ---------------------------------------------------------------
253void check_initZ_range(uint32 *T, uint32 i0, uint32 ii, uint32 i1)
254// ---------------------------------------------------------------
255{
256    uint32 i;
257   
258    printf("check_initZ_range[%d %d %d]\n", i0, ii, i1);
259   
260    for (i = i0; i <= i1; i++) {
261        if (T[i] != 0) {
262            printf("[check_initZ]: T[%d] = %d\n", i, T[i]);
263        }
264    }
265}
266/* --------------------------------------------------------------------------------------------------- */
267void binarisation_ui8matrix(uint8 **X, int i0, int i1, int j0, int j1, uint8 seuil, uint8 val, uint8 **Y)
268/* --------------------------------------------------------------------------------------------------- */
269{
270    int i, j;
271    uint8 x, y;
272
273    for (i = i0; i <= i1; i++) {
274        for (j = j0; j <= j1; j++) {
275            x = X[i][j];
276            if (x >= seuil)
277                y = val;
278            else
279                y = 0;
280            Y[i][j] = y;
281        }
282    }
283}
284
285/* ------------------------------------------------------------------- */
286void applyTable(uint32 **X, int height, int width, uint32 *T, uint32 **Y)
287/* ------------------------------------------------------------------- */
288{
289    int i, j;
290
291    uint32 e, a;
292
293   
294    for (i = 0; i < height; i++) {
295        for (j = 0; j < width; j++) {
296           
297            e = X[i][j];
298            a = T[e];
299           
300            Y[i][j] = a;
301        }
302    }
303}
304/* ------------------------------------------------------------------------------- */
305void graphviz_write_ui8vector(uint8 *v, int i0, int i1, char *format, char *filename)
306/* ------------------------------------------------------------------------------- */
307{
308    int i;
309    int fd;
310    char complete_filename[64];
311   
312    sprintf(complete_filename, "%s.dot", filename);
313   
314    fd = open(complete_filename, O_CREAT | O_TRUNC);
315    //if(f == NULL) { nrerror("Can't open file in grawrite_bvector"); }
316   
317    fprintf(fd, "digraph %s {\n", filename);
318    for (i = i0; i <= i1; i++) {
319        fprintf(fd, "%3d -> %3d;\n", i, v[i]);
320    }
321    fprintf(fd, "}\n");
322    close(fd);
323}
324/* --------------------------------------------------------------------------------- */
325void graphviz_write_ui16vector(uint16 *v, int i0, int i1, char *format, char *filename)
326/* --------------------------------------------------------------------------------- */
327{
328    int i;
329    int fd;
330    char complete_filename[64];
331   
332    sprintf(complete_filename, "%s.dot", filename);
333   
334   
335    fd = open(complete_filename, O_CREAT | O_TRUNC);
336    //if(f == NULL) { nrerror("Can't open file in grawrite_bvector"); }
337   
338    fprintf(fd, "digraph %s {\n", filename);
339    for (i = i0; i <= i1; i++) {
340        fprintf(fd, "%3d -> %3d;\n", i, v[i]);
341    }
342    fprintf(fd, "}\n");
343    close(fd);
344}
345/* --------------------------------------------------------------------------------- */
346void graphviz_write_ui32vector(uint32 *v, int i0, int i1, char *format, char *filename)
347/* --------------------------------------------------------------------------------- */
348{
349    int i;
350    int fd;
351    char complete_filename[64];
352   
353    sprintf(complete_filename, "%s.dot", filename);
354   
355   
356    fd = open(complete_filename, O_CREAT | O_TRUNC);
357    //if(f == NULL) { nrerror("Can't open file in grawrite_bvector"); }
358   
359    fprintf(fd, "digraph %s {\n", filename);
360    for (i = i0; i <= i1; i++) {
361        fprintf(fd, "%3d -> %3d;\n", i, v[i]);
362    }
363    fprintf(fd, "}\n");
364    close(fd);
365}
366/* ------------------------------------------------------------------------------ */
367void mod_ui32matrix_ui8matrix(uint32 **X, int i0, int i1, int j0, int j1, uint8 **Y)
368/* ------------------------------------------------------------------------------ */
369{
370    int i, j;
371    for (i = i0; i <= i1; i++) {
372        for (j = j0; j <= j1; j++) {
373            Y[i][j] = X[i][j] & 255;
374        }
375    }
376}
377// ------------------------------------------------------------------------------------------
378void positive_mod_ui32matrix_ui8matrix(uint32 **X, int i0, int i1, int j0, int j1, uint8 **Y)
379// ------------------------------------------------------------------------------------------
380{
381    int i, j;
382    for (i = i0; i <= i1; i++) {
383        for (j = j0; j <= j1; j++) {
384            if (X[i][j]) {
385                if (X[i][j] < 255) {
386                    Y[i][j] = X[i][j]; // pour que e=1 reste rouge
387                } else {
388                    Y[i][j] = (X[i][j] % 254) + 1;
389                }
390            } else {
391                Y[i][j] = 0;
392            }
393           
394        }
395    }
396}
397/* --------------------------------------------------------------------------------- */
398void graphviz_write_ui32vector_par(uint32 *v, int i0, int i1, char *format, char *filename)
399/* --------------------------------------------------------------------------------- */
400{
401    int i;
402    int fd;
403    char complete_filename[64];
404   
405    sprintf(complete_filename, "%s.dot", filename);
406   
407   
408    fd = open(complete_filename, O_CREAT | O_TRUNC);
409    //if(f == NULL) { nrerror("Can't open file in grawrite_bvector"); }
410   
411    fprintf(fd, "digraph %s {\n", filename);
412    for (i = i0; i <= i1; i++) {
413        fprintf(fd, "%3d -> %3d;\n", i, v[i]);
414    }
415    fprintf(fd, "}\n");
416    close(fd);
417}
418// --------------------------------------
419uint32 mt19937_uint32(uint32 a, uint32 b)
420// --------------------------------------
421// nombre aleatoire 32 bit sur [a..b]
422{
423    uint32 d;
424    uint32 x32;
425
426    if (b < a) return mt19937_uint32(b, a);
427   
428    //printf("a = %u b = %u\n", a, b);
429   
430    d = b - a + 1;
431    x32 = genrand_int32();
432    //printf("x32 = %u, d = %u\n", x32, d);
433    x32 = (x32 % d) + a;
434    return x32;
435}
436// -----------------------
437BOOL strto_Bool(char *str)
438// -----------------------
439{
440    BOOL b = TRUE;
441    if (strcmp(str, "TRUE" ) == 0) b = TRUE;
442    if (strcmp(str, "true" ) == 0) b = TRUE;
443   
444    if (strcmp(str, "FALSE") == 0) b = FALSE;
445    if (strcmp(str, "false") == 0) b = FALSE;
446   
447    return b;
448}
449// ------------------------------------------------------------
450void check_no_write(uint32 **T, int i0, int i1, int j0, int j1)
451// ------------------------------------------------------------
452{
453    int i, j;
454    for (i = i0; i <= i1; i++) {
455        for (j = j0; j <= j1; j++) {
456            if (T[i][j] == 0xDEADBEFF) {
457                printf("[check_no_write]: T[%d][%d] = %d\n", i, j, T[i][j]);
458            }
459        }
460    }
461}
Note: See TracBrowser for help on using the repository browser.