git-svn-id: svn://db.shs.com.ru/pip@340 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2017-04-12 15:43:08 +00:00
parent 1f98004ce8
commit 557f80ae70
4 changed files with 42 additions and 7 deletions

View File

@@ -41,13 +41,19 @@ int asize(ssize_t s, size_t pid_rsize) {
return (1 << t);
}
int main(int argc, char *argv[]) {
PIFFTWf fft;
PIVector<float> in;
PIDeque<double> in;
for (int i = 0; i < 5; ++i)
in << i%10;
/*PIFFTWd fft;
fft.preparePlan(50, PIFFTWd::foReal);
PIVector<complexd> out = fft.calcFFT(in);*/
piCout << in.data();
in.align();
piCout << in.data();
in = PIDeque<double>();
for (int i = 0; i < 50; ++i)
in << i%10;
fft.preparePlan(50, PIFFTWf::foReal);
PIVector<complexf> out = fft.calcFFT(in);
piCout << out;
piCout << in.data();
/*for (int i = 0; i < 16; ++i) {
piCout << asize(i, 100);
}

View File

@@ -217,6 +217,18 @@ public:
pid_size = os;
return *this;
}
PIDeque<T> & align() {
//printf("align %p\n", pid_data);
if (!pid_data) return *this;
T * p_d = (T*)(amalloc(pid_rsize*sizeof(T)));
//printf("alloc %p\n", p_d);
assert(p_d);
memcpy(p_d, pid_data, pid_size*sizeof(T));
free((uchar*)pid_data);
pid_data = p_d;
//printf("%p\n", p_d);
return *this;
}
PIDeque<T> & insert(size_t index, const T & v = T()) {
bool dir = pid_rsize <= 2 ? true : (index >= pid_rsize / 2 ? true : false);

View File

@@ -93,10 +93,12 @@
#include <stdarg.h>
#include <stddef.h>
#include <stdlib.h>
#ifdef WINDOWS
# include <windef.h>
# include <winbase.h>
# include <stdlib.h>
# include <malloc.h>
# ifdef CC_VC
# define SHUT_RDWR 2
# pragma comment(lib, "Ws2_32.lib")
@@ -112,6 +114,21 @@
inline int random() {return rand();}
#endif
#ifndef PIP_MEMALIGN_BYTES
# define PIP_MEMALIGN_BYTES (sizeof(void*)*4)
#endif
#ifdef WINDOWS
# ifdef CC_GCC
# define amalloc(s) __mingw_aligned_malloc(s, PIP_MEMALIGN_BYTES)
# else
# ifdef CC_VC
# define amalloc(s) _aligned_malloc(s, PIP_MEMALIGN_BYTES)
# endif
# endif
#else
# define amalloc(s) aligned_alloc(PIP_MEMALIGN_BYTES, s)
#endif
#ifdef ANDROID
# define tcdrain(fd) ioctl(fd, TCSBRK, 1)
//inline int wctomb(char * c, wchar_t w) {*c = ((char * )&w)[0]; return 1;}

View File

@@ -121,8 +121,8 @@ inline int sign(const float & x) {return (x < 0.) ? -1 : (x > 0. ? 1 : 0);}
inline int sign(const double & x) {return (x < 0.) ? -1 : (x > 0. ? 1 : 0);}
inline complexd sign(const complexd & x) {return complexd(sign(x.real()), sign(x.imag()));}
inline int pow2(const int p) {return 1 << p;}
inline double sqr(const int v) {return v * v;}
inline double sqr(const float & v) {return v * v;}
inline int sqr(const int v) {return v * v;}
inline float sqr(const float & v) {return v * v;}
inline double sqr(const double & v) {return v * v;}
inline double sinc(const double & v) {if (v == 0.) return 1.; double t = M_PI * v; return sin(t) / t;}
inline complexd round(const complexd & c) {return complexd(piRound<double>(c.real()), piRound<double>(c.imag()));}