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

This commit is contained in:
2017-03-15 08:45:29 +00:00
parent 286b63e93d
commit a1d77eff32
5 changed files with 103 additions and 36 deletions

View File

@@ -63,9 +63,23 @@ int main(int argc, char *argv[]) {
c.start(); c.start();
piMSleep(3000);*/ piMSleep(3000);*/
PISystemTime st = PISystemTime::current(); /*PIScreen s;
piCout << PIDateTime::current(); s.enableExitCapture(PIKbdListener::F10);
piCout << PIDateTime::fromSystemTime(st); s.start();
TileList * list = new TileList();
for (int i = 0; i < 100; ++i)
list->content << TileList::Row(i, PIScreenTypes::CellFormat());
s.rootTile()->addTile(list);
s.waitForFinish();*/
PIDeque<int> d;
d.resize(atoi(argv[1]));
while (1) {
d.push_back(1);
d.pop_front();
piCout << d.size() << d.capacity() << d._start();
}
return 0; return 0;
} }

View File

@@ -156,6 +156,7 @@ void TileList::drawEvent(PIScreenDrawer * d) {
//int osp = piMini(3, lhei / 4); //int osp = piMini(3, lhei / 4);
int is = piClampi(offset, 0, piMaxi(0, content.size_s() - 1)), ie = piClampi(offset + lhei, 0, content.size_s()); int is = piClampi(offset, 0, piMaxi(0, content.size_s() - 1)), ie = piClampi(offset + lhei, 0, content.size_s());
if (is > 0) d->drawText(x_, y_, PIString(" /\\ ").repeat(width_ / 4), Green, Default, Bold); if (is > 0) d->drawText(x_, y_, PIString(" /\\ ").repeat(width_ / 4), Green, Default, Bold);
if (ie < content.size_s()) d->drawText(x_, y_ + height_ - 1, PIString(" \\/ ").repeat(width_ / 4), Green, Default, Bold);
//piCout << is << ie << offset << lhei << content.size_s(); //piCout << is << ie << offset << lhei << content.size_s();
for (int i = is; i < ie; ++i) { for (int i = is; i < ie; ++i) {
Row & r(content[i]); Row & r(content[i]);

View File

@@ -166,6 +166,7 @@ public:
ssize_t size_s() const {return pid_size;} ssize_t size_s() const {return pid_size;}
size_t length() const {return pid_size;} size_t length() const {return pid_size;}
size_t capacity() const {return pid_rsize;} size_t capacity() const {return pid_rsize;}
size_t _start() const {return pid_start;}
bool isEmpty() const {return (pid_size == 0);} bool isEmpty() const {return (pid_size == 0);}
T & operator [](size_t index) {return pid_data[pid_start + index];} T & operator [](size_t index) {return pid_data[pid_start + index];}
@@ -380,31 +381,40 @@ private:
inline void elementDelete(T & from) {from.~T();} inline void elementDelete(T & from) {from.~T();}
void dealloc() {deleteRaw(pid_data);} void dealloc() {deleteRaw(pid_data);}
inline void checkMove(bool direction) { inline void checkMove(bool direction) {
if (pid_size >= 4 && pid_size < pid_rsize / 6) { if (pid_size >= 4) {
/*if (direction) { if (pid_size < pid_rsize / 6) {
if (pid_start >= 4 && pid_start > pid_size + pid_size && pid_start > pid_rsize / 2) { /*if (direction) {
piCout << (int)this << "checkMove" << direction << pid_start << (int)pid_data << pid_rsize << pid_size; if (pid_start >= 4 && pid_start > pid_size + pid_size && pid_start > pid_rsize / 2) {
piCout << (int)this << "move from" << pid_start << "to" << pid_size << "," << (int)pid_data << pid_rsize << pid_size; piCout << (int)this << "checkMove" << direction << pid_start << (int)pid_data << pid_rsize << pid_size;
memmove(pid_data + pid_size, pid_data + pid_start, pid_size * sizeof(T)); piCout << (int)this << "move from" << pid_start << "to" << pid_size << "," << (int)pid_data << pid_rsize << pid_size;
pid_start = pid_size; memmove(pid_data + pid_size, pid_data + pid_start, pid_size * sizeof(T));
} pid_start = pid_size;
} else { }
if (ssize_t(pid_start) < ssize_t(pid_rsize) - pid_size - pid_size && ssize_t(pid_start) < ssize_t(pid_rsize / 2) - pid_size) { } else {
piCout << (int)this << "checkMove" << direction << pid_start << (int)pid_data << pid_rsize << pid_size; if (ssize_t(pid_start) < ssize_t(pid_rsize) - pid_size - pid_size && ssize_t(pid_start) < ssize_t(pid_rsize / 2) - pid_size) {
piCout << (int)this << "move from" << pid_start << "to" << (ssize_t(pid_rsize) - pid_size) << "," << (int)pid_data << pid_rsize << pid_size; piCout << (int)this << "checkMove" << direction << pid_start << (int)pid_data << pid_rsize << pid_size;
memmove(pid_data + ssize_t(pid_rsize) - pid_size - pid_size, pid_data + pid_start, pid_size * sizeof(T)); piCout << (int)this << "move from" << pid_start << "to" << (ssize_t(pid_rsize) - pid_size) << "," << (int)pid_data << pid_rsize << pid_size;
pid_start = ssize_t(pid_rsize) - pid_size - pid_size; memmove(pid_data + ssize_t(pid_rsize) - pid_size - pid_size, pid_data + pid_start, pid_size * sizeof(T));
} pid_start = ssize_t(pid_rsize) - pid_size - pid_size;
}*/ }
//printf("(%p) check move st=%d sz=%d rs=%d\n", this, pid_start, pid_size, pid_rsize); }*/
if (pid_start < pid_size + pid_size || pid_start > pid_rsize - pid_size - pid_size) { //printf("(%p) check move st=%d sz=%d rs=%d\n", this, pid_start, pid_size, pid_rsize);
ssize_t ns = (pid_rsize - pid_size) / 2; if (pid_start < pid_size + pid_size || pid_start > pid_rsize - pid_size - pid_size) {
if (pid_start != ns) { ssize_t ns = (pid_rsize - pid_size) / 2;
//printf("(%p) move %d -> %d\n", this, pid_start, ns); if (pid_start != ns) {
memmove(pid_data + ns, pid_data + pid_start, pid_size * sizeof(T)); //printf("(%p) move %d -> %d\n", this, pid_start, ns);
pid_start = ns; memmove(pid_data + ns, pid_data + pid_start, pid_size * sizeof(T));
pid_start = ns;
}
} }
} }
} else {
ssize_t ns = (pid_rsize - pid_size) / 2;
if (pid_start != ns) {
//printf("(%p) move %d -> %d\n", this, pid_start, ns);
memmove(pid_data + ns, pid_data + pid_start, pid_size * sizeof(T));
pid_start = ns;
}
} }
} }
inline void alloc(size_t new_size, bool direction, ssize_t start_offset = 0) { // direction == true -> alloc forward inline void alloc(size_t new_size, bool direction, ssize_t start_offset = 0) { // direction == true -> alloc forward

View File

@@ -59,14 +59,33 @@ PIVector<complexd> * PIFFT_double::calcFFT(const PIVector<double> & val) {
} }
PIVector<double> PIFFT_double::getAmplitude() { PIVector<double> PIFFT_double::getAmplitude() const {
PIVector<double> a; PIVector<double> ret;
ret.resize(result.size());
double tmp; double tmp;
for (uint i = 0; i < result.size(); i++) { for (uint i = 0; i < result.size(); i++) {
tmp = sqrt(result[i].real() * result[i].real() + result[i].imag() * result[i].imag()); tmp = sqrt(result[i].real() * result[i].real() + result[i].imag() * result[i].imag());
a.push_back(tmp); ret[i] = tmp;
} }
return a; return ret;
}
PIVector<double> PIFFT_double::getReal() const {
PIVector<double> ret;
ret.resize(result.size());
for (uint i = 0; i < result.size(); i++)
ret[i] = result[i].real();
return ret;
}
PIVector<double> PIFFT_double::getImag() const {
PIVector<double> ret;
ret.resize(result.size());
for (uint i = 0; i < result.size(); i++)
ret[i] = result[i].imag();
return ret;
} }
@@ -980,14 +999,33 @@ PIVector<complexf> * PIFFT_float::calcFFT(const PIVector<float> & val) {
} }
PIVector<float> PIFFT_float::getAmplitude() { PIVector<float> PIFFT_float::getAmplitude() const {
PIVector<float> a; PIVector<float> ret;
ret.resize(result.size());
float tmp; float tmp;
for (uint i = 0; i < result.size(); i++) { for (uint i = 0; i < result.size(); i++) {
tmp = sqrt(result[i].real() * result[i].real() + result[i].imag() * result[i].imag()); tmp = sqrt(result[i].real() * result[i].real() + result[i].imag() * result[i].imag());
a.push_back(tmp); ret[i] = tmp;
} }
return a; return ret;
}
PIVector<float> PIFFT_float::getReal() const {
PIVector<float> ret;
ret.resize(result.size());
for (uint i = 0; i < result.size(); i++)
ret[i] = result[i].real();
return ret;
}
PIVector<float> PIFFT_float::getImag() const {
PIVector<float> ret;
ret.resize(result.size());
for (uint i = 0; i < result.size(); i++)
ret[i] = result[i].imag();
return ret;
} }

View File

@@ -34,7 +34,9 @@ public:
PIVector<complexd> * calcFFT(const PIVector<double> &val); PIVector<complexd> * calcFFT(const PIVector<double> &val);
PIVector<complexd> * calcFFTinverse(const PIVector<complexd> &val); PIVector<complexd> * calcFFTinverse(const PIVector<complexd> &val);
PIVector<complexd> * calcHilbert(const PIVector<double> &val); PIVector<complexd> * calcHilbert(const PIVector<double> &val);
PIVector<double> getAmplitude(); PIVector<double> getAmplitude() const;
PIVector<double> getReal() const;
PIVector<double> getImag() const;
private: private:
PIVector<complexd> result; PIVector<complexd> result;
@@ -78,7 +80,9 @@ public:
PIVector<complexf> * calcFFT(const PIVector<float> &val); PIVector<complexf> * calcFFT(const PIVector<float> &val);
PIVector<complexf> * calcFFTinverse(const PIVector<complexf> &val); PIVector<complexf> * calcFFTinverse(const PIVector<complexf> &val);
PIVector<complexf> * calcHilbert(const PIVector<float> &val); PIVector<complexf> * calcHilbert(const PIVector<float> &val);
PIVector<float> getAmplitude(); PIVector<float> getAmplitude() const;
PIVector<float> getReal() const;
PIVector<float> getImag() const;
private: private:
PIVector<complexf> result; PIVector<complexf> result;