00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 #include <string.h>
00067 #include "LALStdlib.h"
00068 #include "AVFactories.h"
00069
00070
00071 NRCSID( ARRAYFACTORIESC, "$Id: ArrayFactories.m4,v 1.5 2003/09/29 00:33:24 dwchin Exp $" );
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 COMPLEX16Array * XLALCreateCOMPLEX16ArrayL ( UINT4 ndim, ... )
00093 {
00094 enum { maxdim = 16 };
00095 va_list ap;
00096 COMPLEX16Array *arr;
00097 UINT4 dims[maxdim];
00098 UINT4 dim;
00099
00100 if ( ! ndim )
00101 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16ArrayL", XLAL_EBADLEN );
00102 if ( ndim > maxdim )
00103 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16ArrayL", XLAL_EINVAL );
00104
00105 va_start( ap, ndim );
00106 for ( dim = 0; dim < ndim; ++dim )
00107 dims[dim] = va_arg( ap, UINT4 );
00108 va_end( ap );
00109
00110 arr = XLALCreateCOMPLEX16ArrayV ( ndim, dims );
00111 if ( ! arr )
00112 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16ArrayL", XLAL_EFUNC );
00113 return arr;
00114 }
00115
00116 COMPLEX16Array * XLALCreateCOMPLEX16ArrayV ( UINT4 ndim, UINT4 *dims )
00117 {
00118 COMPLEX16Array *arr;
00119 UINT4Vector dimLength;
00120
00121 if ( ! ndim )
00122 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16ArrayV", XLAL_EBADLEN );
00123 if ( ! dims )
00124 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16ArrayV", XLAL_EFAULT );
00125
00126 dimLength.length = ndim;
00127 dimLength.data = dims;
00128
00129 arr = XLALCreateCOMPLEX16Array ( &dimLength );
00130 if ( ! arr )
00131 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16ArrayV", XLAL_EFUNC );
00132 return arr;
00133 }
00134
00135
00136 COMPLEX16Array * XLALCreateCOMPLEX16Array ( UINT4Vector *dimLength )
00137 {
00138 COMPLEX16Array *arr;
00139 UINT4 size = 1;
00140 UINT4 ndim;
00141 UINT4 dim;
00142
00143 if ( ! dimLength )
00144 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16Array", XLAL_EFAULT );
00145 if ( ! dimLength->length )
00146 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16Array", XLAL_EBADLEN );
00147 if ( ! dimLength->data )
00148 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16Array", XLAL_EINVAL );
00149
00150 ndim = dimLength->length;
00151 for ( dim = 0; dim < ndim; ++dim )
00152 size *= dimLength->data[dim];
00153
00154 if ( ! size )
00155 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16Array", XLAL_EBADLEN );
00156
00157
00158 arr = LALMalloc( sizeof( *arr ) );
00159 if ( ! arr )
00160 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16Array", XLAL_ENOMEM );
00161
00162
00163 arr->dimLength = XLALCreateUINT4Vector( ndim );
00164 if ( ! arr->dimLength )
00165 {
00166 LALFree( arr );
00167 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16Array", XLAL_EFUNC );
00168 }
00169
00170
00171 memcpy( arr->dimLength->data, dimLength->data,
00172 ndim * sizeof( *arr->dimLength->data ) );
00173
00174
00175 arr->data = LALMalloc( size * sizeof( *arr->data ) );
00176 if ( ! arr->data )
00177 {
00178 XLALDestroyUINT4Vector( arr->dimLength );
00179 LALFree( arr );
00180 XLAL_ERROR_NULL( "XLALCreateCOMPLEX16Array", XLAL_ENOMEM );
00181 }
00182
00183 return arr;
00184 }
00185
00186
00187
00188 void LALZCreateArray ( LALStatus *status, COMPLEX16Array **array, UINT4Vector *dimLength )
00189 {
00190 INITSTATUS (status, "LALZCreateArray", ARRAYFACTORIESC);
00191
00192
00193
00194 ASSERT (array, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00195 ASSERT (!*array, status, AVFACTORIESH_EUPTR, AVFACTORIESH_MSGEUPTR);
00196 ASSERT (dimLength, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00197 ASSERT (dimLength->data, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00198 ASSERT (dimLength->length, status,
00199 AVFACTORIESH_ELENGTH, AVFACTORIESH_MSGELENGTH);
00200
00201 *array = XLALCreateCOMPLEX16Array ( dimLength );
00202 if ( ! *array )
00203 {
00204 int code = xlalErrno & ~XLAL_EFUNC;
00205 XLALClearErrno();
00206 if ( code & XLAL_EFAULT )
00207 {
00208 ABORT (status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00209 }
00210 if ( code == XLAL_EBADLEN )
00211 {
00212 ABORT (status, AVFACTORIESH_ELENGTH, AVFACTORIESH_MSGELENGTH);
00213 }
00214 if ( code == XLAL_EINVAL )
00215 {
00216 ABORT (status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00217 }
00218 if ( code == XLAL_ENOMEM )
00219 {
00220 ABORT (status, AVFACTORIESH_EMALLOC, AVFACTORIESH_MSGEMALLOC);
00221 }
00222 }
00223
00224 RETURN (status);
00225 }
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249 COMPLEX16Array * XLALResizeCOMPLEX16ArrayL ( COMPLEX16Array *array, UINT4 ndim, ... )
00250 {
00251 enum { maxdim = 16 };
00252 va_list ap;
00253 UINT4 dims[maxdim];
00254 UINT4 dim;
00255
00256 if ( ! ndim )
00257 {
00258 XLALDestroyCOMPLEX16Array ( array );
00259 return NULL;
00260 }
00261 if ( ndim > maxdim )
00262 XLAL_ERROR_NULL( "XLALResizeCOMPLEX16ArrayL", XLAL_EINVAL );
00263
00264 va_start( ap, ndim );
00265 for ( dim = 0; dim < ndim; ++dim )
00266 dims[dim] = va_arg( ap, UINT4 );
00267 va_end( ap );
00268
00269 return XLALResizeCOMPLEX16ArrayV ( array, ndim, dims );
00270 }
00271
00272 COMPLEX16Array * XLALResizeCOMPLEX16ArrayV ( COMPLEX16Array *array, UINT4 ndim, UINT4 *dims )
00273 {
00274 UINT4Vector dimLength;
00275
00276 if ( ! ndim )
00277 {
00278 XLALDestroyCOMPLEX16Array ( array );
00279 return NULL;
00280 }
00281 if ( ! dims )
00282 XLAL_ERROR_NULL( "XLALResizeCOMPLEX16ArrayV", XLAL_EINVAL );
00283
00284 dimLength.length = ndim;
00285 dimLength.data = dims;
00286
00287 return XLALResizeCOMPLEX16Array ( array, &dimLength );
00288 }
00289
00290 COMPLEX16Array * XLALResizeCOMPLEX16Array ( COMPLEX16Array *array, UINT4Vector *dimLength )
00291 {
00292 UINT4 size = 1;
00293 UINT4 ndim;
00294 UINT4 dim;
00295
00296 if ( ! array )
00297 return XLALCreateCOMPLEX16Array ( dimLength );
00298 if ( ! dimLength )
00299 {
00300 XLALDestroyCOMPLEX16Array ( array );
00301 return NULL;
00302 }
00303 if ( ! dimLength->length )
00304 XLAL_ERROR_NULL( "XLALResizeCOMPLEX16Array", XLAL_EBADLEN );
00305 if ( ! dimLength->data )
00306 XLAL_ERROR_NULL( "XLALResizeCOMPLEX16Array", XLAL_EINVAL );
00307
00308 ndim = dimLength->length;
00309 for ( dim = 0; dim < ndim; ++dim )
00310 size *= dimLength->data[dim];
00311
00312 if ( ! size )
00313 XLAL_ERROR_NULL( "XLALResizeCOMPLEX16Array", XLAL_EBADLEN );
00314
00315
00316 if ( array->dimLength->length != ndim )
00317 {
00318 array->dimLength = XLALResizeUINT4Vector( array->dimLength, ndim );
00319 if ( ! array->dimLength )
00320 XLAL_ERROR_NULL( "XLALResizeCOMPLEX16Array", XLAL_EFUNC );
00321 }
00322
00323
00324 memcpy( array->dimLength->data, dimLength->data,
00325 ndim * sizeof( *array->dimLength->data ) );
00326
00327
00328 array->data = LALRealloc( array->data, size * sizeof( *array->data ) );
00329 if ( ! array->data )
00330 XLAL_ERROR_NULL( "XLALResizeCOMPLEX16Array", XLAL_ENOMEM );
00331
00332 return array;
00333 }
00334
00335
00336 void LALZResizeArray ( LALStatus *status, COMPLEX16Array **array, UINT4Vector *dimLength )
00337 {
00338 COMPLEX16Array *tmparr = NULL;
00339
00340 INITSTATUS (status, "LALZResizeArray", ARRAYFACTORIESC);
00341
00342 ASSERT ( array != NULL, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR );
00343
00344 if ( ! array )
00345 {
00346 tmparr = XLALCreateCOMPLEX16Array ( dimLength );
00347 }
00348 else if ( ! dimLength )
00349 {
00350 XLALDestroyCOMPLEX16Array ( *array );
00351 *array = NULL;
00352 }
00353 else
00354 {
00355 tmparr = XLALResizeCOMPLEX16Array ( *array, dimLength );
00356 }
00357
00358 if ( xlalErrno )
00359 {
00360 int code = xlalErrno;
00361 XLALClearErrno();
00362 if ( code == XLAL_EINVAL )
00363 {
00364 ABORT (status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00365 }
00366 if ( code == XLAL_EBADLEN )
00367 {
00368 ABORT (status, AVFACTORIESH_ELENGTH, AVFACTORIESH_MSGELENGTH);
00369 }
00370 if ( code == XLAL_ENOMEM )
00371 {
00372 ABORT (status, AVFACTORIESH_EMALLOC, AVFACTORIESH_MSGEMALLOC);
00373 }
00374 }
00375
00376 *array = tmparr;
00377
00378 RETURN (status);
00379 }
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396 void XLALDestroyCOMPLEX16Array ( COMPLEX16Array *array )
00397 {
00398 if ( ! array )
00399 XLAL_ERROR_VOID( "XLALDestroyCOMPLEX16Array", XLAL_EFAULT );
00400 if ( ! array->dimLength
00401 || ! array->dimLength->length
00402 || ! array->dimLength->data
00403 || ! array->data )
00404 XLAL_ERROR_VOID( "XLALDestroyCOMPLEX16Array", XLAL_EINVAL );
00405 XLALDestroyUINT4Vector( array->dimLength );
00406 LALFree( array->data );
00407 LALFree( array );
00408 return;
00409 }
00410
00411
00412 void LALZDestroyArray ( LALStatus *status, COMPLEX16Array **array )
00413 {
00414 INITSTATUS (status, "LALZDestroyArray", ARRAYFACTORIESC);
00415
00416 ASSERT (array, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00417 ASSERT (*array, status, AVFACTORIESH_EUPTR, AVFACTORIESH_MSGEUPTR);
00418 ASSERT ((*array)->data, status, AVFACTORIESH_EDPTR, AVFACTORIESH_MSGEDPTR);
00419
00420
00421
00422 XLALDestroyCOMPLEX16Array ( *array );
00423 if ( xlalErrno )
00424 {
00425 int code = xlalErrno;
00426 XLALClearErrno();
00427 if ( code == XLAL_EFAULT )
00428 {
00429 ABORT (status, AVFACTORIESH_EUPTR, AVFACTORIESH_MSGEUPTR);
00430 }
00431 if ( code == XLAL_EINVAL )
00432 {
00433 ABORT (status, AVFACTORIESH_EDPTR, AVFACTORIESH_MSGEDPTR);
00434 }
00435 }
00436 *array = NULL;
00437
00438 RETURN (status);
00439 }
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460 COMPLEX8Array * XLALCreateCOMPLEX8ArrayL ( UINT4 ndim, ... )
00461 {
00462 enum { maxdim = 16 };
00463 va_list ap;
00464 COMPLEX8Array *arr;
00465 UINT4 dims[maxdim];
00466 UINT4 dim;
00467
00468 if ( ! ndim )
00469 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8ArrayL", XLAL_EBADLEN );
00470 if ( ndim > maxdim )
00471 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8ArrayL", XLAL_EINVAL );
00472
00473 va_start( ap, ndim );
00474 for ( dim = 0; dim < ndim; ++dim )
00475 dims[dim] = va_arg( ap, UINT4 );
00476 va_end( ap );
00477
00478 arr = XLALCreateCOMPLEX8ArrayV ( ndim, dims );
00479 if ( ! arr )
00480 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8ArrayL", XLAL_EFUNC );
00481 return arr;
00482 }
00483
00484 COMPLEX8Array * XLALCreateCOMPLEX8ArrayV ( UINT4 ndim, UINT4 *dims )
00485 {
00486 COMPLEX8Array *arr;
00487 UINT4Vector dimLength;
00488
00489 if ( ! ndim )
00490 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8ArrayV", XLAL_EBADLEN );
00491 if ( ! dims )
00492 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8ArrayV", XLAL_EFAULT );
00493
00494 dimLength.length = ndim;
00495 dimLength.data = dims;
00496
00497 arr = XLALCreateCOMPLEX8Array ( &dimLength );
00498 if ( ! arr )
00499 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8ArrayV", XLAL_EFUNC );
00500 return arr;
00501 }
00502
00503
00504 COMPLEX8Array * XLALCreateCOMPLEX8Array ( UINT4Vector *dimLength )
00505 {
00506 COMPLEX8Array *arr;
00507 UINT4 size = 1;
00508 UINT4 ndim;
00509 UINT4 dim;
00510
00511 if ( ! dimLength )
00512 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8Array", XLAL_EFAULT );
00513 if ( ! dimLength->length )
00514 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8Array", XLAL_EBADLEN );
00515 if ( ! dimLength->data )
00516 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8Array", XLAL_EINVAL );
00517
00518 ndim = dimLength->length;
00519 for ( dim = 0; dim < ndim; ++dim )
00520 size *= dimLength->data[dim];
00521
00522 if ( ! size )
00523 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8Array", XLAL_EBADLEN );
00524
00525
00526 arr = LALMalloc( sizeof( *arr ) );
00527 if ( ! arr )
00528 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8Array", XLAL_ENOMEM );
00529
00530
00531 arr->dimLength = XLALCreateUINT4Vector( ndim );
00532 if ( ! arr->dimLength )
00533 {
00534 LALFree( arr );
00535 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8Array", XLAL_EFUNC );
00536 }
00537
00538
00539 memcpy( arr->dimLength->data, dimLength->data,
00540 ndim * sizeof( *arr->dimLength->data ) );
00541
00542
00543 arr->data = LALMalloc( size * sizeof( *arr->data ) );
00544 if ( ! arr->data )
00545 {
00546 XLALDestroyUINT4Vector( arr->dimLength );
00547 LALFree( arr );
00548 XLAL_ERROR_NULL( "XLALCreateCOMPLEX8Array", XLAL_ENOMEM );
00549 }
00550
00551 return arr;
00552 }
00553
00554
00555
00556 void LALCCreateArray ( LALStatus *status, COMPLEX8Array **array, UINT4Vector *dimLength )
00557 {
00558 INITSTATUS (status, "LALCCreateArray", ARRAYFACTORIESC);
00559
00560
00561
00562 ASSERT (array, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00563 ASSERT (!*array, status, AVFACTORIESH_EUPTR, AVFACTORIESH_MSGEUPTR);
00564 ASSERT (dimLength, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00565 ASSERT (dimLength->data, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00566 ASSERT (dimLength->length, status,
00567 AVFACTORIESH_ELENGTH, AVFACTORIESH_MSGELENGTH);
00568
00569 *array = XLALCreateCOMPLEX8Array ( dimLength );
00570 if ( ! *array )
00571 {
00572 int code = xlalErrno & ~XLAL_EFUNC;
00573 XLALClearErrno();
00574 if ( code & XLAL_EFAULT )
00575 {
00576 ABORT (status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00577 }
00578 if ( code == XLAL_EBADLEN )
00579 {
00580 ABORT (status, AVFACTORIESH_ELENGTH, AVFACTORIESH_MSGELENGTH);
00581 }
00582 if ( code == XLAL_EINVAL )
00583 {
00584 ABORT (status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00585 }
00586 if ( code == XLAL_ENOMEM )
00587 {
00588 ABORT (status, AVFACTORIESH_EMALLOC, AVFACTORIESH_MSGEMALLOC);
00589 }
00590 }
00591
00592 RETURN (status);
00593 }
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617 COMPLEX8Array * XLALResizeCOMPLEX8ArrayL ( COMPLEX8Array *array, UINT4 ndim, ... )
00618 {
00619 enum { maxdim = 16 };
00620 va_list ap;
00621 UINT4 dims[maxdim];
00622 UINT4 dim;
00623
00624 if ( ! ndim )
00625 {
00626 XLALDestroyCOMPLEX8Array ( array );
00627 return NULL;
00628 }
00629 if ( ndim > maxdim )
00630 XLAL_ERROR_NULL( "XLALResizeCOMPLEX8ArrayL", XLAL_EINVAL );
00631
00632 va_start( ap, ndim );
00633 for ( dim = 0; dim < ndim; ++dim )
00634 dims[dim] = va_arg( ap, UINT4 );
00635 va_end( ap );
00636
00637 return XLALResizeCOMPLEX8ArrayV ( array, ndim, dims );
00638 }
00639
00640 COMPLEX8Array * XLALResizeCOMPLEX8ArrayV ( COMPLEX8Array *array, UINT4 ndim, UINT4 *dims )
00641 {
00642 UINT4Vector dimLength;
00643
00644 if ( ! ndim )
00645 {
00646 XLALDestroyCOMPLEX8Array ( array );
00647 return NULL;
00648 }
00649 if ( ! dims )
00650 XLAL_ERROR_NULL( "XLALResizeCOMPLEX8ArrayV", XLAL_EINVAL );
00651
00652 dimLength.length = ndim;
00653 dimLength.data = dims;
00654
00655 return XLALResizeCOMPLEX8Array ( array, &dimLength );
00656 }
00657
00658 COMPLEX8Array * XLALResizeCOMPLEX8Array ( COMPLEX8Array *array, UINT4Vector *dimLength )
00659 {
00660 UINT4 size = 1;
00661 UINT4 ndim;
00662 UINT4 dim;
00663
00664 if ( ! array )
00665 return XLALCreateCOMPLEX8Array ( dimLength );
00666 if ( ! dimLength )
00667 {
00668 XLALDestroyCOMPLEX8Array ( array );
00669 return NULL;
00670 }
00671 if ( ! dimLength->length )
00672 XLAL_ERROR_NULL( "XLALResizeCOMPLEX8Array", XLAL_EBADLEN );
00673 if ( ! dimLength->data )
00674 XLAL_ERROR_NULL( "XLALResizeCOMPLEX8Array", XLAL_EINVAL );
00675
00676 ndim = dimLength->length;
00677 for ( dim = 0; dim < ndim; ++dim )
00678 size *= dimLength->data[dim];
00679
00680 if ( ! size )
00681 XLAL_ERROR_NULL( "XLALResizeCOMPLEX8Array", XLAL_EBADLEN );
00682
00683
00684 if ( array->dimLength->length != ndim )
00685 {
00686 array->dimLength = XLALResizeUINT4Vector( array->dimLength, ndim );
00687 if ( ! array->dimLength )
00688 XLAL_ERROR_NULL( "XLALResizeCOMPLEX8Array", XLAL_EFUNC );
00689 }
00690
00691
00692 memcpy( array->dimLength->data, dimLength->data,
00693 ndim * sizeof( *array->dimLength->data ) );
00694
00695
00696 array->data = LALRealloc( array->data, size * sizeof( *array->data ) );
00697 if ( ! array->data )
00698 XLAL_ERROR_NULL( "XLALResizeCOMPLEX8Array", XLAL_ENOMEM );
00699
00700 return array;
00701 }
00702
00703
00704 void LALCResizeArray ( LALStatus *status, COMPLEX8Array **array, UINT4Vector *dimLength )
00705 {
00706 COMPLEX8Array *tmparr = NULL;
00707
00708 INITSTATUS (status, "LALCResizeArray", ARRAYFACTORIESC);
00709
00710 ASSERT ( array != NULL, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR );
00711
00712 if ( ! array )
00713 {
00714 tmparr = XLALCreateCOMPLEX8Array ( dimLength );
00715 }
00716 else if ( ! dimLength )
00717 {
00718 XLALDestroyCOMPLEX8Array ( *array );
00719 *array = NULL;
00720 }
00721 else
00722 {
00723 tmparr = XLALResizeCOMPLEX8Array ( *array, dimLength );
00724 }
00725
00726 if ( xlalErrno )
00727 {
00728 int code = xlalErrno;
00729 XLALClearErrno();
00730 if ( code == XLAL_EINVAL )
00731 {
00732 ABORT (status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00733 }
00734 if ( code == XLAL_EBADLEN )
00735 {
00736 ABORT (status, AVFACTORIESH_ELENGTH, AVFACTORIESH_MSGELENGTH);
00737 }
00738 if ( code == XLAL_ENOMEM )
00739 {
00740 ABORT (status, AVFACTORIESH_EMALLOC, AVFACTORIESH_MSGEMALLOC);
00741 }
00742 }
00743
00744 *array = tmparr;
00745
00746 RETURN (status);
00747 }
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764 void XLALDestroyCOMPLEX8Array ( COMPLEX8Array *array )
00765 {
00766 if ( ! array )
00767 XLAL_ERROR_VOID( "XLALDestroyCOMPLEX8Array", XLAL_EFAULT );
00768 if ( ! array->dimLength
00769 || ! array->dimLength->length
00770 || ! array->dimLength->data
00771 || ! array->data )
00772 XLAL_ERROR_VOID( "XLALDestroyCOMPLEX8Array", XLAL_EINVAL );
00773 XLALDestroyUINT4Vector( array->dimLength );
00774 LALFree( array->data );
00775 LALFree( array );
00776 return;
00777 }
00778
00779
00780 void LALCDestroyArray ( LALStatus *status, COMPLEX8Array **array )
00781 {
00782 INITSTATUS (status, "LALCDestroyArray", ARRAYFACTORIESC);
00783
00784 ASSERT (array, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00785 ASSERT (*array, status, AVFACTORIESH_EUPTR, AVFACTORIESH_MSGEUPTR);
00786 ASSERT ((*array)->data, status, AVFACTORIESH_EDPTR, AVFACTORIESH_MSGEDPTR);
00787
00788
00789
00790 XLALDestroyCOMPLEX8Array ( *array );
00791 if ( xlalErrno )
00792 {
00793 int code = xlalErrno;
00794 XLALClearErrno();
00795 if ( code == XLAL_EFAULT )
00796 {
00797 ABORT (status, AVFACTORIESH_EUPTR, AVFACTORIESH_MSGEUPTR);
00798 }
00799 if ( code == XLAL_EINVAL )
00800 {
00801 ABORT (status, AVFACTORIESH_EDPTR, AVFACTORIESH_MSGEDPTR);
00802 }
00803 }
00804 *array = NULL;
00805
00806 RETURN (status);
00807 }
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828 REAL8Array * XLALCreateREAL8ArrayL ( UINT4 ndim, ... )
00829 {
00830 enum { maxdim = 16 };
00831 va_list ap;
00832 REAL8Array *arr;
00833 UINT4 dims[maxdim];
00834 UINT4 dim;
00835
00836 if ( ! ndim )
00837 XLAL_ERROR_NULL( "XLALCreateREAL8ArrayL", XLAL_EBADLEN );
00838 if ( ndim > maxdim )
00839 XLAL_ERROR_NULL( "XLALCreateREAL8ArrayL", XLAL_EINVAL );
00840
00841 va_start( ap, ndim );
00842 for ( dim = 0; dim < ndim; ++dim )
00843 dims[dim] = va_arg( ap, UINT4 );
00844 va_end( ap );
00845
00846 arr = XLALCreateREAL8ArrayV ( ndim, dims );
00847 if ( ! arr )
00848 XLAL_ERROR_NULL( "XLALCreateREAL8ArrayL", XLAL_EFUNC );
00849 return arr;
00850 }
00851
00852 REAL8Array * XLALCreateREAL8ArrayV ( UINT4 ndim, UINT4 *dims )
00853 {
00854 REAL8Array *arr;
00855 UINT4Vector dimLength;
00856
00857 if ( ! ndim )
00858 XLAL_ERROR_NULL( "XLALCreateREAL8ArrayV", XLAL_EBADLEN );
00859 if ( ! dims )
00860 XLAL_ERROR_NULL( "XLALCreateREAL8ArrayV", XLAL_EFAULT );
00861
00862 dimLength.length = ndim;
00863 dimLength.data = dims;
00864
00865 arr = XLALCreateREAL8Array ( &dimLength );
00866 if ( ! arr )
00867 XLAL_ERROR_NULL( "XLALCreateREAL8ArrayV", XLAL_EFUNC );
00868 return arr;
00869 }
00870
00871
00872 REAL8Array * XLALCreateREAL8Array ( UINT4Vector *dimLength )
00873 {
00874 REAL8Array *arr;
00875 UINT4 size = 1;
00876 UINT4 ndim;
00877 UINT4 dim;
00878
00879 if ( ! dimLength )
00880 XLAL_ERROR_NULL( "XLALCreateREAL8Array", XLAL_EFAULT );
00881 if ( ! dimLength->length )
00882 XLAL_ERROR_NULL( "XLALCreateREAL8Array", XLAL_EBADLEN );
00883 if ( ! dimLength->data )
00884 XLAL_ERROR_NULL( "XLALCreateREAL8Array", XLAL_EINVAL );
00885
00886 ndim = dimLength->length;
00887 for ( dim = 0; dim < ndim; ++dim )
00888 size *= dimLength->data[dim];
00889
00890 if ( ! size )
00891 XLAL_ERROR_NULL( "XLALCreateREAL8Array", XLAL_EBADLEN );
00892
00893
00894 arr = LALMalloc( sizeof( *arr ) );
00895 if ( ! arr )
00896 XLAL_ERROR_NULL( "XLALCreateREAL8Array", XLAL_ENOMEM );
00897
00898
00899 arr->dimLength = XLALCreateUINT4Vector( ndim );
00900 if ( ! arr->dimLength )
00901 {
00902 LALFree( arr );
00903 XLAL_ERROR_NULL( "XLALCreateREAL8Array", XLAL_EFUNC );
00904 }
00905
00906
00907 memcpy( arr->dimLength->data, dimLength->data,
00908 ndim * sizeof( *arr->dimLength->data ) );
00909
00910
00911 arr->data = LALMalloc( size * sizeof( *arr->data ) );
00912 if ( ! arr->data )
00913 {
00914 XLALDestroyUINT4Vector( arr->dimLength );
00915 LALFree( arr );
00916 XLAL_ERROR_NULL( "XLALCreateREAL8Array", XLAL_ENOMEM );
00917 }
00918
00919 return arr;
00920 }
00921
00922
00923
00924 void LALDCreateArray ( LALStatus *status, REAL8Array **array, UINT4Vector *dimLength )
00925 {
00926 INITSTATUS (status, "LALDCreateArray", ARRAYFACTORIESC);
00927
00928
00929
00930 ASSERT (array, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00931 ASSERT (!*array, status, AVFACTORIESH_EUPTR, AVFACTORIESH_MSGEUPTR);
00932 ASSERT (dimLength, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00933 ASSERT (dimLength->data, status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00934 ASSERT (dimLength->length, status,
00935 AVFACTORIESH_ELENGTH, AVFACTORIESH_MSGELENGTH);
00936
00937 *array = XLALCreateREAL8Array ( dimLength );
00938 if ( ! *array )
00939 {
00940 int code = xlalErrno & ~XLAL_EFUNC;
00941 XLALClearErrno();
00942 if ( code & XLAL_EFAULT )
00943 {
00944 ABORT (status, AVFACTORIESH_EVPTR, AVFACTORIESH_MSGEVPTR);
00945 }
00946 if ( code == XLAL_EBADLEN )
00947 {
00948 ABORT (status, AVFACTORIESH_ELENGTH, AVFACTORIESH_MSGELENGTH);
00949 }
00950 if ( code == XLAL_EINVAL )
00951 {
00952 ABORT (