VectorSequenceFactories.c

Go to the documentation of this file.
00001 /*----------------------------------------------------------------------- 
00002 
00003 File Name: VectorSequenceFactories.c
00004 
00005 <lalVerbatim file="VectorSequenceFactoriesCV">
00006 Revision: $Id: VectorSequenceFactories.m4,v 1.4 2001/08/21 04:19:49 jolien Exp $
00007 </lalVerbatim>
00008 
00009 -------------------------------------------------------------------------*/
00010 
00011 /* <lalLaTeX>
00012 
00013 \subsection{Module \texttt{VectorSequenceFactories.c}}
00014 \label{ss:VectorSequenceFactories.c}
00015 
00016 Create/destroy $\langle\mbox{datatype}\rangle$VectorSequence objects. 
00017 
00018 \subsubsection*{Prototypes}
00019 \vspace{0.1in}
00020 \input{VectorSequenceFactoriesD}
00021 \idx{LALZCreateVectorSequence()}
00022 \idx{LALCCreateVectorSequence()}
00023 \idx{LALDCreateVectorSequence()}
00024 \idx{LALSCreateVectorSequence()}
00025 \idx{LALI2CreateVectorSequence()}
00026 \idx{LALI4CreateVectorSequence()}
00027 \idx{LALI8CreateVectorSequence()}
00028 \idx{LALU2CreateVectorSequence()}
00029 \idx{LALU4CreateVectorSequence()}
00030 \idx{LALU8CreateVectorSequence()}
00031 \idx{LALCHARCreateVectorSequence()}
00032 \idx{LALCreateVectorSequence()}
00033 \idx{LALZDestroyVectorSequence()}
00034 \idx{LALCDestroyVectorSequence()}
00035 \idx{LALDDestroyVectorSequence()}
00036 \idx{LALSDestroyVectorSequence()}
00037 \idx{LALI2DestroyVectorSequence()}
00038 \idx{LALI4DestroyVectorSequence()}
00039 \idx{LALI8DestroyVectorSequence()}
00040 \idx{LALU2DestroyVectorSequence()}
00041 \idx{LALU4DestroyVectorSequence()}
00042 \idx{LALU8DestroyVectorSequence()}
00043 \idx{LALCHARDestroyVectorSequence()}
00044 \idx{LALDestroyVectorSequence()}
00045 
00046 \subsubsection*{Description}
00047 
00048 The \texttt{CreateVectorSequence} family of functions create a
00049 $\langle\mbox{datatype}\rangle$\texttt{VectorSequence} of the
00050 appropriate dimensions.
00051 
00052 The \texttt{DestroyVectorSequence} family of functions return the storage
00053 allocated by the \texttt{CreateVectorSequence} functions to the system.
00054 
00055 \subsubsection*{Algorithm}
00056 
00057 \subsubsection*{Uses}
00058 \begin{verbatim}
00059 LALMalloc()
00060 LALFree()
00061 \end{verbatim}
00062 
00063 \subsubsection*{Notes}
00064 
00065 \vfill{\footnotesize\input{VectorSequenceFactoriesCV}}
00066 
00067 </lalLaTeX> */
00068 
00069 #include "LALStdlib.h"
00070 #include "SeqFactories.h"
00071 
00072 /* <lalVerbatim file="VectorSequenceFactoriesNRCSID"> */
00073 NRCSID( VECTORSEQUENCEFACTORIESC, "$Id: VectorSequenceFactories.m4,v 1.4 2001/08/21 04:19:49 jolien Exp $" );
00074 /* </lalVerbatim> */
00075 
00076 
00077 
00078 
00079 
00080 
00081 
00082 
00083 
00084 
00085 
00086 
00087 
00088 
00089 
00090 
00091   
00092 
00093 
00094 COMPLEX16VectorSequence * XLALCreateCOMPLEX16VectorSequence ( UINT4 length, UINT4 veclen )
00095 {
00096   COMPLEX16VectorSequence *seq;
00097 
00098   if ( ! length || ! veclen )
00099     XLAL_ERROR_NULL( "XLALCreateCOMPLEX16VectorSequence", XLAL_EBADLEN );
00100 
00101   seq = LALMalloc( sizeof( *seq ) );
00102   if ( ! seq )
00103     XLAL_ERROR_NULL( "XLALCreateCOMPLEX16VectorSequence", XLAL_ENOMEM );
00104   
00105   seq->length = length;
00106   seq->vectorLength = veclen;
00107 
00108   if ( ! length || ! veclen )
00109     seq->data = NULL;
00110   else
00111   {
00112     seq->data = LALMalloc( length * veclen * sizeof( *seq->data ) );
00113     if ( ! seq )
00114     {
00115       LALFree( seq );
00116       XLAL_ERROR_NULL( "XLALCreateCOMPLEX16VectorSequence", XLAL_ENOMEM );
00117     }
00118   }
00119 
00120   return seq;
00121 }
00122 
00123 /* <lalVerbatim file="VectorSequenceFactoriesD"> */
00124 void LALZCreateVectorSequence ( LALStatus *status, COMPLEX16VectorSequence **vseq, CreateVectorSequenceIn *in ) 
00125 { /* </lalVerbatim> */
00126   /* 
00127    * Initialize status
00128    */
00129   INITSTATUS( status, "LALZCreateVectorSequence", VECTORSEQUENCEFACTORIESC );   
00130 
00131   /* Check input structure: report if NULL */
00132 
00133   ASSERT (in != NULL, status, SEQFACTORIESH_EINPTR, SEQFACTORIESH_MSGEINPTR);
00134       
00135   /* Check sequence length: report error if 0 
00136    * Use of unsigned for length means we can't check if negative
00137    * length was passed
00138    */
00139 
00140   ASSERT (in->length > 0, status,
00141           SEQFACTORIESH_ESLENGTH, SEQFACTORIESH_MSGESLENGTH);
00142 
00143   /* Check vector length: report error if 0 
00144    * Use of unsigned for length means we can't check if negative
00145    * length was passed
00146    */
00147 
00148   ASSERT (in->vectorLength > 0, status,
00149           SEQFACTORIESH_EVLENGTH, SEQFACTORIESH_MSGEVLENGTH); 
00150 
00151   /* 
00152    * Check return structure: If return pointer does not point to a
00153    *    valid pointer then report an error 
00154    */
00155 
00156   ASSERT (vseq != NULL, status, SEQFACTORIESH_EVPTR, SEQFACTORIESH_MSGEVPTR);
00157   ASSERT (*vseq == NULL, status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00158 
00159 
00160   *vseq = XLALCreateCOMPLEX16VectorSequence ( in->length, in->vectorLength );
00161   if ( ! vseq )
00162   {
00163     int code = xlalErrno;
00164     XLALClearErrno();
00165     if ( code == XLAL_EBADLEN )
00166     {
00167       if ( ! in->length )
00168       {
00169         ABORT (status, SEQFACTORIESH_ESLENGTH, SEQFACTORIESH_MSGESLENGTH);
00170       }
00171       else
00172       {
00173         ABORT (status, SEQFACTORIESH_EVLENGTH, SEQFACTORIESH_MSGEVLENGTH); 
00174       }
00175     }
00176     if ( code == XLAL_ENOMEM )
00177     {
00178       ABORT( status, SEQFACTORIESH_EMALLOC, SEQFACTORIESH_MSGEMALLOC );
00179     }
00180   }
00181 
00182   /* We be done: Normal exit */
00183 
00184   RETURN (status);
00185 }
00186 
00187 
00188 
00189 
00190 
00191 
00192 
00193 
00194 
00195 
00196 
00197 
00198 
00199 
00200 
00201   
00202 
00203 void XLALDestroyCOMPLEX16VectorSequence ( COMPLEX16VectorSequence *vseq )
00204 {
00205   if ( ! vseq )
00206     return;
00207   if ( ( ! vseq->length || ! vseq->vectorLength ) && vseq->data )
00208     XLAL_ERROR_VOID( "XLALDestroyCOMPLEX16VectorSequence", XLAL_EINVAL );
00209   if ( ! vseq->data && ( vseq->length || vseq->vectorLength ) )
00210     XLAL_ERROR_VOID( "XLALDestroyCOMPLEX16VectorSequence", XLAL_EINVAL );
00211   if ( vseq->data )
00212     LALFree( vseq->data );
00213   vseq->data = NULL; /* leave lengths as they are to indicate freed vector */
00214   LALFree( vseq );
00215   return;
00216 }
00217 
00218 /* <lalVerbatim file="VectorSequenceFactoriesD"> */
00219 void LALZDestroyVectorSequence ( LALStatus *status, COMPLEX16VectorSequence **vseq )
00220 { /* </lalVerbatim> */
00221   /* 
00222    * Initialize status
00223    */
00224 
00225   INITSTATUS( status, "LALZDestroyVectorSequence", VECTORSEQUENCEFACTORIESC );
00226       
00227   /* 
00228    * Check vseq: is it non-NULL?
00229    */
00230 
00231   ASSERT (vseq != NULL, status, SEQFACTORIESH_EVPTR, SEQFACTORIESH_MSGEVPTR); 
00232 
00233   /* 
00234    * Check vseq: does it point to non-NULL?
00235    */
00236 
00237   ASSERT (*vseq != NULL,status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00238 
00239   /*
00240    * Check data in vseq: does it point to non-NULL?
00241    */
00242 
00243   ASSERT ((*vseq)->data != NULL, status,
00244           SEQFACTORIESH_EDPTR, SEQFACTORIESH_MSGEDPTR);
00245 
00246   /* Ok, now let's free allocated storage */
00247 
00248   XLALDestroyCOMPLEX16VectorSequence ( *vseq );
00249   if ( xlalErrno )
00250   {
00251     int code = xlalErrno;
00252     XLALClearErrno();
00253     if ( code == XLAL_EFAULT )
00254     {
00255       ABORT (status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00256     }
00257     if ( code == XLAL_EINVAL )
00258     {
00259       ABORT (status, SEQFACTORIESH_EDPTR, SEQFACTORIESH_MSGEDPTR);
00260     }
00261   }
00262 
00263   *vseq = NULL;         /* make sure we don't point to freed struct */
00264 
00265   RETURN (status);
00266 }
00267 
00268 
00269 
00270 
00271 
00272 
00273 
00274 
00275 
00276 
00277 
00278 
00279 
00280 
00281 
00282 
00283 
00284   
00285 
00286 
00287 COMPLEX8VectorSequence * XLALCreateCOMPLEX8VectorSequence ( UINT4 length, UINT4 veclen )
00288 {
00289   COMPLEX8VectorSequence *seq;
00290 
00291   if ( ! length || ! veclen )
00292     XLAL_ERROR_NULL( "XLALCreateCOMPLEX8VectorSequence", XLAL_EBADLEN );
00293 
00294   seq = LALMalloc( sizeof( *seq ) );
00295   if ( ! seq )
00296     XLAL_ERROR_NULL( "XLALCreateCOMPLEX8VectorSequence", XLAL_ENOMEM );
00297   
00298   seq->length = length;
00299   seq->vectorLength = veclen;
00300 
00301   if ( ! length || ! veclen )
00302     seq->data = NULL;
00303   else
00304   {
00305     seq->data = LALMalloc( length * veclen * sizeof( *seq->data ) );
00306     if ( ! seq )
00307     {
00308       LALFree( seq );
00309       XLAL_ERROR_NULL( "XLALCreateCOMPLEX8VectorSequence", XLAL_ENOMEM );
00310     }
00311   }
00312 
00313   return seq;
00314 }
00315 
00316 /* <lalVerbatim file="VectorSequenceFactoriesD"> */
00317 void LALCCreateVectorSequence ( LALStatus *status, COMPLEX8VectorSequence **vseq, CreateVectorSequenceIn *in ) 
00318 { /* </lalVerbatim> */
00319   /* 
00320    * Initialize status
00321    */
00322   INITSTATUS( status, "LALCCreateVectorSequence", VECTORSEQUENCEFACTORIESC );   
00323 
00324   /* Check input structure: report if NULL */
00325 
00326   ASSERT (in != NULL, status, SEQFACTORIESH_EINPTR, SEQFACTORIESH_MSGEINPTR);
00327       
00328   /* Check sequence length: report error if 0 
00329    * Use of unsigned for length means we can't check if negative
00330    * length was passed
00331    */
00332 
00333   ASSERT (in->length > 0, status,
00334           SEQFACTORIESH_ESLENGTH, SEQFACTORIESH_MSGESLENGTH);
00335 
00336   /* Check vector length: report error if 0 
00337    * Use of unsigned for length means we can't check if negative
00338    * length was passed
00339    */
00340 
00341   ASSERT (in->vectorLength > 0, status,
00342           SEQFACTORIESH_EVLENGTH, SEQFACTORIESH_MSGEVLENGTH); 
00343 
00344   /* 
00345    * Check return structure: If return pointer does not point to a
00346    *    valid pointer then report an error 
00347    */
00348 
00349   ASSERT (vseq != NULL, status, SEQFACTORIESH_EVPTR, SEQFACTORIESH_MSGEVPTR);
00350   ASSERT (*vseq == NULL, status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00351 
00352 
00353   *vseq = XLALCreateCOMPLEX8VectorSequence ( in->length, in->vectorLength );
00354   if ( ! vseq )
00355   {
00356     int code = xlalErrno;
00357     XLALClearErrno();
00358     if ( code == XLAL_EBADLEN )
00359     {
00360       if ( ! in->length )
00361       {
00362         ABORT (status, SEQFACTORIESH_ESLENGTH, SEQFACTORIESH_MSGESLENGTH);
00363       }
00364       else
00365       {
00366         ABORT (status, SEQFACTORIESH_EVLENGTH, SEQFACTORIESH_MSGEVLENGTH); 
00367       }
00368     }
00369     if ( code == XLAL_ENOMEM )
00370     {
00371       ABORT( status, SEQFACTORIESH_EMALLOC, SEQFACTORIESH_MSGEMALLOC );
00372     }
00373   }
00374 
00375   /* We be done: Normal exit */
00376 
00377   RETURN (status);
00378 }
00379 
00380 
00381 
00382 
00383 
00384 
00385 
00386 
00387 
00388 
00389 
00390 
00391 
00392 
00393 
00394   
00395 
00396 void XLALDestroyCOMPLEX8VectorSequence ( COMPLEX8VectorSequence *vseq )
00397 {
00398   if ( ! vseq )
00399     return;
00400   if ( ( ! vseq->length || ! vseq->vectorLength ) && vseq->data )
00401     XLAL_ERROR_VOID( "XLALDestroyCOMPLEX8VectorSequence", XLAL_EINVAL );
00402   if ( ! vseq->data && ( vseq->length || vseq->vectorLength ) )
00403     XLAL_ERROR_VOID( "XLALDestroyCOMPLEX8VectorSequence", XLAL_EINVAL );
00404   if ( vseq->data )
00405     LALFree( vseq->data );
00406   vseq->data = NULL; /* leave lengths as they are to indicate freed vector */
00407   LALFree( vseq );
00408   return;
00409 }
00410 
00411 /* <lalVerbatim file="VectorSequenceFactoriesD"> */
00412 void LALCDestroyVectorSequence ( LALStatus *status, COMPLEX8VectorSequence **vseq )
00413 { /* </lalVerbatim> */
00414   /* 
00415    * Initialize status
00416    */
00417 
00418   INITSTATUS( status, "LALCDestroyVectorSequence", VECTORSEQUENCEFACTORIESC );
00419       
00420   /* 
00421    * Check vseq: is it non-NULL?
00422    */
00423 
00424   ASSERT (vseq != NULL, status, SEQFACTORIESH_EVPTR, SEQFACTORIESH_MSGEVPTR); 
00425 
00426   /* 
00427    * Check vseq: does it point to non-NULL?
00428    */
00429 
00430   ASSERT (*vseq != NULL,status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00431 
00432   /*
00433    * Check data in vseq: does it point to non-NULL?
00434    */
00435 
00436   ASSERT ((*vseq)->data != NULL, status,
00437           SEQFACTORIESH_EDPTR, SEQFACTORIESH_MSGEDPTR);
00438 
00439   /* Ok, now let's free allocated storage */
00440 
00441   XLALDestroyCOMPLEX8VectorSequence ( *vseq );
00442   if ( xlalErrno )
00443   {
00444     int code = xlalErrno;
00445     XLALClearErrno();
00446     if ( code == XLAL_EFAULT )
00447     {
00448       ABORT (status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00449     }
00450     if ( code == XLAL_EINVAL )
00451     {
00452       ABORT (status, SEQFACTORIESH_EDPTR, SEQFACTORIESH_MSGEDPTR);
00453     }
00454   }
00455 
00456   *vseq = NULL;         /* make sure we don't point to freed struct */
00457 
00458   RETURN (status);
00459 }
00460 
00461 
00462 
00463 
00464 
00465 
00466 
00467 
00468 
00469 
00470 
00471 
00472 
00473 
00474 
00475 
00476 
00477   
00478 
00479 
00480 REAL8VectorSequence * XLALCreateREAL8VectorSequence ( UINT4 length, UINT4 veclen )
00481 {
00482   REAL8VectorSequence *seq;
00483 
00484   if ( ! length || ! veclen )
00485     XLAL_ERROR_NULL( "XLALCreateREAL8VectorSequence", XLAL_EBADLEN );
00486 
00487   seq = LALMalloc( sizeof( *seq ) );
00488   if ( ! seq )
00489     XLAL_ERROR_NULL( "XLALCreateREAL8VectorSequence", XLAL_ENOMEM );
00490   
00491   seq->length = length;
00492   seq->vectorLength = veclen;
00493 
00494   if ( ! length || ! veclen )
00495     seq->data = NULL;
00496   else
00497   {
00498     seq->data = LALMalloc( length * veclen * sizeof( *seq->data ) );
00499     if ( ! seq )
00500     {
00501       LALFree( seq );
00502       XLAL_ERROR_NULL( "XLALCreateREAL8VectorSequence", XLAL_ENOMEM );
00503     }
00504   }
00505 
00506   return seq;
00507 }
00508 
00509 /* <lalVerbatim file="VectorSequenceFactoriesD"> */
00510 void LALDCreateVectorSequence ( LALStatus *status, REAL8VectorSequence **vseq, CreateVectorSequenceIn *in ) 
00511 { /* </lalVerbatim> */
00512   /* 
00513    * Initialize status
00514    */
00515   INITSTATUS( status, "LALDCreateVectorSequence", VECTORSEQUENCEFACTORIESC );   
00516 
00517   /* Check input structure: report if NULL */
00518 
00519   ASSERT (in != NULL, status, SEQFACTORIESH_EINPTR, SEQFACTORIESH_MSGEINPTR);
00520       
00521   /* Check sequence length: report error if 0 
00522    * Use of unsigned for length means we can't check if negative
00523    * length was passed
00524    */
00525 
00526   ASSERT (in->length > 0, status,
00527           SEQFACTORIESH_ESLENGTH, SEQFACTORIESH_MSGESLENGTH);
00528 
00529   /* Check vector length: report error if 0 
00530    * Use of unsigned for length means we can't check if negative
00531    * length was passed
00532    */
00533 
00534   ASSERT (in->vectorLength > 0, status,
00535           SEQFACTORIESH_EVLENGTH, SEQFACTORIESH_MSGEVLENGTH); 
00536 
00537   /* 
00538    * Check return structure: If return pointer does not point to a
00539    *    valid pointer then report an error 
00540    */
00541 
00542   ASSERT (vseq != NULL, status, SEQFACTORIESH_EVPTR, SEQFACTORIESH_MSGEVPTR);
00543   ASSERT (*vseq == NULL, status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00544 
00545 
00546   *vseq = XLALCreateREAL8VectorSequence ( in->length, in->vectorLength );
00547   if ( ! vseq )
00548   {
00549     int code = xlalErrno;
00550     XLALClearErrno();
00551     if ( code == XLAL_EBADLEN )
00552     {
00553       if ( ! in->length )
00554       {
00555         ABORT (status, SEQFACTORIESH_ESLENGTH, SEQFACTORIESH_MSGESLENGTH);
00556       }
00557       else
00558       {
00559         ABORT (status, SEQFACTORIESH_EVLENGTH, SEQFACTORIESH_MSGEVLENGTH); 
00560       }
00561     }
00562     if ( code == XLAL_ENOMEM )
00563     {
00564       ABORT( status, SEQFACTORIESH_EMALLOC, SEQFACTORIESH_MSGEMALLOC );
00565     }
00566   }
00567 
00568   /* We be done: Normal exit */
00569 
00570   RETURN (status);
00571 }
00572 
00573 
00574 
00575 
00576 
00577 
00578 
00579 
00580 
00581 
00582 
00583 
00584 
00585 
00586 
00587   
00588 
00589 void XLALDestroyREAL8VectorSequence ( REAL8VectorSequence *vseq )
00590 {
00591   if ( ! vseq )
00592     return;
00593   if ( ( ! vseq->length || ! vseq->vectorLength ) && vseq->data )
00594     XLAL_ERROR_VOID( "XLALDestroyREAL8VectorSequence", XLAL_EINVAL );
00595   if ( ! vseq->data && ( vseq->length || vseq->vectorLength ) )
00596     XLAL_ERROR_VOID( "XLALDestroyREAL8VectorSequence", XLAL_EINVAL );
00597   if ( vseq->data )
00598     LALFree( vseq->data );
00599   vseq->data = NULL; /* leave lengths as they are to indicate freed vector */
00600   LALFree( vseq );
00601   return;
00602 }
00603 
00604 /* <lalVerbatim file="VectorSequenceFactoriesD"> */
00605 void LALDDestroyVectorSequence ( LALStatus *status, REAL8VectorSequence **vseq )
00606 { /* </lalVerbatim> */
00607   /* 
00608    * Initialize status
00609    */
00610 
00611   INITSTATUS( status, "LALDDestroyVectorSequence", VECTORSEQUENCEFACTORIESC );
00612       
00613   /* 
00614    * Check vseq: is it non-NULL?
00615    */
00616 
00617   ASSERT (vseq != NULL, status, SEQFACTORIESH_EVPTR, SEQFACTORIESH_MSGEVPTR); 
00618 
00619   /* 
00620    * Check vseq: does it point to non-NULL?
00621    */
00622 
00623   ASSERT (*vseq != NULL,status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00624 
00625   /*
00626    * Check data in vseq: does it point to non-NULL?
00627    */
00628 
00629   ASSERT ((*vseq)->data != NULL, status,
00630           SEQFACTORIESH_EDPTR, SEQFACTORIESH_MSGEDPTR);
00631 
00632   /* Ok, now let's free allocated storage */
00633 
00634   XLALDestroyREAL8VectorSequence ( *vseq );
00635   if ( xlalErrno )
00636   {
00637     int code = xlalErrno;
00638     XLALClearErrno();
00639     if ( code == XLAL_EFAULT )
00640     {
00641       ABORT (status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00642     }
00643     if ( code == XLAL_EINVAL )
00644     {
00645       ABORT (status, SEQFACTORIESH_EDPTR, SEQFACTORIESH_MSGEDPTR);
00646     }
00647   }
00648 
00649   *vseq = NULL;         /* make sure we don't point to freed struct */
00650 
00651   RETURN (status);
00652 }
00653 
00654 
00655 
00656 
00657 
00658 
00659 
00660 
00661 
00662 
00663 
00664 
00665 
00666 
00667 
00668 
00669 
00670   
00671 
00672 
00673 REAL4VectorSequence * XLALCreateREAL4VectorSequence ( UINT4 length, UINT4 veclen )
00674 {
00675   REAL4VectorSequence *seq;
00676 
00677   if ( ! length || ! veclen )
00678     XLAL_ERROR_NULL( "XLALCreateREAL4VectorSequence", XLAL_EBADLEN );
00679 
00680   seq = LALMalloc( sizeof( *seq ) );
00681   if ( ! seq )
00682     XLAL_ERROR_NULL( "XLALCreateREAL4VectorSequence", XLAL_ENOMEM );
00683   
00684   seq->length = length;
00685   seq->vectorLength = veclen;
00686 
00687   if ( ! length || ! veclen )
00688     seq->data = NULL;
00689   else
00690   {
00691     seq->data = LALMalloc( length * veclen * sizeof( *seq->data ) );
00692     if ( ! seq )
00693     {
00694       LALFree( seq );
00695       XLAL_ERROR_NULL( "XLALCreateREAL4VectorSequence", XLAL_ENOMEM );
00696     }
00697   }
00698 
00699   return seq;
00700 }
00701 
00702 /* <lalVerbatim file="VectorSequenceFactoriesD"> */
00703 void LALSCreateVectorSequence ( LALStatus *status, REAL4VectorSequence **vseq, CreateVectorSequenceIn *in ) 
00704 { /* </lalVerbatim> */
00705   /* 
00706    * Initialize status
00707    */
00708   INITSTATUS( status, "LALSCreateVectorSequence", VECTORSEQUENCEFACTORIESC );   
00709 
00710   /* Check input structure: report if NULL */
00711 
00712   ASSERT (in != NULL, status, SEQFACTORIESH_EINPTR, SEQFACTORIESH_MSGEINPTR);
00713       
00714   /* Check sequence length: report error if 0 
00715    * Use of unsigned for length means we can't check if negative
00716    * length was passed
00717    */
00718 
00719   ASSERT (in->length > 0, status,
00720           SEQFACTORIESH_ESLENGTH, SEQFACTORIESH_MSGESLENGTH);
00721 
00722   /* Check vector length: report error if 0 
00723    * Use of unsigned for length means we can't check if negative
00724    * length was passed
00725    */
00726 
00727   ASSERT (in->vectorLength > 0, status,
00728           SEQFACTORIESH_EVLENGTH, SEQFACTORIESH_MSGEVLENGTH); 
00729 
00730   /* 
00731    * Check return structure: If return pointer does not point to a
00732    *    valid pointer then report an error 
00733    */
00734 
00735   ASSERT (vseq != NULL, status, SEQFACTORIESH_EVPTR, SEQFACTORIESH_MSGEVPTR);
00736   ASSERT (*vseq == NULL, status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00737 
00738 
00739   *vseq = XLALCreateREAL4VectorSequence ( in->length, in->vectorLength );
00740   if ( ! vseq )
00741   {
00742     int code = xlalErrno;
00743     XLALClearErrno();
00744     if ( code == XLAL_EBADLEN )
00745     {
00746       if ( ! in->length )
00747       {
00748         ABORT (status, SEQFACTORIESH_ESLENGTH, SEQFACTORIESH_MSGESLENGTH);
00749       }
00750       else
00751       {
00752         ABORT (status, SEQFACTORIESH_EVLENGTH, SEQFACTORIESH_MSGEVLENGTH); 
00753       }
00754     }
00755     if ( code == XLAL_ENOMEM )
00756     {
00757       ABORT( status, SEQFACTORIESH_EMALLOC, SEQFACTORIESH_MSGEMALLOC );
00758     }
00759   }
00760 
00761   /* We be done: Normal exit */
00762 
00763   RETURN (status);
00764 }
00765 
00766 
00767 
00768 
00769 
00770 
00771 
00772 
00773 
00774 
00775 
00776 
00777 
00778 
00779 
00780   
00781 
00782 void XLALDestroyREAL4VectorSequence ( REAL4VectorSequence *vseq )
00783 {
00784   if ( ! vseq )
00785     return;
00786   if ( ( ! vseq->length || ! vseq->vectorLength ) && vseq->data )
00787     XLAL_ERROR_VOID( "XLALDestroyREAL4VectorSequence", XLAL_EINVAL );
00788   if ( ! vseq->data && ( vseq->length || vseq->vectorLength ) )
00789     XLAL_ERROR_VOID( "XLALDestroyREAL4VectorSequence", XLAL_EINVAL );
00790   if ( vseq->data )
00791     LALFree( vseq->data );
00792   vseq->data = NULL; /* leave lengths as they are to indicate freed vector */
00793   LALFree( vseq );
00794   return;
00795 }
00796 
00797 /* <lalVerbatim file="VectorSequenceFactoriesD"> */
00798 void LALSDestroyVectorSequence ( LALStatus *status, REAL4VectorSequence **vseq )
00799 { /* </lalVerbatim> */
00800   /* 
00801    * Initialize status
00802    */
00803 
00804   INITSTATUS( status, "LALSDestroyVectorSequence", VECTORSEQUENCEFACTORIESC );
00805       
00806   /* 
00807    * Check vseq: is it non-NULL?
00808    */
00809 
00810   ASSERT (vseq != NULL, status, SEQFACTORIESH_EVPTR, SEQFACTORIESH_MSGEVPTR); 
00811 
00812   /* 
00813    * Check vseq: does it point to non-NULL?
00814    */
00815 
00816   ASSERT (*vseq != NULL,status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00817 
00818   /*
00819    * Check data in vseq: does it point to non-NULL?
00820    */
00821 
00822   ASSERT ((*vseq)->data != NULL, status,
00823           SEQFACTORIESH_EDPTR, SEQFACTORIESH_MSGEDPTR);
00824 
00825   /* Ok, now let's free allocated storage */
00826 
00827   XLALDestroyREAL4VectorSequence ( *vseq );
00828   if ( xlalErrno )
00829   {
00830     int code = xlalErrno;
00831     XLALClearErrno();
00832     if ( code == XLAL_EFAULT )
00833     {
00834       ABORT (status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00835     }
00836     if ( code == XLAL_EINVAL )
00837     {
00838       ABORT (status, SEQFACTORIESH_EDPTR, SEQFACTORIESH_MSGEDPTR);
00839     }
00840   }
00841 
00842   *vseq = NULL;         /* make sure we don't point to freed struct */
00843 
00844   RETURN (status);
00845 }
00846 
00847 
00848 
00849 
00850 
00851 
00852 
00853 
00854 
00855 
00856 
00857 
00858 
00859 
00860 
00861 
00862 
00863   
00864 
00865 
00866 INT2VectorSequence * XLALCreateINT2VectorSequence ( UINT4 length, UINT4 veclen )
00867 {
00868   INT2VectorSequence *seq;
00869 
00870   if ( ! length || ! veclen )
00871     XLAL_ERROR_NULL( "XLALCreateINT2VectorSequence", XLAL_EBADLEN );
00872 
00873   seq = LALMalloc( sizeof( *seq ) );
00874   if ( ! seq )
00875     XLAL_ERROR_NULL( "XLALCreateINT2VectorSequence", XLAL_ENOMEM );
00876   
00877   seq->length = length;
00878   seq->vectorLength = veclen;
00879 
00880   if ( ! length || ! veclen )
00881     seq->data = NULL;
00882   else
00883   {
00884     seq->data = LALMalloc( length * veclen * sizeof( *seq->data ) );
00885     if ( ! seq )
00886     {
00887       LALFree( seq );
00888       XLAL_ERROR_NULL( "XLALCreateINT2VectorSequence", XLAL_ENOMEM );
00889     }
00890   }
00891 
00892   return seq;
00893 }
00894 
00895 /* <lalVerbatim file="VectorSequenceFactoriesD"> */
00896 void LALI2CreateVectorSequence ( LALStatus *status, INT2VectorSequence **vseq, CreateVectorSequenceIn *in ) 
00897 { /* </lalVerbatim> */
00898   /* 
00899    * Initialize status
00900    */
00901   INITSTATUS( status, "LALI2CreateVectorSequence", VECTORSEQUENCEFACTORIESC );  
00902 
00903   /* Check input structure: report if NULL */
00904 
00905   ASSERT (in != NULL, status, SEQFACTORIESH_EINPTR, SEQFACTORIESH_MSGEINPTR);
00906       
00907   /* Check sequence length: report error if 0 
00908    * Use of unsigned for length means we can't check if negative
00909    * length was passed
00910    */
00911 
00912   ASSERT (in->length > 0, status,
00913           SEQFACTORIESH_ESLENGTH, SEQFACTORIESH_MSGESLENGTH);
00914 
00915   /* Check vector length: report error if 0 
00916    * Use of unsigned for length means we can't check if negative
00917    * length was passed
00918    */
00919 
00920   ASSERT (in->vectorLength > 0, status,
00921           SEQFACTORIESH_EVLENGTH, SEQFACTORIESH_MSGEVLENGTH); 
00922 
00923   /* 
00924    * Check return structure: If return pointer does not point to a
00925    *    valid pointer then report an error 
00926    */
00927 
00928   ASSERT (vseq != NULL, status, SEQFACTORIESH_EVPTR, SEQFACTORIESH_MSGEVPTR);
00929   ASSERT (*vseq == NULL, status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
00930 
00931 
00932   *vseq = XLALCreateINT2VectorSequence ( in->length, in->vectorLength );
00933   if ( ! vseq )
00934   {
00935     int code = xlalErrno;
00936     XLALClearErrno();
00937     if ( code == XLAL_EBADLEN )
00938     {
00939       if ( ! in->length )
00940       {
00941         ABORT (status, SEQFACTORIESH_ESLENGTH, SEQFACTORIESH_MSGESLENGTH);
00942       }
00943       else
00944       {
00945         ABORT (status, SEQFACTORIESH_EVLENGTH, SEQFACTORIESH_MSGEVLENGTH); 
00946       }
00947     }
00948     if ( code == XLAL_ENOMEM )
00949     {
00950       ABORT( status, SEQFACTORIESH_EMALLOC, SEQFACTORIESH_MSGEMALLOC );
00951     }
00952   }
00953 
00954   /* We be done: Normal exit */
00955 
00956   RETURN (status);
00957 }
00958 
00959 
00960 
00961 
00962 
00963 
00964 
00965 
00966 
00967 
00968 
00969 
00970 
00971 
00972 
00973   
00974 
00975 void XLALDestroyINT2VectorSequence ( INT2VectorSequence *vseq )
00976 {
00977   if ( ! vseq )
00978     return;
00979   if ( ( ! vseq->length || ! vseq->vectorLength ) && vseq->data )
00980     XLAL_ERROR_VOID( "XLALDestroyINT2VectorSequence", XLAL_EINVAL );
00981   if ( ! vseq->data && ( vseq->length || vseq->vectorLength ) )
00982     XLAL_ERROR_VOID( "XLALDestroyINT2VectorSequence", XLAL_EINVAL );
00983   if ( vseq->data )
00984     LALFree( vseq->data );
00985   vseq->data = NULL; /* leave lengths as they are to indicate freed vector */
00986   LALFree( vseq );
00987   return;
00988 }
00989 
00990 /* <lalVerbatim file="VectorSequenceFactoriesD"> */
00991 void LALI2DestroyVectorSequence ( LALStatus *status, INT2VectorSequence **vseq )
00992 { /* </lalVerbatim> */
00993   /* 
00994    * Initialize status
00995    */
00996 
00997   INITSTATUS( status, "LALI2DestroyVectorSequence", VECTORSEQUENCEFACTORIESC );
00998       
00999   /* 
01000    * Check vseq: is it non-NULL?
01001    */
01002 
01003   ASSERT (vseq != NULL, status, SEQFACTORIESH_EVPTR, SEQFACTORIESH_MSGEVPTR); 
01004 
01005   /* 
01006    * Check vseq: does it point to non-NULL?
01007    */
01008 
01009   ASSERT (*vseq != NULL,status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
01010 
01011   /*
01012    * Check data in vseq: does it point to non-NULL?
01013    */
01014 
01015   ASSERT ((*vseq)->data != NULL, status,
01016           SEQFACTORIESH_EDPTR, SEQFACTORIESH_MSGEDPTR);
01017 
01018   /* Ok, now let's free allocated storage */
01019 
01020   XLALDestroyINT2VectorSequence ( *vseq );
01021   if ( xlalErrno )
01022   {
01023     int code = xlalErrno;
01024     XLALClearErrno();
01025     if ( code == XLAL_EFAULT )
01026     {
01027       ABORT (status, SEQFACTORIESH_EUPTR, SEQFACTORIESH_MSGEUPTR);
01028     }
01029     if ( code == XLAL_EINVAL )
01030     {
01031       ABORT (status, SEQFACTORIESH_EDPTR, SEQFACTORIESH_MSGEDPTR);
01032     }
01033   }
01034 
01035   *vseq = NULL;         /* make sure we don't point to freed struct */
01036 
01037   RETURN (status);
01038 }
01039 
01040 
01041 
01042 
01043 
01044 
01045 
01046 
01047 
01048