00001
00002
00003
00004
00005
00006
00007 #ifdef STORM_USEF
00008 #include "rtmrartjiwt_.h"
00009 #include "drtmrartjiwt_.h"
00010 #include "irtmrartjiwt_.h"
00011 #include "artmrartjiwt_.h"
00012 #include "dartmrartjiwt_.h"
00013 #include "iartmrartjiwt_.h"
00014 #endif
00015
00016 #ifdef USE_STD
00017 #include <iostream>
00018 using namespace std;
00019 #else
00020 #include <iostream.h>
00021 #endif
00022
00023 #include "stormdef.h"
00024 #define INVSQRT2 STORMDEF_MATHCONST_INVSQRT2
00025
00026 void rtmrartjiwt(
00027 const int& Msize,
00028 const int& mmax,
00029 int& mrastep,
00030 float* mracoef,
00031 float& data
00032 ) {
00033 #ifdef STORM_USEF
00034 rtmrartjiwt_( &Msize, &mmax, &mrastep, mracoef, &data );
00035 #else
00036 ++mrastep;
00037 for(int m = (mmax-1); m >= 0; --m ) {
00038 if ( (mrastep & (1<<m)) != 0 ) {
00039 mracoef[2*m] = ( mracoef[2*(m+1)] - mracoef[2*(m+1)+1] ) * INVSQRT2;
00040 } else {
00041 mracoef[2*m] = ( mracoef[2*(m+1)] + mracoef[2*(m+1)+1] ) * INVSQRT2;
00042 }
00043 }
00044 data = mracoef[0];
00045 #endif
00046 }
00047
00048
00049 void rtmrartjiwt(
00050 const int& Msize,
00051 const int& mmax,
00052 int& mrastep,
00053 double* mracoef,
00054 double& data
00055 ) {
00056 #ifdef STORM_USEF
00057 drtmrartjiwt_( &Msize, &mmax, &mrastep, mracoef, &data );
00058 #else
00059 ++mrastep;
00060 for(int m = (mmax-1); m >= 0; --m ) {
00061 if ( (mrastep & (1<<m)) != 0 ) {
00062 mracoef[2*m] = ( mracoef[2*(m+1)] - mracoef[2*(m+1)+1] ) * INVSQRT2;
00063 } else {
00064 mracoef[2*m] = ( mracoef[2*(m+1)] + mracoef[2*(m+1)+1] ) * INVSQRT2;
00065 }
00066 }
00067 data = mracoef[0];
00068 #endif
00069 }
00070
00071
00072 void rtmrartjiwt(
00073 const int& Msize,
00074 const int& mmax,
00075 int& mrastep,
00076 int* mracoef,
00077 int& data
00078 ) {
00079 #ifdef STORM_USEF
00080 irtmrartjiwt_( &Msize, &mmax, &mrastep, mracoef, &data );
00081 #else
00082 int tmp;
00083 ++mrastep;
00084 for(int m = (mmax-1); m >= 0; --m ) {
00085 if ( (mrastep & (1<<m)) != 0 ) {
00086 tmp = mracoef[2*(m+1)+1];
00087 if ( (tmp >= 0) || ((tmp & 0x00000001) == 0) ) {
00088 mracoef[2*m] = mracoef[2*(m+1)] - tmp/2;
00089 } else {
00090 mracoef[2*m] = mracoef[2*(m+1)] - (tmp/2-1);
00091 }
00092 } else {
00093 tmp = mracoef[2*(m+1)+1] + 1;
00094 if ( (tmp >= 0) || ((tmp & 0x00000001) == 0) ) {
00095 mracoef[2*m] = mracoef[2*(m+1)] + tmp/2;
00096 } else {
00097 mracoef[2*m] = mracoef[2*(m+1)] + (tmp/2-1);
00098 }
00099 }
00100 }
00101 data = mracoef[0];
00102 #endif
00103 }
00104
00105
00106 void rtmrartjiwt(
00107 const int& Asize,
00108 const int& Msize,
00109 const int& amax,
00110 const int& mmax,
00111 int& mrastep,
00112 float* mracoef,
00113 float* data
00114 ) {
00115 #ifdef STORM_USEF
00116 artmrartjiwt_( &Asize,&Msize, &amax,&mmax, &mrastep, mracoef, data );
00117 #else
00118 ++mrastep;
00119 for( int a =0; a <= amax; a++ ) {
00120 for(int m = (mmax-1); m >= 0; --m ) {
00121 if ( (mrastep & (1<<m)) != 0 ) {
00122 mracoef[ a*2*Msize + 2*m] = ( mracoef[ a*2*Msize + 2*(m+1)]
00123 - mracoef[ a*2*Msize + 2*(m+1)+1] ) * INVSQRT2;
00124 } else {
00125 mracoef[ a*2*Msize + 2*m] = ( mracoef[ a*2*Msize + 2*(m+1)]
00126 + mracoef[ a*2*Msize + 2*(m+1)+1] ) * INVSQRT2;
00127 }
00128 }
00129 data[a] = mracoef[a*2*Msize];
00130 }
00131 #endif
00132 }
00133
00134
00135 void rtmrartjiwt(
00136 const int& Asize,
00137 const int& Msize,
00138 const int& amax,
00139 const int& mmax,
00140 int& mrastep,
00141 double* mracoef,
00142 double* data
00143 ) {
00144 #ifdef STORM_USEF
00145 dartmrartjiwt_( &Asize,&Msize, &amax,&mmax, &mrastep, mracoef, data );
00146 #else
00147 ++mrastep;
00148 for( int a =0; a <= amax; a++ ) {
00149 for(int m = (mmax-1); m >= 0; --m ) {
00150 if ( (mrastep & (1<<m)) != 0 ) {
00151 mracoef[ a*2*Msize + 2*m] = ( mracoef[ a*2*Msize + 2*(m+1)]
00152 - mracoef[ a*2*Msize + 2*(m+1)+1] ) * INVSQRT2;
00153 } else {
00154 mracoef[ a*2*Msize + 2*m] = ( mracoef[ a*2*Msize + 2*(m+1)]
00155 + mracoef[ a*2*Msize + 2*(m+1)+1] ) * INVSQRT2;
00156 }
00157 }
00158 data[a] = mracoef[a*2*Msize];
00159 }
00160 #endif
00161 }
00162
00163
00164 void rtmrartjiwt(
00165 const int& Asize,
00166 const int& Msize,
00167 const int& amax,
00168 const int& mmax,
00169 int& mrastep,
00170 int* mracoef,
00171 int* data
00172 ) {
00173 #ifdef STORM_USEF
00174 iartmrartjiwt_( &Asize,&Msize, &amax,&mmax, &mrastep, mracoef, data );
00175 #else
00176 ++mrastep;
00177 for( int a =0; a <= amax; a++ ) {
00178 for(int m = (mmax-1); m >= 0; --m ) {
00179 if ( (mrastep & (1<<m)) != 0 ) {
00180 int tmp = mracoef[a*2*Msize+2*(m+1)+1];
00181 if ( (tmp >= 0) || ((tmp & 0x00000001) == 0) ) {
00182 mracoef[a*2*Msize+2*m]=mracoef[a*2*Msize+2*(m+1)] - tmp/2;
00183 } else {
00184 mracoef[a*2*Msize+2*m]=mracoef[a*2*Msize+2*(m+1)] - (tmp/2-1);
00185 }
00186 } else {
00187 int tmp = mracoef[a*2*Msize+2*(m+1)+1] + 1;
00188 if ( (tmp >= 0) || ((tmp & 0x00000001) == 0) ) {
00189 mracoef[a*2*Msize+2*m]=mracoef[a*2*Msize+2*(m+1)] + tmp/2;
00190 } else {
00191 mracoef[a*2*Msize+2*m]=mracoef[a*2*Msize+2*(m+1)] + (tmp/2-1);
00192 }
00193 }
00194 }
00195 data[a] = mracoef[a*2*Msize];
00196 }
00197 #endif
00198 }
00199