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

pd4ifwt2ds.cpp

Go to the documentation of this file.
00001 // pd4ifwt2ds.cpp
00002 //////////////////////////////////////////////////////////////////////
00003 //          (c) Copyright 1994-2002 Brown Deer Technology, LLC.
00004 //                        All rights reserved.
00005 //////////////////////////////////////////////////////////////////////
00006 
00007 #ifdef STORM_USEF
00008 #include "pd4ifwt2ds_.h"
00009 #include "dpd4ifwt2ds_.h"
00010 #include "pd4ifwt2dsws_.h"
00011 #include "dpd4ifwt2dsws_.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 pd4ifwt2ds( 
00021           const int& Sizef2d,
00022           const int& ns,
00023           const int& ks,
00024           const int& size,
00025           const float* wdata,
00026                 float* sdata
00027 ) { 
00028 
00029 #ifdef STORM_USEF
00030 
00031    int iflag;
00032    pd4ifwt2ds_( &Sizef2d, &ns, &ks, &size, wdata, sdata, &iflag );
00033    return iflag;
00034 
00035 #else
00036 
00037    int ii;
00038    int i1,j1;
00039    int size2;
00040    int size1 = ns;
00041    float *u = new float[Sizef2d];
00042    float *v = new float[Sizef2d];
00043 
00044 #ifdef STORM_FWT_CCHECKUSAGE
00045    if ( size1 < ns ) return 1;
00046 #endif
00047 
00048    for( int i = 0; i < size*size; i++ ) {
00049       sdata[i] = wdata[i];
00050    }
00051 
00052    if ( size == ns ) return 0;
00053 
00054    while ( size1 < size ) {
00055 
00056       size2 = size1;
00057       size1 = 2 * size1;
00058 
00059       for( int j = 0; j < size1; j++ ) {        // index 1
00060          for( int i = 0; i < size1; i++ ) {
00061             ii = i * size;
00062             u[i] = sdata[ii+j];
00063          }
00064          for( int i = 0; i < size2; i++ ) {
00065             i1 = (i-1+size2)%size2;
00066             v[2*i] = H0*u[i] + H2*u[i1]
00067               + H3*u[size2+i] + H1*u[size2+i1];
00068             v[2*i+1] = H1*u[i] + H3*u[i1]
00069               - H2*u[size2+i] - H0*u[size2+i1];
00070          }
00071          for( int i = 0; i < size1; i++ ) {
00072             ii = i * size;
00073             sdata[ii+j] = v[i];
00074          }  
00075       }
00076 
00077       for( int i = 0; i < size1; i++ ) {        // index 2
00078          ii = i * size;
00079          for( int j = 0; j < size1; j++ ) {
00080             u[j] = sdata[ii+j];
00081          }
00082          for( int j = 0; j < size2; j++ ) {
00083             j1 = (j-1+size2)%size2;
00084             v[2*j] = H0*u[j] + H2*u[j1]
00085               + H3*u[size2+j] + H1*u[size2+j1];
00086             v[2*j+1] = H1*u[j] + H3*u[j1]
00087               - H2*u[size2+j] - H0*u[size2+j1];
00088          }
00089          for( int j = 0; j < size1; j++ ) {
00090             sdata[ii+j] = v[j];
00091          }
00092       }
00093 
00094    }
00095    
00096    delete [] u;
00097    delete [] v;
00098 
00099 #ifdef STORM_FWT_CCHECKUSAGE
00100    if ( size1 > size ) return 2;
00101 #endif
00102 
00103    return 0;
00104 
00105 #endif
00106 } 
00107 
00108 
00109 int pd4ifwt2ds( 
00110           const int& Sizef2d,
00111           const int& ns,
00112           const int& ks,
00113           const int& size,
00114           const double* wdata,
00115                 double* sdata
00116 ) { 
00117 
00118 #ifdef STORM_USEF
00119 
00120    int iflag;
00121    dpd4ifwt2ds_( &Sizef2d, &ns, &ks, &size, wdata, sdata, &iflag );
00122    return iflag;
00123 
00124 #else
00125 
00126    int ii;
00127    int i1,j1;
00128    int size2;
00129    int size1 = ns;
00130    double *u = new double[Sizef2d];
00131    double *v = new double[Sizef2d];
00132 
00133 #ifdef STORM_FWT_CCHECKUSAGE
00134    if ( size1 < ns ) return 1;
00135 #endif
00136 
00137    for( int i = 0; i < size*size; i++ ) {
00138       sdata[i] = wdata[i];
00139    }
00140 
00141    if ( size == ns ) return 0;
00142 
00143    while ( size1 < size ) {
00144 
00145       size2 = size1;
00146       size1 = 2 * size1;
00147 
00148       for( int j = 0; j < size1; j++ ) {        // index 1
00149          for( int i = 0; i < size1; i++ ) {
00150             ii = i * size;
00151             u[i] = sdata[ii+j];
00152          }
00153          for( int i = 0; i < size2; i++ ) {
00154             i1 = (i-1+size2)%size2;
00155             v[2*i] = H0*u[i] + H2*u[i1]
00156               + H3*u[size2+i] + H1*u[size2+i1];
00157             v[2*i+1] = H1*u[i] + H3*u[i1]
00158               - H2*u[size2+i] - H0*u[size2+i1];
00159          }
00160          for( int i = 0; i < size1; i++ ) {
00161             ii = i * size;
00162             sdata[ii+j] = v[i];
00163          }
00164       }
00165 
00166       for( int i = 0; i < size1; i++ ) {        // index 2
00167          ii = i * size;
00168          for( int j = 0; j < size1; j++ ) {
00169             u[j] = sdata[ii+j];
00170          }
00171          for( int j = 0; j < size2; j++ ) {
00172             j1 = (j-1+size2)%size2;
00173             v[2*j] = H0*u[j] + H2*u[j1]
00174               + H3*u[size2+j] + H1*u[size2+j1];
00175             v[2*j+1] = H1*u[j] + H3*u[j1]
00176               - H2*u[size2+j] - H0*u[size2+j1];
00177          }
00178          for( int j = 0; j < size1; j++ ) {
00179             sdata[ii+j] = v[j];
00180          }
00181       }
00182 
00183    }
00184 
00185    delete [] u;
00186    delete [] v;
00187 
00188 #ifdef STORM_FWT_CCHECKUSAGE
00189    if ( size1 > size ) return 2;
00190 #endif
00191 
00192    return 0;
00193 
00194 #endif
00195 } 
00196 
00197 
00198 int pd4ifwt2ds( 
00199           const int& Sizef2d,
00200           const int& ns,
00201           const int& ks,
00202           const int& size,
00203           const float* wdata,
00204                 float* sdata,
00205                 float* ws
00206 ) { 
00207 
00208 #ifdef STORM_USEF
00209 
00210    int iflag;
00211    pd4ifwt2dsws_( &Sizef2d, &ns, &ks, &size, wdata, sdata, ws, &iflag );
00212    return iflag;
00213 
00214 #else
00215 
00216    int ii;
00217    int i1,j1;
00218    int size2;
00219    int size1 = ns;
00220    float *u = ws;
00221    float *v = &ws[Sizef2d];
00222 
00223 #ifdef STORM_FWT_CCHECKUSAGE
00224    if ( size1 < ns ) return 1;
00225 #endif
00226 
00227    for( int i = 0; i < size*size; i++ ) {
00228       sdata[i] = wdata[i];
00229    }
00230 
00231    if ( size == ns ) return 0;
00232 
00233    while ( size1 < size ) {
00234 
00235       size2 = size1;
00236       size1 = 2 * size1;
00237 
00238       for( int j = 0; j < size1; j++ ) {        // index 1
00239          for( int i = 0; i < size1; i++ ) {
00240             ii = i * size;
00241             u[i] = sdata[ii+j];
00242          }
00243          for( int i = 0; i < size2; i++ ) {
00244             i1 = (i-1+size2)%size2;
00245             v[2*i] = H0*u[i] + H2*u[i1]
00246               + H3*u[size2+i] + H1*u[size2+i1];
00247             v[2*i+1] = H1*u[i] + H3*u[i1]
00248               - H2*u[size2+i] - H0*u[size2+i1];
00249          }
00250          for( int i = 0; i < size1; i++ ) {
00251             ii = i * size;
00252             sdata[ii+j] = v[i];
00253          }  
00254       }
00255 
00256       for( int i = 0; i < size1; i++ ) {        // index 2
00257          ii = i * size;
00258          for( int j = 0; j < size1; j++ ) {
00259             u[j] = sdata[ii+j];
00260          }
00261          for( int j = 0; j < size2; j++ ) {
00262             j1 = (j-1+size2)%size2;
00263             v[2*j] = H0*u[j] + H2*u[j1]
00264               + H3*u[size2+j] + H1*u[size2+j1];
00265             v[2*j+1] = H1*u[j] + H3*u[j1]
00266               - H2*u[size2+j] - H0*u[size2+j1];
00267          }
00268          for( int j = 0; j < size1; j++ ) {
00269             sdata[ii+j] = v[j];
00270          }
00271       }
00272 
00273    }
00274    
00275 #ifdef STORM_FWT_CCHECKUSAGE
00276    if ( size1 > size ) return 2;
00277 #endif
00278 
00279    return 0;
00280 
00281 #endif
00282 } 
00283 
00284 
00285 int pd4ifwt2ds( 
00286           const int& Sizef2d,
00287           const int& ns,
00288           const int& ks,
00289           const int& size,
00290           const double* wdata,
00291                 double* sdata,
00292                 double* ws
00293 ) { 
00294 
00295 #ifdef STORM_USEF
00296 
00297    int iflag;
00298    dpd4ifwt2dsws_( &Sizef2d, &ns, &ks, &size, wdata, sdata, ws, &iflag );
00299    return iflag;
00300 
00301 #else
00302 
00303    int ii;
00304    int i1,j1;
00305    int size2;
00306    int size1 = ns;
00307    double *u = ws;
00308    double *v = &ws[Sizef2d];
00309 
00310 #ifdef STORM_FWT_CCHECKUSAGE
00311    if ( size1 < ns ) return 1;
00312 #endif
00313 
00314    for( int i = 0; i < size*size; i++ ) {
00315       sdata[i] = wdata[i];
00316    }
00317 
00318    if ( size == ns ) return 0;
00319 
00320    while ( size1 < size ) {
00321 
00322       size2 = size1;
00323       size1 = 2 * size1;
00324 
00325       for( int j = 0; j < size1; j++ ) {        // index 1
00326          for( int i = 0; i < size1; i++ ) {
00327             ii = i * size;
00328             u[i] = sdata[ii+j];
00329          }
00330          for( int i = 0; i < size2; i++ ) {
00331             i1 = (i-1+size2)%size2;
00332             v[2*i] = H0*u[i] + H2*u[i1]
00333               + H3*u[size2+i] + H1*u[size2+i1];
00334             v[2*i+1] = H1*u[i] + H3*u[i1]
00335               - H2*u[size2+i] - H0*u[size2+i1];
00336          }
00337          for( int i = 0; i < size1; i++ ) {
00338             ii = i * size;
00339             sdata[ii+j] = v[i];
00340          }
00341       }
00342 
00343       for( int i = 0; i < size1; i++ ) {        // index 2
00344          ii = i * size;
00345          for( int j = 0; j < size1; j++ ) {
00346             u[j] = sdata[ii+j];
00347          }
00348          for( int j = 0; j < size2; j++ ) {
00349             j1 = (j-1+size2)%size2;
00350             v[2*j] = H0*u[j] + H2*u[j1]
00351               + H3*u[size2+j] + H1*u[size2+j1];
00352             v[2*j+1] = H1*u[j] + H3*u[j1]
00353               - H2*u[size2+j] - H0*u[size2+j1];
00354          }
00355          for( int j = 0; j < size1; j++ ) {
00356             sdata[ii+j] = v[j];
00357          }
00358       }
00359 
00360    }
00361 
00362 #ifdef STORM_FWT_CCHECKUSAGE
00363    if ( size1 > size ) return 2;
00364 #endif
00365 
00366    return 0;
00367 
00368 #endif
00369 } 
00370 
00371 
00372 #undef H0
00373 #undef H1
00374 #undef H2
00375 #undef H3
00376 

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