diff options
author | aosipenko <aosipenko@yandex-team.ru> | 2022-02-10 16:48:08 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:48:08 +0300 |
commit | 948fd24d47d4b3b7815aaef1686aea00ef3f4288 (patch) | |
tree | 8ad4c39c2a5f8b341bc02e3b0c5e8f26c40373cb /util/draft/matrix.h | |
parent | d2eb4aae699fa2f6901bf32d22eec019c8f29838 (diff) | |
download | ydb-948fd24d47d4b3b7815aaef1686aea00ef3f4288.tar.gz |
Restoring authorship annotation for <aosipenko@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'util/draft/matrix.h')
-rw-r--r-- | util/draft/matrix.h | 116 |
1 files changed, 58 insertions, 58 deletions
diff --git a/util/draft/matrix.h b/util/draft/matrix.h index 154d00b35e..6383cee03d 100644 --- a/util/draft/matrix.h +++ b/util/draft/matrix.h @@ -1,15 +1,15 @@ #pragma once - + #include <util/generic/noncopyable.h> #include <util/system/yassert.h> #include <util/system/defaults.h> -#include <string.h> - +#include <string.h> + template <typename T> class TMatrix: TNonCopyable { // Constructor/Destructor -public: - TMatrix() +public: + TMatrix() : Buf(nullptr) , Arr(nullptr) , M(0) @@ -17,7 +17,7 @@ public: , BufSize(0) { } - + TMatrix(size_t m, size_t n) : Buf(new T[m * n]) , Arr(Buf) @@ -26,7 +26,7 @@ public: , BufSize(m * n) { } - + TMatrix(size_t m, size_t n, T* buf) : Buf(nullptr) , Arr(buf) @@ -35,74 +35,74 @@ public: , BufSize(m * n) { } - - ~TMatrix() { - delete[] Buf; - } - + + ~TMatrix() { + delete[] Buf; + } + // Properties/Methods -public: - void Clear() { - M = N = 0; - } - +public: + void Clear() { + M = N = 0; + } + void ReDim(size_t m, size_t n) { Y_ASSERT(m >= 1 && n >= 1); - size_t newSize = m * n; - if (newSize > BufSize) { - T* newBuf = new T[newSize]; + size_t newSize = m * n; + if (newSize > BufSize) { + T* newBuf = new T[newSize]; delete[] Buf; - Arr = Buf = newBuf; - BufSize = newSize; - } + Arr = Buf = newBuf; + BufSize = newSize; + } M = m; N = n; - } - + } + size_t Width() const { - return N; - } - + return N; + } + size_t Height() const { - return M; - } - - // Access element matrix[i][j] + return M; + } + + // Access element matrix[i][j] T* operator[](size_t i) { Y_ASSERT(i >= 0 && i < M); - return Arr + i * N; - } - - // Access element matrix[i][j] + return Arr + i * N; + } + + // Access element matrix[i][j] const T* operator[](size_t i) const { Y_ASSERT(i >= 0 && i < M); - return Arr + i * N; - } - - // Access element matrix(i, j) + return Arr + i * N; + } + + // Access element matrix(i, j) T& operator()(size_t i, size_t j) { Y_ASSERT(i >= 0 && i < M && j >= 0 && j < N); - return Arr[i * N + j]; - } - - // Access element matrix(i, j) + return Arr[i * N + j]; + } + + // Access element matrix(i, j) const T& operator()(size_t i, size_t j) const { Y_ASSERT(i >= 0 && i < M && j >= 0 && j < N); - return Arr[i * N + j]; - } - - void Zero() { + return Arr[i * N + j]; + } + + void Zero() { memset((void*)Arr, 0, M * N * sizeof(T)); - } + } - void Fill(T value) { + void Fill(T value) { for (T *p = Arr, *end = Arr + M * N; p < end; ++p) - *p = value; - } - -private: - T* Buf; - T* Arr; + *p = value; + } + +private: + T* Buf; + T* Arr; size_t M, N; - size_t BufSize; -}; + size_t BufSize; +}; |