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

g1ifwt.cpp

Go to the documentation of this file.
00001 // g1ifwt.cpp
00002 //////////////////////////////////////////////////////////////////////
00003 //          (c) Copyright 2002 Brown Deer Technology, LLC.
00004 //                        All rights reserved.
00005 //////////////////////////////////////////////////////////////////////
00006 
00007 #ifdef STORM_USEF
00008 #include "g1ifwt_.h"
00009 #include "dg1ifwt_.h"
00010 #include "g1ifwtws_.h"
00011 #include "dg1ifwtws_.h"
00012 #endif
00013 
00014 #include "stormdef.h"
00015 #define H00 STORMDEF_MATHCONST_GHB1H00
00016 #define H10 STORMDEF_MATHCONST_GHB1H10
00017 #define H11 STORMDEF_MATHCONST_GHB1H11
00018 
00019 int g1ifwt( 
00020           const int& Sizef,
00021           const int& ns,
00022           const int& size,
00023           const float* wdata,
00024                 float* sdata
00025 ) { 
00026 
00027 #ifdef STORM_USEF
00028 
00029    int iflag;
00030    g1ifwt_( &Sizef, &ns, &size, wdata, sdata, &iflag );
00031    return iflag;
00032 
00033 #else
00034 
00035    int size2;
00036    int size1 = ns;
00037 
00038 #ifdef STORM_FWT_CCHECKUSAGE
00039    if ( size < ns ) return 1;
00040 #endif
00041 
00042    if ( size == ns ) {
00043       for( int i = 0; i < 2*size; i++ ) { 
00044          sdata[i] = wdata[i]; 
00045       }
00046       return 0; 
00047    }
00048    float *xx = new float[2*Sizef];
00049    for( int i = 0; i < 2*size; i++ ) { 
00050       xx[i] = wdata[i]; 
00051    }
00052    while ( size1 < size ) {
00053       size2 = size1;
00054       size1 = 2 * size1;
00055       for( int i = 0; i < size2; i++ ) {
00056 
00057          sdata[4*i] = H00 * xx[2*i] 
00058                     + H11 * xx[2*(size2+i)] 
00059                     + H10 * xx[2*i+1];
00060 
00061          sdata[4*i+1] = - H10 * xx[2*(size2+i)] 
00062                       + H11 * xx[2*i+1] 
00063                       + H00 * xx[2*(size2+i)+1];
00064 
00065          sdata[4*i+2] = H00 * xx[2*i] 
00066                       - H11 * xx[2*(size2+i)] 
00067                       - H10 * xx[2*i+1];
00068 
00069          sdata[4*i+3] = - H10 * xx[2*(size2+i)] 
00070                       + H11 * xx[2*i+1] 
00071                       - H00 * xx[2*(size2+i)+1];
00072 
00073       }
00074       for( int i = 0; i < 2*size1; i++ ) { 
00075          xx[i] = sdata[i]; 
00076       }
00077    }
00078    delete [] xx;
00079 
00080 #ifdef STORM_FWT_CCHECKUSAGE
00081    if ( size1 > size ) return 2;
00082 #endif
00083 
00084    return 0;
00085 
00086 #endif
00087 
00088 } 
00089 
00090 
00091 
00092 int g1ifwt( 
00093           const int& Sizef,
00094           const int& ns,
00095           const int& size,
00096           const double* wdata,
00097                 double* sdata
00098 ) { 
00099 
00100 #ifdef STORM_USEF
00101 
00102    int iflag;
00103    dg1ifwt_( &Sizef, &ns, &size, wdata, sdata, &iflag );
00104    return iflag;
00105 
00106 #else
00107 
00108    int size2;
00109    int size1 = ns;
00110 
00111 #ifdef STORM_FWT_CCHECKUSAGE
00112    if ( size < ns ) return 1;
00113 #endif
00114 
00115    if ( size == ns ) {
00116       for( int i = 0; i < 2*size; i++ ) { 
00117          sdata[i] = wdata[i]; 
00118       }
00119       return 0;
00120    }
00121    double *xx = new double[2*Sizef];
00122    for( int i = 0; i < 2*size; i++ ) { 
00123       xx[i] = wdata[i]; 
00124    }
00125    while ( size1 < size ) {
00126       size2 = size1; 
00127       size1 = 2 * size1;
00128       for( int i = 0; i < size2; i++ ) {
00129 
00130          sdata[4*i] = H00 * xx[2*i] 
00131                     + H11 * xx[2*(size2+i)] 
00132                     + H10 * xx[2*i+1];
00133 
00134          sdata[4*i+1] = - H10 * xx[2*(size2+i)] 
00135                       + H11 * xx[2*i+1] 
00136                       + H00 * xx[2*(size2+i)+1];
00137 
00138          sdata[4*i+2] = H00 * xx[2*i] 
00139                       - H11 * xx[2*(size2+i)] 
00140                       - H10 * xx[2*i+1];
00141 
00142          sdata[4*i+3] = - H10 * xx[2*(size2+i)] 
00143                       + H11 * xx[2*i+1] 
00144                       - H00 * xx[2*(size2+i)+1];
00145 
00146       }
00147       for( int i = 0; i < 2*size1; i++ ) { 
00148          xx[i] = sdata[i]; 
00149       }
00150    }
00151    delete [] xx;
00152 
00153 #ifdef STORM_FWT_CCHECKUSAGE
00154    if ( size1 > size ) return 2;
00155 #endif
00156 
00157    return 0;
00158 
00159 #endif
00160 
00161 } 
00162 
00163 
00164 
00165 int g1ifwt( 
00166           const int& Sizef,
00167           const int& ns,
00168           const int& size,
00169           const float* wdata,
00170                 float* sdata,
00171                 float* ws
00172 ) { 
00173 
00174 #ifdef STORM_USEF
00175 
00176    int iflag;
00177    g1ifwtws_( &Sizef, &ns, &size, wdata, sdata, ws, &iflag );
00178    return iflag;
00179 
00180 #else
00181 
00182    int size2;
00183    int size1 = ns;
00184 
00185 #ifdef STORM_FWT_CCHECKUSAGE
00186    if ( size < ns ) return 1;
00187 #endif
00188 
00189    if ( size == ns ) {
00190       for( int i = 0; i < 2*size; i++ ) { 
00191          sdata[i] = wdata[i]; 
00192       }
00193       return 0; 
00194    }
00195    for( int i = 0; i < 2*size; i++ ) { 
00196       ws[i] = wdata[i]; 
00197    }
00198    while ( size1 < size ) {
00199       size2 = size1;
00200       size1 = 2 * size1;
00201       for( int i = 0; i < size2; i++ ) {
00202 
00203          sdata[4*i] = H00 * ws[2*i] 
00204                     + H11 * ws[2*(size2+i)] 
00205                     + H10 * ws[2*i+1];
00206 
00207          sdata[4*i+1] = - H10 * ws[2*(size2+i)] 
00208                       + H11 * ws[2*i+1] 
00209                       + H00 * ws[2*(size2+i)+1];
00210 
00211          sdata[4*i+2] = H00 * ws[2*i] 
00212                       - H11 * ws[2*(size2+i)] 
00213                       - H10 * ws[2*i+1];
00214 
00215          sdata[4*i+3] = - H10 * ws[2*(size2+i)] 
00216                       + H11 * ws[2*i+1] 
00217                       - H00 * ws[2*(size2+i)+1];
00218 
00219       }
00220       for( int i = 0; i < 2*size1; i++ ) { 
00221          ws[i] = sdata[i]; 
00222       }
00223    }
00224 
00225 #ifdef STORM_FWT_CCHECKUSAGE
00226    if ( size1 > size ) return 2;
00227 #endif
00228 
00229    return 0;
00230 
00231 #endif
00232 
00233 } 
00234 
00235 
00236 
00237 int g1ifwt( 
00238           const int& Sizef,
00239           const int& ns,
00240           const int& size,
00241           const double* wdata,
00242                 double* sdata,
00243                 double* ws
00244 ) { 
00245 
00246 #ifdef STORM_USEF
00247 
00248    int iflag;
00249    dg1ifwtws_( &Sizef, &ns, &size, wdata, sdata, ws, &iflag );
00250    return iflag;
00251 
00252 #else
00253 
00254    int size2;
00255    int size1 = ns;
00256 
00257 #ifdef STORM_FWT_CCHECKUSAGE
00258    if ( size < ns ) return 1;
00259 #endif
00260 
00261    if ( size == ns ) {
00262       for( int i = 0; i < 2*size; i++ ) { 
00263          sdata[i] = wdata[i]; 
00264       }
00265       return 0;
00266    }
00267    for( int i = 0; i < 2*size; i++ ) { 
00268       ws[i] = wdata[i]; 
00269    }
00270    while ( size1 < size ) {
00271       size2 = size1; 
00272       size1 = 2 * size1;
00273       for( int i = 0; i < size2; i++ ) {
00274 
00275          sdata[4*i] = H00 * ws[2*i] 
00276                     + H11 * ws[2*(size2+i)] 
00277                     + H10 * ws[2*i+1];
00278 
00279          sdata[4*i+1] = - H10 * ws[2*(size2+i)] 
00280                       + H11 * ws[2*i+1] 
00281                       + H00 * ws[2*(size2+i)+1];
00282 
00283          sdata[4*i+2] = H00 * ws[2*i] 
00284                       - H11 * ws[2*(size2+i)] 
00285                       - H10 * ws[2*i+1];
00286 
00287          sdata[4*i+3] = - H10 * ws[2*(size2+i)] 
00288                       + H11 * ws[2*i+1] 
00289                       - H00 * ws[2*(size2+i)+1];
00290 
00291       }
00292       for( int i = 0; i < 2*size1; i++ ) { 
00293          ws[i] = sdata[i]; 
00294       }
00295    }
00296 
00297 #ifdef STORM_FWT_CCHECKUSAGE
00298    if ( size1 > size ) return 2;
00299 #endif
00300 
00301    return 0;
00302 
00303 #endif
00304 
00305 } 
00306 
00307 
00308 #undef H00
00309 #undef H10
00310 #undef H11
00311 

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