nmpp
tnmcube.h
1
2// //
3// Header file of template of class nmmtr //
4// //
6#ifndef _TCUBE_H_INCLUDED_
7#define _TCUBE_H_INCLUDED_
8
9#include "crtdbg.h"
10//#ifdef __cplusplus
11
12
13//#include "tmatrix.h"
14#include <string.h>
15
16
17
18template<class T> class tmtr
19{
20protected:
21 T* m_container;
22public:
23 int m_stride;
24 int m_height, m_width;
25 T *m_data;
26
28 {
29 m_stride = mtr.m_stride;
30 m_height = mtr.m_height;
31 m_width = mtr.m_width;
32
33 m_container = new T[m_height*m_stride];
34 m_data = m_container;
35 memcpy(m_data, mtr.m_data, m_height*m_stride);
36 }
37
38
39 // constructor
40 //explicit
41 tmtr(int nHeight, int nWidth, int nStride = 0) :m_height(nHeight), m_width(nWidth)
42 {
43
44
45 nStride == 0? m_stride = nWidth: m_stride = nStride;
46 m_container = new T[m_height*m_stride];
47 m_data = m_container;
48 }
49 //explicit
50 tmtr(T* Data, int nHeight, int nWidth, int nStride=0) :m_data(Data), m_height(nHeight), m_width(nWidth)
51 {
52 nStride == 0 ? m_stride = m_width : m_stride = nStride;
53 _ASSERTE(m_stride >= m_width);
54 m_container = 0;
55 };
56
57 T* ref(int y, int x) {
58 return m_data + y*m_stride + x;
59 }
60 ~tmtr()
61 {
62 if (m_container)
63 delete m_container;
64 }
65
66 inline T* operator[](int row) const
67 {
68
69 //_ASSERTE(row < m_height + PADDING);
70 //_ASSERTE(row >= -PADDING);
71 return m_data + row*m_stride;
72 }
73 void fill(T& value) {
74 T* p = m_data;
75 for (int y = 0; y< m_height; y++, p += m_stride)
76 for (int x = 0; x<m_width; x++)
77 p[x] = value;
78 }
79};
80
82//
83// Class of nmmtres
84//
85
86
87 //--------------------------------------------------------------------
97
98 //--------------------------------------------------------------------
101 //--------------------------------------------------------------------
102
103template<class T> class tcube
104{
105protected:
106 T* m_container;
107public:
108 int m_height;
109 int m_width;
110 int m_depth;
111 int m_ystride;
112 int m_wstride;
113 int m_cstride;
114 T* m_data;
115
116
117 tcube(tcube<T>& cube)
118 {
119 m_height= cube.m_height;
120 m_width= cube.m_width;
121 m_depth= cube.m_depth;
122 m_ystride= cube.m_ystride;
123 m_wstride= cube.m_wstride;
124 m_cstride= cube.m_cstride;
125
126 m_container = new T[m_height*m_ystride];
127 m_data = m_container;
128 memcpy(m_data, cube.m_data, m_height*m_ystride);
129 }
130
131 explicit
132 tcube(int Height, int Width, int Depth, int WStride=0, int CStride=0):m_height(Height), m_width(Width), m_depth(Depth)
133 {
134 WStride == 0 ? m_wstride = m_width: m_wstride=WStride;
135 CStride == 0 ? m_cstride = m_depth: m_cstride=CStride;
136 _ASSERTE(m_width<=m_wstride);
137 m_ystride = m_cstride*m_wstride;
138 m_container=new T[m_height*m_ystride];
139 m_data=m_container;
140 }
141
142 explicit
143 tcube(T* data, int Height, int Width, int Depth, int WStride = 0, int CStride = 0) :m_data (data), m_height(Height), m_width(Width), m_depth(Depth)
144 {
145 WStride == 0 ? m_wstride = m_width : m_wstride = WStride;
146 CStride == 0 ? m_cstride = m_depth : m_cstride = CStride;
147 m_ystride = m_cstride*m_wstride;
148 m_container = 0;
149 }
150 tcube<T>& operator =(tcube<T>& cube) {
151 _ASSERTE(cube.m_height == m_height);
152 _ASSERTE(cube.m_width == m_width);
153 _ASSERTE(cube.m_depth == m_depth);
154 for (int y = 0; y < m_height; y++)
155 for (int x = 0; x < m_width; x++)
156 for (int c = 0; c < m_depth; c++)
157 (*this)[y][x][c] = cube[y][x][c];
158
159 return *this;
160 }
161 inline tmtr<T> operator [](int y) const
162 {
163 //_ASSERTE(y>=-PADDING);
164 //_ASSERTE(y<m_height+PADDING);
165 return tmtr<T>(m_data+y*m_ystride, m_width, m_depth, m_cstride);
166 }
167 ~tcube()
168 {
169 if (m_container) {
170 _ASSERTE(m_container != (T*)-1);
171 delete m_container;
172 m_container = (T*)-1;
173 }
174
175 }
176 inline T* data() {
177 return m_data;
178 }
179
180 void printChannel(int ch) {
181
182 char str[32];
183 int maxlen = 0;
184 for (int h = 0; h < m_height; h++) {
185 for (int w = 0; w < m_width; w++) {
186 float v = (*this)[h][w][ch];
187 sprintf(str, "%.2f ", v);
188 int len = strlen(str);
189 if (len>maxlen)
190 maxlen = len;
191 }
192 }
193
194 char spaces[] = " ";
195 for (int h = 0; h < m_height; h++) {
196 for (int w = 0; w < m_width; w++) {
197 float v = (*this)[h][w][ch];
198 sprintf(str, "%.2f ", v);
199 int len = strlen(str);
200 //strncat(str,spaces,maxlen-len);
201 printf(spaces + 10 - (maxlen - len));
202 printf(str);
203 }
204 printf("\n");
205 }
206
207 }
208
209
210 void fill(T value)
211 {
212 T* layer = m_data;
213 for (int y = 0; y < m_height; y++, layer += m_ystride) {
214 tmtr<float> mtr(layer, m_width, m_depth, m_cstride);
215 mtr.fill(value);
216 }
217
218 }
219};
220
221#endif
Definition: tmatrix.h:88
Definition: tnmcube.h:104
Definition: tnmcube.h:19