#include "pip.h" #include #include #include /*#include #include void print(PIConfig::Entry*e, PIString indent = "") { piCout << indent << e->name() << "=" << e->value(); indent += " "; e->children().forEach([=](PIConfig::Entry*e)->PIConfig::Entry*{print(e, indent); return e;}); } class AsyncIOWatcher: public PIThread { PIOBJECT_SUBCLASS(AsyncIOWatcher, PIThread) public: AsyncIOWatcher() { pipe_fd[0] = pipe_fd[1] = 0; if (pipe(pipe_fd) != 0) { piCoutObj << "Warning: can`t create pipe," << errorString(); } else { fd_list << pipe_fd[0]; } piCout << pipe_fd[0] << pipe_fd[1]; fd_list_changed = false; start(); } ~AsyncIOWatcher() { stop(); breakSelect(); if (!waitForFinish(2000)) terminate(); if (pipe_fd[0]) ::close(pipe_fd[0]); if (pipe_fd[1]) ::close(pipe_fd[1]); } void add(int fd) { que_mutex.lock(); fd_list_changed = true; if (!add_que.contains(fd)) add_que.enqueue(fd); que_mutex.unlock(); breakSelect(); } void remove(int fd) { que_mutex.lock(); fd_list_changed = true; if (!remove_que.contains(fd)) remove_que.enqueue(fd); que_mutex.unlock(); breakSelect(); } private: virtual void run() { que_mutex.lock(); if (fd_list_changed) { for (int i = 0; i < add_que.size_s(); ++i) { if (!fd_list.contains(add_que[i])) fd_list << add_que[i]; } for (int i = 0; i < remove_que.size_s(); ++i) { fd_list.removeAll(remove_que[i]); } add_que.clear(); remove_que.clear(); } fd_list_changed = false; que_mutex.unlock(); s_tv.tv_sec = 1; s_tv.tv_usec = 0; FD_ZERO(&s_set); int max_fd = 0; piForeachC (int fd, fd_list) { FD_SET(fd, &s_set); if (max_fd < fd) max_fd = fd; } int ret = select(max_fd + 1, &s_set, 0, 0, 0); piCout << "select" << ret; if (ret <= 0) return; read_buff.resize(1024); uint ibuff = 0; piForeachC (int fd, fd_list) { if (!FD_ISSET(fd, &s_set)) continue; if (fd == pipe_fd[0]) { read(fd, &ibuff, sizeof(ibuff)); piCoutObj << "breaked"; continue; } int readed = read(fd, read_buff.data(), read_buff.size_s()); piCout << "readed" << fd << readed; } } void breakSelect() { if (pipe_fd[1]) ::write(pipe_fd[1], "\0", 1); } PIQueue add_que, remove_que; PIDeque fd_list; PIByteArray read_buff; PIMutex que_mutex; bool fd_list_changed; int pipe_fd[2]; fd_set s_set; struct timeval s_tv; }; */ struct A { double arr[1000]; }; //PIKbdListener kbd(0, 0, false); // void swap(int & x, int & y) {int t = x; x = y; y = t;} // void swap2(int & x, int & y) {int t(std::move(x)); x = y; y = t;} // void swap(uint & x, uint & y) {uint t = x; x = y; y = t;} // void swap2(uint & x, uint & y) {uint t(std::move(x)); x = y; y = t;} // void swap(ullong & x, ullong & y) {ullong t = x; x = y; y = t;} // void swap2(ullong & x, ullong & y) {ullong t{std::move(x)}; x = y; y = t;} // void swap(llong & x, llong & y) {llong t = x; x = y; y = t;} // void swap2(llong & x, llong & y) {llong t{std::move(x)}; x = y; y = t;} // void swap(double & x, double & y) {double t = x; x = y; y = t;} // void swap2(double & x, double & y) {double t(std::move(x)); x = std::move(y); y = std::move(t);} // void swap(float & x, float & y) {float t = x; x = y; y = t;} // void swap2(float & x, float & y) {float t(std::move(x)); x = std::move(y); y = std::move(t);} // void swap(PIString & x, PIString & y) {PIString t = x; x = y; y = t;} // void swap2(PIString & x, PIString & y) {PIString t(std::move(x)); x = std::move(y); y = std::move(t);} // void swap(std::string & x, std::string & y) {std::string t = x; x = y; y = t;} // void swap2(std::string & x, std::string & y) {std::string t{std::move(x)}; x = std::move(y); y = std::move(t);} // void swap(A & x, A & y) {A t = x; x = y; y = t;} // void swap2(A & x, A & y) {A t{std::move(x)}; x = std::move(y); y = std::move(t);} //void swap(PIObject & x, PIObject & y) {A t = x; x = y; y = t;} //void swap2(PIObject & x, PIObject & y) {A t(std::move(x)); x = std::move(y); y = std::move(t);} int main(int argc, char * argv[]) { // PITimeMeasurer tm; // int m = 100000; // int a = 99, b = 77; // piCout << "int"; // tm.reset(); // for (int i = 0; i < m; ++i) { // swap(a,b); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // swap2(a,b); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwapBinary(a,b); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwap(a,b); // } // piCout << tm.elapsed_s(); // piCout << "size_t"; // size_t ta = 99, tb = 77; // tm.reset(); // for (int i = 0; i < m; ++i) { // swap(ta,tb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // swap2(ta,tb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwapBinary(ta,tb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwap(ta,tb); // } // piCout << tm.elapsed_s(); // piCout << "ullong"; // ullong lla = 99, llb = 77; // tm.reset(); // for (int i = 0; i < m; ++i) { // swap(lla,llb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // swap2(lla,llb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwapBinary(lla,llb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwap(lla,llb); // } // piCout << tm.elapsed_s(); // piCout << "double"; // double da = 0.99,db = 77.77; // tm.reset(); // for (int i = 0; i < m; ++i) { // swap(da,db); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // swap2(da,db); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwapBinary(da,db); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwap(da,db); // } // piCout << tm.elapsed_s(); // piCout << "float"; // float fa = 0.99,fb = 77.77; // tm.reset(); // for (int i = 0; i < m; ++i) { // swap(fa,fb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // swap2(fa,fb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwapBinary(fa,fb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwap(fa,fb); // } // piCout << tm.elapsed_s(); // piCout << "A"; // A aa,ab; // tm.reset(); // for (int i = 0; i < m; ++i) { // swap(aa,ab); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // swap2(aa,ab); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwapBinary(aa,ab); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwap(aa,ab); // } // piCout << tm.elapsed_s(); // piCout << "std::string"; // std::string ia = "123456789012345678901vfsdvsd2345678",ib = "qwertyvsdfvvsdvfsuiopqwertyuikolsdfghjklsdfghjk"; // tm.reset(); // for (int i = 0; i < m; ++i) { // swap(ia,ib); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // swap2(ia,ib); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // ia.swap(ib); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwap(ia,ib); // } // piCout << tm.elapsed_s(); // PIString sa = "123456789012345678901vfsdvsd2345678",sb = "qwertyvsdfvvsdvfsuiopqwertyuikolsdfghjklsdfghjk"; // piCout << "PIString"; // tm.reset(); // for (int i = 0; i < m; ++i) { // swap(sa,sb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // swap2(sa, sb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // sa.swap(sb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwapBinary(sa, sb); // } // piCout << tm.elapsed_s(); tm.reset(); // for (int i = 0; i < m; ++i) { // piSwap(sa, sb); // } // piCout << tm.elapsed_s(); return 0; }