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

hifwt2ds.cpp

Go to the documentation of this file.
00001 // hifwt2ds.cpp
00002 //////////////////////////////////////////////////////////////////////
00003 //          (c) Copyright 1994-2002 Brown Deer Technology, LLC.
00004 //                        All rights reserved.
00005 //////////////////////////////////////////////////////////////////////
00006 
00007 #ifdef STORM_USEF
00008 #include "hifwt2ds_.h"
00009 #include "dhifwt2ds_.h"
00010 #include "ihifwt2ds_.h"
00011 #include "hifwt2dsws_.h"
00012 #include "dhifwt2dsws_.h"
00013 #include "ihifwt2dsws_.h"
00014 #endif
00015 
00016 #include "stormdef.h"
00017 #define INVSQRT2 STORMDEF_MATHCONST_INVSQRT2
00018 
00019 int hifwt2ds( 
00020           const int& Sizef2d,
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    hifwt2ds_( &Sizef2d, &ns, &size, wdata, sdata, &iflag );
00031    return iflag;
00032 
00033 #else
00034 
00035    int ii,size2;
00036    int size1 = ns;
00037    float *u = new float[Sizef2d];
00038    float *v = new float[Sizef2d];
00039 
00040 #ifdef STORM_FWT_CCHECKUSAGE
00041    if ( size1 < ns ) return 1;
00042 #endif
00043 
00044    for( int i = 0; i < size*size; i++ ) {
00045       sdata[i] = wdata[i];
00046    }
00047 
00048    if ( size == ns ) return 0;
00049 
00050    while ( size1 < size ) {
00051 
00052       size2 = size1;
00053       size1 = 2 * size1;
00054 
00055       for( int j = 0; j < size1; j++ ) {        // index 1
00056          for( int i = 0; i < size1; i++ ) {
00057             ii = i * size;
00058             u[i] = sdata[ii+j];
00059          }
00060          for( int i = 0; i < size2; i++ ) {
00061             v[2*i] = ( u[i] + u[size2+i] ) * INVSQRT2;
00062             v[2*i+1] = ( u[i] - u[size2+i] ) * INVSQRT2;
00063          }
00064          for( int i = 0; i < size1; i++ ) {
00065             ii = i * size;
00066             sdata[ii+j] = v[i];
00067          }  
00068       }
00069 
00070       for( int i = 0; i < size1; i++ ) {        // index 2
00071          ii = i * size;
00072          for( int j = 0; j < size1; j++ ) {
00073             u[j] = sdata[ii+j];
00074          }
00075             for( int j = 0; j < size2; j++ ) {
00076                v[2*j] = ( u[j] + u[size2+j] ) * INVSQRT2;
00077                v[2*j+1] = ( u[j] - u[size2+j] ) * INVSQRT2;
00078             }
00079          for( int j = 0; j < size1; j++ ) {
00080             sdata[ii+j] = v[j];
00081          }
00082       }
00083 
00084    }
00085    
00086    delete [] u;
00087    delete [] v;
00088 
00089 #ifdef STORM_FWT_CCHECKUSAGE
00090    if ( size1 > size ) return 2;
00091 #endif
00092 
00093    return 0;
00094 
00095 #endif
00096 } 
00097 
00098 
00099 int hifwt2ds( 
00100           const int& Sizef2d,
00101           const int& ns,
00102           const int& size,
00103           const double* wdata,
00104                 double* sdata
00105 ) { 
00106 
00107 #ifdef STORM_USEF
00108 
00109    int iflag;
00110    dhifwt2ds_( &Sizef2d, &ns, &size, wdata, sdata, &iflag );
00111    return iflag;
00112 
00113 #else
00114 
00115    int ii,size2;
00116    int size1 = ns;
00117    double *u = new double[Sizef2d];
00118    double *v = new double[Sizef2d];
00119 
00120 #ifdef STORM_FWT_CCHECKUSAGE
00121    if ( size1 < ns ) return 1;
00122 #endif
00123 
00124    for( int i = 0; i < size*size; i++ ) {
00125       sdata[i] = wdata[i];
00126    }
00127 
00128    if ( size == ns ) return 0;
00129 
00130    while ( size1 < size ) {
00131 
00132       size2 = size1;
00133       size1 = 2 * size1;
00134 
00135       for( int j = 0; j < size1; j++ ) {        // index 1
00136          for( int i = 0; i < size1; i++ ) {
00137             ii = i * size;
00138             u[i] = sdata[ii+j];
00139          }
00140          for( int i = 0; i < size2; i++ ) {
00141             v[2*i] = ( u[i] + u[size2+i] ) * INVSQRT2;
00142             v[2*i+1] = ( u[i] - u[size2+i] ) * INVSQRT2;
00143          }
00144          for( int i = 0; i < size1; i++ ) {
00145             ii = i * size;
00146             sdata[ii+j] = v[i];
00147          }
00148       }
00149 
00150       for( int i = 0; i < size1; i++ ) {        // index 2
00151          ii = i * size;
00152          for( int j = 0; j < size1; j++ ) {
00153             u[j] = sdata[ii+j];
00154          }
00155          for( int j = 0; j < size2; j++ ) {
00156             v[2*j] = ( u[j] + u[size2+j] ) * INVSQRT2;
00157             v[2*j+1] = ( u[j] - u[size2+j] ) * INVSQRT2;
00158          }
00159          for( int j = 0; j < size1; j++ ) {
00160             sdata[ii+j] = v[j];
00161          }
00162       }
00163 
00164    }
00165 
00166    delete [] u;
00167    delete [] v;
00168 
00169 #ifdef STORM_FWT_CCHECKUSAGE
00170    if ( size1 > size ) return 2;
00171 #endif
00172 
00173    return 0;
00174 
00175 #endif
00176 } 
00177 
00178 
00179 int hifwt2ds( 
00180           const int& Sizef2d,
00181           const int& ns,
00182           const int& size,
00183           const int* wdata,
00184                 int* sdata
00185 ) { 
00186 
00187 #ifdef STORM_USEF
00188 
00189    int iflag;
00190    ihifwt2ds_( &Sizef2d, &ns, &size, wdata, sdata, &iflag );
00191    return iflag;
00192 
00193 #else
00194 
00195    int ii,size2;
00196    int size1 = ns;
00197    int *u = new int[Sizef2d];
00198    int *v = new int[Sizef2d];
00199 
00200 #ifdef STORM_FWT_CCHECKUSAGE
00201    if ( size1 < ns ) return 1;
00202 #endif
00203 
00204    for( int i = 0; i < size*size; i++ ) {
00205       sdata[i] = wdata[i];
00206    }
00207 
00208    if ( size == ns ) return 0;
00209 
00210    while ( size1 < size ) {
00211 
00212       size2 = size1;
00213       size1 = 2 * size1;
00214 
00215       for( int j = 0; j < size1; j++ ) {        // index 1
00216          for( int i = 0; i < size1; i++ ) {
00217             ii = i * size;
00218             u[i] = sdata[ii+j];
00219          }
00220          for( int i = 0; i < size2; i++ ) {
00221             v[2*i] = ( u[i] + u[size2+i] ) / 2;
00222             v[2*i+1] = u[i] - u[size2+i];
00223          }
00224          for( int i = 0; i < size1; i++ ) {
00225             ii = i * size;
00226             sdata[ii+j] = v[i];
00227          }  
00228       }
00229 
00230       for( int i = 0; i < size1; i++ ) {        // index 2
00231          ii = i * size;
00232          for( int j = 0; j < size1; j++ ) {
00233             u[j] = sdata[ii+j];
00234          }
00235             for( int j = 0; j < size2; j++ ) {
00236                v[2*j] = ( u[j] + u[size2+j] ) / 2;
00237                v[2*j+1] = u[j] - u[size2+j];
00238             }
00239          for( int j = 0; j < size1; j++ ) {
00240             sdata[ii+j] = v[j];
00241          }
00242       }
00243 
00244    }
00245    
00246    delete [] u;
00247    delete [] v;
00248 
00249 #ifdef STORM_FWT_CCHECKUSAGE
00250    if ( size1 > size ) return 2;
00251 #endif
00252 
00253    return 0;
00254 
00255 #endif
00256 } 
00257 
00258 
00259 int hifwt2ds( 
00260           const int& Sizef2d,
00261           const int& ns,
00262           const int& size,
00263           const float* wdata,
00264                 float* sdata,
00265                 float* ws
00266 ) { 
00267 
00268 #ifdef STORM_USEF
00269 
00270    int iflag;
00271    hifwt2dsws_( &Sizef2d, &ns, &size, wdata, sdata, ws, &iflag );
00272    return iflag;
00273 
00274 #else
00275 
00276    int ii,size2;
00277    int size1 = ns;
00278    float *u = ws;
00279    float *v = &ws[Sizef2d];
00280 
00281 #ifdef STORM_FWT_CCHECKUSAGE
00282    if ( size1 < ns ) return 1;
00283 #endif
00284 
00285    for( int i = 0; i < size*size; i++ ) {
00286       sdata[i] = wdata[i];
00287    }
00288 
00289    if ( size == ns ) return 0;
00290 
00291    while ( size1 < size ) {
00292 
00293       size2 = size1;
00294       size1 = 2 * size1;
00295 
00296       for( int j = 0; j < size1; j++ ) {        // index 1
00297          for( int i = 0; i < size1; i++ ) {
00298             ii = i * size;
00299             u[i] = sdata[ii+j];
00300          }
00301          for( int i = 0; i < size2; i++ ) {
00302             v[2*i] = ( u[i] + u[size2+i] ) * INVSQRT2;
00303             v[2*i+1] = ( u[i] - u[size2+i] ) * INVSQRT2;
00304          }
00305          for( int i = 0; i < size1; i++ ) {
00306             ii = i * size;
00307             sdata[ii+j] = v[i];
00308          }  
00309       }
00310 
00311       for( int i = 0; i < size1; i++ ) {        // index 2
00312          ii = i * size;
00313          for( int j = 0; j < size1; j++ ) {
00314             u[j] = sdata[ii+j];
00315          }
00316          for( int j = 0; j < size2; j++ ) {
00317             v[2*j] = ( u[j] + u[size2+j] ) * INVSQRT2;
00318             v[2*j+1] = ( u[j] - u[size2+j] ) * INVSQRT2;
00319          }
00320          for( int j = 0; j < size1; j++ ) {
00321             sdata[ii+j] = v[j];
00322          }
00323       }
00324 
00325    }
00326    
00327 #ifdef STORM_FWT_CCHECKUSAGE
00328    if ( size1 > size ) return 2;
00329 #endif
00330 
00331    return 0;
00332 
00333 #endif
00334 } 
00335 
00336 
00337 int hifwt2ds( 
00338           const int& Sizef2d,
00339           const int& ns,
00340           const int& size,
00341           const double* wdata,
00342                 double* sdata,
00343                 double* ws
00344 ) { 
00345 
00346 #ifdef STORM_USEF
00347 
00348    int iflag;
00349    dhifwt2dsws_( &Sizef2d, &ns, &size, wdata, sdata, ws, &iflag );
00350    return iflag;
00351 
00352 #else
00353 
00354    int ii,size2;
00355    int size1 = ns;
00356    double *u = ws;
00357    double *v = &ws[Sizef2d];
00358 
00359 #ifdef STORM_FWT_CCHECKUSAGE
00360    if ( size1 < ns ) return 1;
00361 #endif
00362 
00363    for( int i = 0; i < size*size; i++ ) {
00364       sdata[i] = wdata[i];
00365    }
00366 
00367    if ( size == ns ) return 0;
00368 
00369    while ( size1 < size ) {
00370 
00371       size2 = size1;
00372       size1 = 2 * size1;
00373 
00374       for( int j = 0; j < size1; j++ ) {        // index 1
00375          for( int i = 0; i < size1; i++ ) {
00376             ii = i * size;
00377             u[i] = sdata[ii+j];
00378          }
00379          for( int i = 0; i < size2; i++ ) {
00380             v[2*i] = ( u[i] + u[size2+i] ) * INVSQRT2;
00381             v[2*i+1] = ( u[i] - u[size2+i] ) * INVSQRT2;
00382          }
00383          for( int i = 0; i < size1; i++ ) {
00384             ii = i * size;
00385             sdata[ii+j] = v[i];
00386          }
00387       }
00388 
00389       for( int i = 0; i < size1; i++ ) {        // index 2
00390          ii = i * size;
00391          for( int j = 0; j < size1; j++ ) {
00392             u[j] = sdata[ii+j];
00393          }
00394          for( int j = 0; j < size2; j++ ) {
00395             v[2*j] = ( u[j] + u[size2+j] ) * INVSQRT2;
00396             v[2*j+1] = ( u[j] - u[size2+j] ) * INVSQRT2;
00397          }
00398          for( int j = 0; j < size1; j++ ) {
00399             sdata[ii+j] = v[j];
00400          }
00401       }
00402 
00403    }
00404 
00405 #ifdef STORM_FWT_CCHECKUSAGE
00406    if ( size1 > size ) return 2;
00407 #endif
00408 
00409    return 0;
00410 
00411 #endif
00412 } 
00413 
00414 
00415 int hifwt2ds( 
00416           const int& Sizef2d,
00417           const int& ns,
00418           const int& size,
00419           const int* wdata,
00420                 int* sdata,
00421                 int* ws
00422 ) { 
00423 
00424 #ifdef STORM_USEF
00425 
00426    int iflag;
00427    ihifwt2dsws_( &Sizef2d, &ns, &size, wdata, sdata, ws, &iflag );
00428    return iflag;
00429 
00430 #else
00431 
00432    int ii,size2;
00433    int size1 = ns;
00434    int *u = ws;
00435    int *v = &ws[Sizef2d];
00436 
00437 #ifdef STORM_FWT_CCHECKUSAGE
00438    if ( size1 < ns ) return 1;
00439 #endif
00440 
00441    for( int i = 0; i < size*size; i++ ) {
00442       sdata[i] = wdata[i];
00443    }
00444 
00445    if ( size == ns ) return 0;
00446 
00447    while ( size1 < size ) {
00448 
00449       size2 = size1;
00450       size1 = 2 * size1;
00451 
00452       for( int j = 0; j < size1; j++ ) {        // index 1
00453          for( int i = 0; i < size1; i++ ) {
00454             ii = i * size;
00455             u[i] = sdata[ii+j];
00456          }
00457          for( int i = 0; i < size2; i++ ) {
00458             v[2*i] = ( u[i] + u[size2+i] ) / 2;
00459             v[2*i+1] = u[i] - u[size2+i];
00460          }
00461          for( int i = 0; i < size1; i++ ) {
00462             ii = i * size;
00463             sdata[ii+j] = v[i];
00464          }  
00465       }
00466 
00467       for( int i = 0; i < size1; i++ ) {        // index 2
00468          ii = i * size;
00469          for( int j = 0; j < size1; j++ ) {
00470             u[j] = sdata[ii+j];
00471          }
00472          for( int j = 0; j < size2; j++ ) {
00473             v[2*j] = ( u[j] + u[size2+j] ) / 2;
00474             v[2*j+1] = u[j] - u[size2+j];
00475          }
00476          for( int j = 0; j < size1; j++ ) {
00477             sdata[ii+j] = v[j];
00478          }
00479       }
00480 
00481    }
00482   
00483 #ifdef STORM_FWT_CCHECKUSAGE
00484    if ( size1 > size ) return 2;
00485 #endif
00486 
00487    return 0;
00488 
00489 #endif
00490 } 
00491 
00492 #undef INVSQRT2
00493 

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