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