| 138 | |
| 139 | |
| 140 | static HORNER *horner_alloc (size_t order, int complex_polynomia) { |
| 141 | /* size_t is unsigned, so we need not check for order > 0 */ |
| 142 | int n = (int)horner_number_of_coefficients(order); |
| 143 | int polynomia_ok = 0; |
| 144 | HORNER *h = static_cast<HORNER*>(horner_calloc (1, sizeof (HORNER))); |
| 145 | |
| 146 | if (nullptr==h) |
| 147 | return nullptr; |
| 148 | |
| 149 | if (complex_polynomia) |
| 150 | n = 2*(int)order + 2; |
| 151 | h->order = (int)order; |
| 152 | h->coefs = n; |
| 153 | |
| 154 | if (complex_polynomia) { |
| 155 | h->fwd_c = static_cast<double*>(horner_calloc (n, sizeof(double))); |
| 156 | h->inv_c = static_cast<double*>(horner_calloc (n, sizeof(double))); |
| 157 | if (h->fwd_c && h->inv_c) |
| 158 | polynomia_ok = 1; |
| 159 | } |
| 160 | else { |
| 161 | h->fwd_u = static_cast<double*>(horner_calloc (n, sizeof(double))); |
| 162 | h->fwd_v = static_cast<double*>(horner_calloc (n, sizeof(double))); |
| 163 | h->inv_u = static_cast<double*>(horner_calloc (n, sizeof(double))); |
| 164 | h->inv_v = static_cast<double*>(horner_calloc (n, sizeof(double))); |
| 165 | if (h->fwd_u && h->fwd_v && h->inv_u && h->inv_v) |
| 166 | polynomia_ok = 1; |
| 167 | } |
| 168 | |
| 169 | h->fwd_origin = static_cast<PJ_UV*>(horner_calloc (1, sizeof(PJ_UV))); |
| 170 | h->inv_origin = static_cast<PJ_UV*>(horner_calloc (1, sizeof(PJ_UV))); |
| 171 | |
| 172 | if (polynomia_ok && h->fwd_origin && h->inv_origin) |
| 173 | return h; |
| 174 | |
| 175 | /* safe, since all pointers are null-initialized (by calloc) */ |
| 176 | horner_free (h); |
| 177 | return nullptr; |
| 178 | } |
| 179 | |
| 180 | |
| 181 |
no test coverage detected