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

g1fwt2ds.cpp

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

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