1 #include "ltfat.h"
2 #include "ltfat/macros.h"
3
4 LTFAT_API fbreassOptOut*
fbreassOptOut_init(ltfat_int l,ltfat_int inital)5 fbreassOptOut_init(ltfat_int l, ltfat_int inital)
6 {
7 fbreassOptOut* ret = (fbreassOptOut*) ltfat_calloc( 1, sizeof * ret);
8 ret->l = l;
9 // This is an array of pointers.
10 ret->repos = (ltfat_int**) ltfat_malloc(l * sizeof * ret->repos);
11 ret->reposl = (ltfat_int*) ltfat_calloc(l , sizeof * ret->reposl);
12 ret->reposlmax = (ltfat_int*) ltfat_malloc(l * sizeof * ret->reposlmax);
13 ltfat_int inital2 = ltfat_imax(1, inital);
14 for (ltfat_int ii = 0; ii < l; ii++)
15 {
16 ret->repos[ii] = (ltfat_int*) ltfat_malloc( inital2 * sizeof * ret->repos[ii]);
17 ret->reposlmax[ii] = inital2;
18 }
19
20 return ret;
21 }
22
23 LTFAT_API void
fbreassOptOut_destroy(fbreassOptOut * oo)24 fbreassOptOut_destroy(fbreassOptOut* oo)
25 {
26
27 for (ltfat_int ii = 0; ii < oo->l; ii++)
28 {
29 if (oo->repos[ii] && oo->reposlmax[ii] > 0)
30 {
31 ltfat_free(oo->repos[ii]);
32 }
33 }
34
35 LTFAT_SAFEFREEALL(oo->repos, oo->reposl, oo->reposlmax, oo);
36 oo = NULL;
37 }
38
39 LTFAT_API void
fbreassOptOut_expand(fbreassOptOut * oo,ltfat_int ii)40 fbreassOptOut_expand(fbreassOptOut* oo, ltfat_int ii)
41 {
42 ltfat_int explmax = (ltfat_int) (fbreassOptOut_EXPANDRAT * oo->reposlmax[ii]);
43 oo->repos[ii] = (ltfat_int*) ltfat_realloc( (void*) oo->repos[ii],
44 oo->reposlmax[ii] * sizeof * oo->repos[ii],
45 explmax * sizeof * oo->repos[ii]);
46 oo->reposlmax[ii] = explmax;
47 }
48