source: soft/giet_vm/applications/rosenfeld/nrc2/src/nrset2.c

Last change on this file was 826, checked in by meunier, 7 years ago
  • Mise à jour NR2 et Rosenfeld
File size: 8.7 KB
Line 
1/* ---------------- */
2/* --- nrset2.c --- */
3/* ---------------- */
4
5/*
6 * Copyright (c) 2000-2014, Lionel Lacassagne, All rights reserved
7 * Univ Paris Sud XI, CNRS
8 *
9 * Distributed under the Boost Software License, Version 1.0
10 * see accompanying file LICENSE.txt or copy it at
11 * http://www.boost.org/LICENSE_1_0.txt
12 */
13
14
15#include <stdio.h>
16#include <stddef.h>
17#include <stdlib.h>
18
19#include "mypredef.h"
20#include "nrtype.h"
21#include "nrdef.h"
22#include "nrmacro.h"
23#include "nrkernel.h"
24
25#include "nrset1.h"
26#include "nrset2.h"
27
28/*
29 * ------------
30 * --- Zero ---
31 * ------------
32 */
33
34
35#undef zero_type_matrix
36#define zero_type_matrix(t) \
37void short_name(t,zero_,matrix)(t ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1) \
38{                                                 \
39    for (int32_t i = i0; i <= i1; i++) {          \
40        short_name(t,zero_,vector)(m[i], j0, j1); \
41    }                                             \
42}
43
44zero_type_matrix(int8_t);
45zero_type_matrix(uint8_t);
46zero_type_matrix(int16_t);
47zero_type_matrix(uint16_t);
48zero_type_matrix(int32_t);
49zero_type_matrix(uint32_t);
50zero_type_matrix(int64_t);
51zero_type_matrix(uint64_t);
52zero_type_matrix(float);
53zero_type_matrix(double);
54zero_type_matrix(rgb8);
55zero_type_matrix(rgbx8);
56
57/*
58 * ------------------
59 * --- set_matrix ---
60 * ------------------
61 */
62
63#undef set_type_matrix
64#define set_type_matrix(t) \
65void short_name(t,set_,matrix)(t ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1, t x) \
66{                                                    \
67    for (int32_t i = i0; i <= i1; i++) {             \
68        short_name(t,set_,vector)(m[i], j0, j1, x);  \
69    }                                                \
70}
71
72set_type_matrix(int8_t);
73set_type_matrix(uint8_t);
74set_type_matrix(int16_t);
75set_type_matrix(uint16_t);
76set_type_matrix(int32_t);
77set_type_matrix(uint32_t);
78set_type_matrix(int64_t);
79set_type_matrix(uint64_t);
80set_type_matrix(float);
81set_type_matrix(double);
82set_type_matrix(rgb8);
83set_type_matrix(rgbx8);
84
85
86
87/*
88 * ----------------
89 * set_matrix_param
90 * ----------------
91 */
92
93#undef set_type_matrix_param
94#define set_type_matrix_param(t) \
95void short_name(t,set_,matrix_param)(t ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1, t x, t xstep, t ystep) \
96{                                                                \
97    for (int32_t i = i0; i <= i1; i++) {                         \
98        short_name(t,set_,vector_param)(m[i], j0, j1, x, xstep); \
99        x += ystep;                                              \
100    }                                                            \
101}
102
103set_type_matrix_param(int8_t);
104set_type_matrix_param(uint8_t);
105set_type_matrix_param(int16_t);
106set_type_matrix_param(uint16_t);
107set_type_matrix_param(int32_t);
108set_type_matrix_param(uint32_t);
109set_type_matrix_param(int64_t);
110set_type_matrix_param(uint64_t);
111set_type_matrix_param(float);
112set_type_matrix_param(double);
113
114
115void set_rgb8matrix_param(rgb8 ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1, rgb8 x, rgb8 xstep, rgb8 ystep)
116{
117    for (int32_t i = i0; i <= i1; i++) {
118        set_rgb8vector_param(m[i], j0, j1, x, xstep);
119        x.r += ystep.r;
120        x.g += ystep.g;
121        x.b += ystep.b;
122    }
123}
124
125void set_rgbx8matrix_param(rgbx8 ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1, rgbx8 x, rgbx8 xstep, rgbx8 ystep)
126{
127    x.x = 0;
128    for (int32_t i = i0; i <= i1; i++) {
129        set_rgbx8vector_param(m[i], j0, j1, x, xstep);
130        x.r += ystep.r;
131        x.g += ystep.g;
132        x.b += ystep.b;
133        x.x += ystep.x;
134    }
135}
136
137
138/*
139 * --------------------
140 * --- set_matrix_i ---
141 * --------------------
142 */
143
144#undef set_type_matrix_i
145#define set_type_matrix_i(t) \
146void short_name(t,set_,matrix_i)(t ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1) \
147{                                                                 \
148    short_name(t,set_,matrix_param)(m, i0, i1, j0, j1, i0, 0, 1); \
149}
150
151set_type_matrix_i(int8_t);
152set_type_matrix_i(uint8_t);
153set_type_matrix_i(int16_t);
154set_type_matrix_i(uint16_t);
155set_type_matrix_i(int32_t);
156set_type_matrix_i(uint32_t);
157set_type_matrix_i(int64_t);
158set_type_matrix_i(uint64_t);
159set_type_matrix_i(float);
160set_type_matrix_i(double);
161
162
163void set_rgb8matrix_i(rgb8 ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1)
164{
165    rgb8 x0;
166    rgb8 xstep;
167    rgb8 ystep;
168
169    x0.r    = x0.g    = x0.b    = i0;
170    xstep.r = xstep.g = xstep.b = 0;
171    ystep.r = ystep.g = ystep.b = 1;
172
173    set_rgb8matrix_param(m, i0, i1, j0, j1, x0, xstep, ystep);
174}
175
176
177void set_rgbx8matrix_i(rgbx8 ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1)
178{
179    rgbx8 x;
180    rgbx8 xstep;
181    rgbx8 ystep;
182
183    x.r     = x.g     = x.b     = i0;
184    x.x     = 255;
185    xstep.r = xstep.g = xstep.b = 0;
186    xstep.x = 255;
187    ystep.r = ystep.g = ystep.b = 1;
188    ystep.x = 255;
189
190    set_rgbx8matrix_param(m, i0, i1, j0, j1, x, xstep, ystep);
191}
192
193
194/*
195 * --------------------
196 * --- set_matrix_j ---
197 * --------------------
198 */
199
200#undef set_type_matrix_j
201#define set_type_matrix_j(t) \
202void short_name(t,set_,matrix_j)(t ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1) \
203{                                                                 \
204    short_name(t,set_,matrix_param)(m, i0, i1, j0, j1, j0, 1, 0); \
205}
206
207set_type_matrix_j(int8_t);
208set_type_matrix_j(uint8_t);
209set_type_matrix_j(int16_t);
210set_type_matrix_j(uint16_t);
211set_type_matrix_j(int32_t);
212set_type_matrix_j(uint32_t);
213set_type_matrix_j(int64_t);
214set_type_matrix_j(uint64_t);
215set_type_matrix_j(float);
216set_type_matrix_j(double);
217
218
219
220void set_rgb8matrix_j(rgb8 ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1)
221{
222    rgb8 x;
223    rgb8 xstep;
224    rgb8 ystep;
225
226    x.r     = x.g     = x.b     = j0;
227    xstep.r = xstep.g = xstep.b = 1;
228    ystep.r = ystep.g = ystep.b = 0;
229
230    set_rgb8matrix_param(m, i0, i1, j0, j1, x, xstep, ystep);
231}
232
233void set_rgbx8matrix_j(rgbx8 ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1)
234{
235    rgbx8 x, xstep, ystep;
236
237    x.r     = x.g     = x.b     = j0;
238    x.x     = 255;
239    xstep.r = xstep.g = xstep.b = 1;
240    xstep.x = 255;
241    ystep.r = ystep.g = ystep.b = 0;
242    ystep.x = 255;
243
244    set_rgbx8matrix_param(m, i0, i1, j0, j1, x, xstep, ystep);
245}
246
247/*
248 * --------------
249 * --- autres ---
250 * --------------
251 */
252
253#undef set_type_matrix_border1
254#define set_type_matrix_border1(t) \
255void short_name(t,set_,matrix_border1)(t ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1, t x) \
256{                                                \
257    short_name(t,set_,vector)(m[i0], j0, j1, x); \
258    for (int32_t i = i0 + 1; i <= i1 - 1; i++) { \
259        m[i][j0] = x;                            \
260        m[i][j1] = x;                            \
261    }                                            \
262    short_name(t,set_,vector)(m[i0], j0, j1, x); \
263}
264
265
266set_type_matrix_border1(int8_t);
267set_type_matrix_border1(uint8_t);
268set_type_matrix_border1(int16_t);
269set_type_matrix_border1(uint16_t);
270set_type_matrix_border1(int32_t);
271set_type_matrix_border1(uint32_t);
272set_type_matrix_border1(int64_t);
273set_type_matrix_border1(uint64_t);
274set_type_matrix_border1(float);
275set_type_matrix_border1(double);
276
277
278#undef set_type_matrix_border
279#define set_type_matrix_border(t) \
280void short_name(t,set_,matrix_border)(t ** m, int32_t i0, int32_t i1, int32_t j0, int32_t j1, int32_t n, t x) \
281{                                                \
282    t * Xi = NULL;                               \
283    for (int32_t i = i0; i < i0 + n; i++) {      \
284        Xi = m[i];                               \
285        for (int32_t j = j0; j <= j1; j++) {     \
286            Xi[j] = x;                           \
287        }                                        \
288    }                                            \
289    for (int32_t i = i0 + n; i < i1; i++) {      \
290        Xi = m[i];                               \
291        for (int32_t j = 0; j < n; j++) {        \
292            Xi[j0 + j] = x;                      \
293            Xi[j1 - j] = x;                      \
294        }                                        \
295    }                                            \
296    for (int32_t i = i1 - n + 1; i <= i1; i++) { \
297        Xi = m[i];                               \
298        for (int32_t j = j0; j <= j1; j++) {     \
299            Xi[j] = x;                           \
300        }                                        \
301    }                                            \
302}
303
304
305set_type_matrix_border(int8_t);
306set_type_matrix_border(uint8_t);
307set_type_matrix_border(int16_t);
308set_type_matrix_border(uint16_t);
309set_type_matrix_border(int32_t);
310set_type_matrix_border(uint32_t);
311set_type_matrix_border(int64_t);
312set_type_matrix_border(uint64_t);
313set_type_matrix_border(float);
314set_type_matrix_border(double);
315
316
317// Local Variables:
318// tab-width: 4
319// c-basic-offset: 4
320// c-file-offsets:((innamespace . 0)(inline-open . 0))
321// indent-tabs-mode: nil
322// End:
323
324// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
325
Note: See TracBrowser for help on using the repository browser.