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