diff --git a/main.cpp b/main.cpp index 0980d26a..08cd414a 100644 --- a/main.cpp +++ b/main.cpp @@ -84,7 +84,7 @@ public: }; -#include "piframe.h" +#include "pivector2d.h" int main(int argc, char *argv[]) { /* enum VCO_Aim_Type {VCO_Aim_Type_None, VCO_Aim_Type_Detected, VCO_Aim_Type_New, VCO_Aim_Type_Confirmed, VCO_Aim_Type_Deleted = 127}; @@ -151,10 +151,10 @@ int main(int argc, char *argv[]) { for (int j = 0; j < 20; ++j) in[i] << j+i*100; // piCout << in.size() << in[0].size(); - PIFrame f0; - PIFrame f1(30, 40); + PIVector2D f0; + PIVector2D f1(30, 40); //in.resize(1); - PIFrame f2(in); + PIVector2D f2(in); f0 = f2; // piCout << f0; // piCout << f1; @@ -165,7 +165,7 @@ int main(int argc, char *argv[]) { piCout << f2.toVectors(); PIVector t = f2.toPlainVector(); piCout << t; - piCout << PIFrame(f2.rows(), f2.cols(), t); + piCout << PIVector2D(f2.rows(), f2.cols(), t); return 0; // PIFFTWf fft; // fft.preparePlan(50, PIFFTWf::foReal); diff --git a/src_main/containers/picontainersmodule.h b/src_main/containers/picontainersmodule.h index c9eefc48..f4d25401 100644 --- a/src_main/containers/picontainersmodule.h +++ b/src_main/containers/picontainersmodule.h @@ -27,5 +27,6 @@ #include "piset.h" #include "pilist.h" #include "pistack.h" +#include "pivector2d.h" #endif // PICONTAINERSMODULE_H diff --git a/src_main/containers/piframe.h b/src_main/containers/piframe.h deleted file mode 100644 index 34991a0e..00000000 --- a/src_main/containers/piframe.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef PIFRAME_H -#define PIFRAME_H -#include "pivector.h" - -template -class PIFrame { -public: - inline PIFrame() {rows_ = cols_ = 0;} - inline PIFrame(size_t rows, size_t cols, const T & f = T()) { - rows_ = rows; - cols_ = cols; - mat.resize(rows*cols, f); - } - inline PIFrame(size_t rows, size_t cols, const PIVector & v) { - mat = v; - rows_ = rows; - cols_ = cols; - mat.resize(rows*cols); - } - inline PIFrame(const PIVector > & v) { - rows_ = v.size(); - if (rows_) { - cols_ = v[0].size(); - for (size_t i = 0; i < rows_; i++) { - mat.append(v[i]); - } - mat.resize(rows_*cols_); - } - if (mat.isEmpty()) rows_ = cols_ = 0; - } - - inline size_t rows() const {return rows_;} - inline size_t cols() const {return cols_;} - inline size_t size_all() const {return mat.size();} - inline ssize_t size_s_all() const {return mat.size_s();} - inline bool isEmpty() const {return mat.isEmpty();} - - class PIFrameRow { - friend class PIFrame; - private: - inline PIFrameRow(PIFrame * p, size_t row) : p_(p) {st_ = p_->cols_ * row;} - PIFrame * p_; - size_t st_; - public: - inline size_t size() const {return p_->cols_;} - inline T & operator [](size_t index) {return p_->mat[st_ + index];} - inline const T & operator [](size_t index) const {return p_->mat[st_ + index];} - }; - - class PIFrameRowConst { - friend class PIFrame; - private: - inline PIFrameRowConst(const PIFrame * p, size_t row) : p_(p) {st_ = p_->cols_ * row;} - const PIFrame * p_; - size_t st_; - public: - inline size_t size() const {return p_->cols_;} - inline const T & operator [](size_t index) const {return p_->mat[st_ + index];} - }; - - - inline PIFrameRow operator[](size_t index) {return PIFrameRow(this, index);} - inline PIFrameRowConst operator[](size_t index) const {return PIFrameRowConst(this, index);} - - PIVector > toVectors() const { - PIVector > ret; - for(size_t i = 0; i < rows_; ++i) - ret << PIVector(mat.data(i*cols_), cols_); - return ret; - } - PIVector toPlainVector() const {return mat;} - -private: - size_t rows_, cols_; - PIVector mat; -}; - -template -inline PICout operator <<(PICout s, const PIFrame & v) { - s.setControl(0, true); - s << "{"; - for (size_t i = 0; i < v.rows(); ++i) { - s << "{ "; - for (size_t j = 0; j < v.cols(); ++j) { - s << v[i][j]; - if (j < v.cols() - 1) s << ", "; - } - s << " }"; - if (i < v.rows() - 1) s << PICoutManipulators::NewLine ; - } - if (v.isEmpty()) s << "{ }"; - s << "}"; - s.restoreControl(); - return s; -} - -#endif // PIFRAME_H diff --git a/src_main/containers/pivector2d.h b/src_main/containers/pivector2d.h new file mode 100644 index 00000000..59b09f6f --- /dev/null +++ b/src_main/containers/pivector2d.h @@ -0,0 +1,125 @@ +/*! \file pivecto2Dr.h + * \brief 2D wrapper around PIVector + * + * This file declares PIVector +*/ +/* + PIP - Platform Independent Primitives + 2D wrapper around PIVector + Copyright (C) 2017 Andrey Bychkov work.a.b@yandex.ru + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef PIVECTOR2D_H +#define PIVECTOR2D_H + +#include "pivector.h" + + +template +class PIVector2D { +public: + inline PIVector2D() {rows_ = cols_ = 0;} + inline PIVector2D(size_t rows, size_t cols, const T & f = T()) { + rows_ = rows; + cols_ = cols; + mat.resize(rows*cols, f); + } + inline PIVector2D(size_t rows, size_t cols, const PIVector & v) { + mat = v; + rows_ = rows; + cols_ = cols; + mat.resize(rows*cols); + } + inline PIVector2D(const PIVector > & v) { + rows_ = v.size(); + if (rows_) { + cols_ = v[0].size(); + for (size_t i = 0; i < rows_; i++) { + mat.append(v[i]); + } + mat.resize(rows_*cols_); + } + if (mat.isEmpty()) rows_ = cols_ = 0; + } + + inline size_t rows() const {return rows_;} + inline size_t cols() const {return cols_;} + inline size_t size_all() const {return mat.size();} + inline ssize_t size_s_all() const {return mat.size_s();} + inline bool isEmpty() const {return mat.isEmpty();} + + class Row { + friend class PIVector2D; + private: + inline Row(PIVector2D * p, size_t row) : p_(p) {st_ = p_->cols_ * row;} + PIVector2D * p_; + size_t st_; + public: + inline size_t size() const {return p_->cols_;} + inline T & operator [](size_t index) {return p_->mat[st_ + index];} + inline const T & operator [](size_t index) const {return p_->mat[st_ + index];} + }; + + class RowConst { + friend class PIVector2D; + private: + inline RowConst(const PIVector2D * p, size_t row) : p_(p) {st_ = p_->cols_ * row;} + const PIVector2D * p_; + size_t st_; + public: + inline size_t size() const {return p_->cols_;} + inline const T & operator [](size_t index) const {return p_->mat[st_ + index];} + }; + + + inline Row operator[](size_t index) {return Row(this, index);} + inline RowConst operator[](size_t index) const {return RowConst(this, index);} + + PIVector > toVectors() const { + PIVector > ret; + for(size_t i = 0; i < rows_; ++i) + ret << PIVector(mat.data(i*cols_), cols_); + return ret; + } + PIVector toPlainVector() const {return mat;} + +private: + size_t rows_, cols_; + PIVector mat; + +}; + + +template +inline PICout operator <<(PICout s, const PIVector2D & v) { + s.setControl(0, true); + s << "{"; + for (size_t i = 0; i < v.rows(); ++i) { + s << "{ "; + for (size_t j = 0; j < v.cols(); ++j) { + s << v[i][j]; + if (j < v.cols() - 1) s << ", "; + } + s << " }"; + if (i < v.rows() - 1) s << PICoutManipulators::NewLine ; + } + if (v.isEmpty()) s << "{ }"; + s << "}"; + s.restoreControl(); + return s; +} + +#endif // PIVECTOR2D_H diff --git a/src_main/io/pisharedmemory.cpp b/src_main/io/pisharedmemory.cpp index ca3a4550..d867954a 100644 --- a/src_main/io/pisharedmemory.cpp +++ b/src_main/io/pisharedmemory.cpp @@ -180,8 +180,8 @@ void PISharedMemory::configureFromFullPathDevice(const PIString & full_path) { for (int i = 0; i < pl.size_s(); ++i) { PIString p(pl[i]); switch (i) { - case 0: setPath(p); break; - case 1: dsize = p.toInt(); break; + case 0: setPath(p); break; + case 1: dsize = p.toInt(); break; } } } diff --git a/src_main/system/piprocess.cpp b/src_main/system/piprocess.cpp index 785074d7..b602025b 100755 --- a/src_main/system/piprocess.cpp +++ b/src_main/system/piprocess.cpp @@ -34,7 +34,7 @@ PRIVATE_DEFINITION_START(PIProcess) #else pid_t pid; #endif -FILE * tf_in, * tf_out, * tf_err; + FILE * tf_in, * tf_out, * tf_err; PRIVATE_DEFINITION_END(PIProcess) diff --git a/src_main/system/piprocess.h b/src_main/system/piprocess.h index abe6b989..12cdcfa8 100755 --- a/src_main/system/piprocess.h +++ b/src_main/system/piprocess.h @@ -91,12 +91,12 @@ private: void exec_(); void startProc(bool detached); + PRIVATE_DECLARATION PIStringList args, env; PIString wd; PIByteArray out; PIFile f_in, f_out, f_err; bool g_in, g_out, g_err, t_in, t_out, t_err; - PRIVATE_DECLARATION int exit_code, sz; bool is_exec;