Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals

pd4fwt.cpp

Go to the documentation of this file.
00001 // pd4fwt.cpp
00002 //////////////////////////////////////////////////////////////////////
00003 //          (c) Copyright 1994-2002 Brown Deer Technology, LLC.
00004 //                        All rights reserved.
00005 //////////////////////////////////////////////////////////////////////
00006 
00007 #ifdef STORM_USEF
00008 #include "pd4fwt_.h"
00009 #include "dpd4fwt_.h"
00010 #include "pd4fwtws_.h"
00011 #include "dpd4fwtws_.h"
00012 #endif
00013 
00014 #include "stormdef.h"
00015 #define H0 STORMDEF_MATHCONST_D4H0
00016 #define H1 STORMDEF_MATHCONST_D4H1
00017 #define H2 STORMDEF_MATHCONST_D4H2
00018 #define H3 STORMDEF_MATHCONST_D4H3
00019 
00020 int pd4fwt( 
00021           const int& Sizef,
00022           const int& ns,
00023           const int& ks,
00024           const int& size,
00025           const float* sdata,
00026                 float* wdata
00027 ) { 
00028 
00029 #ifdef STORM_USEF
00030 
00031    int iflag;
00032    pd4fwt_( &Sizef, &ns, &ks, &size, sdata, wdata, &iflag );
00033    return iflag;
00034 
00035 #else
00036 
00037    int j;
00038    int j1,j2,j3;
00039    int size2;
00040    int size1 = size;
00041    float *xx = new float[Sizef];
00042 
00043 #ifdef STORM_FWT_CCHECKUSAGE
00044    if ( size1 < ns ) return 1;
00045 #endif
00046 
00047    for( int i = 0; i < size1; i++ ) { wdata[i] = sdata[i]; }
00048    if ( size1 == ns ) return 0;
00049    while ( size1 > ns ) {
00050       size2 = size1 / 2;
00051       for( int i = 0; i < size2; i++ ) {
00052          j = 2 * i;
00053          j1 = (j+1)%size1;
00054          j2 = (j+2)%size1;
00055          j3 = (j+3)%size1;
00056          xx[i] = H0*wdata[j] + H1*wdata[j+1] 
00057            + H2*wdata[j2] + H3*wdata[j3];
00058          xx[size2+i] = H3*wdata[j] - H2*wdata[j1] 
00059            + H1*wdata[j2] + H0*wdata[j3];
00060       }
00061       for( int i = 0; i < size1; i++ ) { wdata[i] = xx[i]; }
00062       size1 = size2;
00063    }
00064    delete [] xx;
00065 
00066 #ifdef STORM_FWT_CCHECKUSAGE
00067    if ( size1 != ns ) return 2;
00068 #endif
00069 
00070    return 0;
00071 
00072 #endif
00073 
00074 } 
00075 
00076 
00077 
00078 int pd4fwt( 
00079           const int& Sizef,
00080           const int& ns,
00081           const int& ks,
00082           const int& size,
00083           const double* sdata,
00084                 double* wdata
00085 ) { 
00086 
00087 #ifdef STORM_USEF
00088 
00089    int iflag;
00090    dpd4fwt_( &Sizef, &ns, &ks, &size, sdata, wdata, &iflag );
00091    return iflag;
00092 
00093 #else
00094 
00095    int j;
00096    int j1,j2,j3;
00097    int size2;
00098    int size1 = size;
00099    double *xx = new double[Sizef];
00100 
00101 #ifdef STORM_FWT_CCHECKUSAGE
00102    if ( size1 < ns ) return 1;
00103 #endif
00104 
00105    for( int i = 0; i < size1; i++ ) { wdata[i] = sdata[i]; }
00106    if ( size1 == ns ) return 0;
00107    while ( size1 > ns ) {
00108       size2 = size1 / 2;
00109       for( int i = 0; i < size2; i++ ) {
00110          j = 2 * i;
00111          j1 = (j+1)%size1;
00112          j2 = (j+2)%size1;
00113          j3 = (j+3)%size1;
00114          xx[i] = H0*wdata[j] + H1*wdata[j+1] 
00115            + H2*wdata[j2] + H3*wdata[j3];
00116          xx[size2+i] = H3*wdata[j] - H2*wdata[j1] 
00117            + H1*wdata[j2] + H0*wdata[j3];
00118       }
00119       for( int i = 0; i < size1; i++ ) { wdata[i] = xx[i]; }
00120       size1 = size2;
00121    }
00122    delete [] xx;
00123 
00124 #ifdef STORM_FWT_CCHECKUSAGE
00125    if ( size1 != ns ) return 2;
00126 #endif
00127 
00128    return 0;
00129 
00130 #endif
00131 
00132 } 
00133 
00134 
00135 
00136 int pd4fwt( 
00137           const int& Sizef,
00138           const int& ns,
00139           const int& ks,
00140           const int& size,
00141           const float* sdata,
00142                 float* wdata,
00143                 float* ws
00144 ) { 
00145 
00146 #ifdef STORM_USEF
00147 
00148    int iflag;
00149    pd4fwtws_( &Sizef, &ns, &ks, &size, sdata, wdata, ws, &iflag );
00150    return iflag;
00151 
00152 #else
00153 
00154    int j;
00155    int j1,j2,j3;
00156    int size2;
00157    int size1 = size;
00158    if ( size1 < ns ) return 1;
00159    for( int i = 0; i < size1; i++ ) { wdata[i] = sdata[i]; }
00160 
00161 #ifdef STORM_FWT_CCHECKUSAGE
00162    if ( size1 == ns ) return 0;
00163 #endif
00164 
00165    while ( size1 > ns ) {
00166       size2 = size1 / 2;
00167       for( int i = 0; i < size2; i++ ) {
00168          j = 2 * i;
00169          j1 = (j+1)%size1;
00170          j2 = (j+2)%size1;
00171          j3 = (j+3)%size1;
00172          ws[i] = H0*wdata[j] + H1*wdata[j+1] 
00173            + H2*wdata[j2] + H3*wdata[j3];
00174          ws[size2+i] = H3*wdata[j] - H2*wdata[j1] 
00175            + H1*wdata[j2] + H0*wdata[j3];
00176       }
00177       for( int i = 0; i < size1; i++ ) { wdata[i] = ws[i]; }
00178       size1 = size2;
00179    }
00180 
00181 #ifdef STORM_FWT_CCHECKUSAGE
00182    if ( size1 != ns ) return 2;
00183 #endif
00184 
00185    return 0;
00186 
00187 #endif
00188 
00189 } 
00190 
00191 
00192 
00193 int pd4fwt( 
00194           const int& Sizef,
00195           const int& ns,
00196           const int& ks,
00197           const int& size,
00198           const double* sdata,
00199                 double* wdata,
00200                 double* ws
00201 ) { 
00202 
00203 #ifdef STORM_USEF
00204 
00205    int iflag;
00206    dpd4fwtws_( &Sizef, &ns, &ks, &size, sdata, wdata, ws, &iflag );
00207    return iflag;
00208 
00209 #else
00210 
00211    int j;
00212    int j1,j2,j3;
00213    int size2;
00214    int size1 = size;
00215 
00216 #ifdef STORM_FWT_CCHECKUSAGE
00217    if ( size1 < ns ) return 1;
00218 #endif
00219 
00220    for( int i = 0; i < size1; i++ ) { wdata[i] = sdata[i]; }
00221    if ( size1 == ns ) return 0;
00222    while ( size1 > ns ) {
00223       size2 = size1 / 2;
00224       for( int i = 0; i < size2; i++ ) {
00225          j = 2 * i;
00226          j1 = (j+1)%size1;
00227          j2 = (j+2)%size1;
00228          j3 = (j+3)%size1;
00229          ws[i] = H0*wdata[j] + H1*wdata[j+1] 
00230            + H2*wdata[j2] + H3*wdata[j3];
00231          ws[size2+i] = H3*wdata[j] - H2*wdata[j1] 
00232            + H1*wdata[j2] + H0*wdata[j3];
00233       }
00234       for( int i = 0; i < size1; i++ ) { wdata[i] = ws[i]; }
00235       size1 = size2;
00236    }
00237 
00238 #ifdef STORM_FWT_CCHECKUSAGE
00239    if ( size1 != ns ) return 2;
00240 #endif
00241 
00242    return 0;
00243 
00244 #endif
00245 
00246 } 
00247 
00248 #undef H0
00249 #undef H1
00250 #undef H2
00251 #undef H3
00252 

Generated on Mon May 31 21:38:51 2004 for SR2k4 Assembler by doxygen 1.3.6