Coverage Report

Created: 2021-08-22 09:07

/src/skia/third_party/externals/dng_sdk/source/dng_matrix.h
Line
Count
Source (jump to first uncovered line)
1
/*****************************************************************************/
2
// Copyright 2006-2008 Adobe Systems Incorporated
3
// All Rights Reserved.
4
//
5
// NOTICE:  Adobe permits you to use, modify, and distribute this file in
6
// accordance with the terms of the Adobe license agreement accompanying it.
7
/*****************************************************************************/
8
9
/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_matrix.h#2 $ */ 
10
/* $DateTime: 2012/07/31 22:04:34 $ */
11
/* $Change: 840853 $ */
12
/* $Author: tknoll $ */
13
14
/** \file
15
 * Matrix and vector classes, including specialized 3x3 and 4x3 versions as
16
 * well as length 3 vectors.
17
 */
18
19
/*****************************************************************************/
20
21
#ifndef __dng_matrix__
22
#define __dng_matrix__
23
24
/*****************************************************************************/
25
26
#include "dng_sdk_limits.h"
27
#include "dng_types.h"
28
29
/*****************************************************************************/
30
31
/// \brief Class to represent 2D matrix up to kMaxColorPlanes x kMaxColorPlanes
32
/// in size.
33
34
class dng_matrix
35
  {
36
  
37
  protected:
38
  
39
    uint32 fRows;
40
    uint32 fCols;
41
  
42
    real64 fData [kMaxColorPlanes] [kMaxColorPlanes];
43
    
44
  public:
45
  
46
    dng_matrix ();
47
          
48
    dng_matrix (uint32 rows,
49
          uint32 cols);
50
          
51
    dng_matrix (const dng_matrix &m);
52
    
53
    virtual ~dng_matrix ()
54
1.53M
      {
55
1.53M
      }
56
    
57
    void Clear ();
58
    
59
    void SetIdentity (uint32 count);
60
    
61
    uint32 Rows () const
62
201
      {
63
201
      return fRows;
64
201
      }
65
      
66
    uint32 Cols () const
67
144
      {
68
144
      return fCols;
69
144
      }
70
      
71
    real64 * operator [] (uint32 row)
72
57.4k
      {
73
57.4k
      return fData [row];
74
57.4k
      }
75
      
76
    const real64 * operator [] (uint32 row) const
77
300
      {
78
300
      return fData [row];
79
300
      }
80
      
81
    bool operator== (const dng_matrix &m) const;
82
    
83
    bool operator!= (const dng_matrix &m) const
84
0
      {
85
0
      return !(*this == m);
86
0
      }
87
      
88
    bool IsEmpty () const
89
75
      {
90
75
      return fRows == 0 || fCols == 0;
91
75
      }
92
      
93
    bool NotEmpty () const
94
75
      {
95
75
      return !IsEmpty ();
96
75
      }
97
      
98
    bool IsDiagonal () const;
99
      
100
    real64 MaxEntry () const;
101
    
102
    real64 MinEntry () const;
103
104
    void Scale (real64 factor);
105
      
106
    void Round (real64 factor);
107
    
108
    void SafeRound (real64 factor);
109
110
  };
111
  
112
/*****************************************************************************/
113
114
/// \brief A 3x3 matrix.
115
116
class dng_matrix_3by3: public dng_matrix
117
  {
118
  
119
  public:
120
  
121
    dng_matrix_3by3 ();
122
    
123
    dng_matrix_3by3 (const dng_matrix &m);
124
    
125
    dng_matrix_3by3 (real64 a00, real64 a01, real64 a02,
126
                 real64 a10, real64 a11, real64 a12,
127
                 real64 a20, real64 a21, real64 a22);
128
            
129
    dng_matrix_3by3 (real64 a00, real64 a11, real64 a22);
130
  
131
  };
132
133
/*****************************************************************************/
134
135
/// \brief A 4x3 matrix. Handy for working with 4-color cameras.
136
137
class dng_matrix_4by3: public dng_matrix
138
  {
139
  
140
  public:
141
  
142
    dng_matrix_4by3 ();
143
    
144
    dng_matrix_4by3 (const dng_matrix &m);
145
    
146
    dng_matrix_4by3 (real64 a00, real64 a01, real64 a02,
147
                 real64 a10, real64 a11, real64 a12,
148
                 real64 a20, real64 a21, real64 a22,
149
                 real64 a30, real64 a31, real64 a32);
150
  
151
  };
152
153
/*****************************************************************************/
154
155
/// \brief Class to represent 1-dimensional vector with up to kMaxColorPlanes
156
/// components.
157
158
class dng_vector
159
  {
160
  
161
  protected:
162
  
163
    uint32 fCount;
164
    
165
    real64 fData [kMaxColorPlanes];
166
    
167
  public:
168
  
169
    dng_vector ();
170
    
171
    dng_vector (uint32 count);
172
    
173
    dng_vector (const dng_vector &v);
174
    
175
    virtual ~dng_vector ()
176
14.5k
      {
177
14.5k
      }
178
    
179
    void Clear ();
180
    
181
    void SetIdentity (uint32 count);
182
    
183
    uint32 Count () const
184
62
      {
185
62
      return fCount;
186
62
      }
187
      
188
    real64 & operator [] (uint32 index)
189
1.03k
      {
190
1.03k
      return fData [index];
191
1.03k
      }
192
      
193
    const real64 & operator [] (uint32 index) const
194
0
      {
195
0
      return fData [index];
196
0
      }
197
      
198
    bool operator== (const dng_vector &v) const;
199
    
200
    bool operator!= (const dng_vector &v) const
201
0
      {
202
0
      return !(*this == v);
203
0
      }
204
      
205
    bool IsEmpty () const
206
103
      {
207
103
      return fCount == 0;
208
103
      }
209
      
210
    bool NotEmpty () const
211
103
      {
212
103
      return !IsEmpty ();
213
103
      }
214
215
    real64 MaxEntry () const;
216
    
217
    real64 MinEntry () const;
218
219
    void Scale (real64 factor);
220
      
221
    void Round (real64 factor);
222
223
    dng_matrix AsDiagonal () const;
224
    
225
    dng_matrix AsColumn () const;
226
    
227
  };
228
229
/*****************************************************************************/
230
231
/// \brief A 3-element vector.
232
233
class dng_vector_3: public dng_vector
234
  {
235
  
236
  public:
237
  
238
    dng_vector_3 ();
239
    
240
    dng_vector_3 (const dng_vector &v);
241
    
242
    dng_vector_3 (real64 a0,
243
            real64 a1,
244
            real64 a2);
245
  
246
  };
247
248
/*****************************************************************************/
249
250
/// \brief A 4-element vector.
251
252
class dng_vector_4: public dng_vector
253
  {
254
  
255
  public:
256
  
257
    dng_vector_4 ();
258
    
259
    dng_vector_4 (const dng_vector &v);
260
    
261
    dng_vector_4 (real64 a0,
262
            real64 a1,
263
            real64 a2,
264
            real64 a3);
265
  
266
  };
267
268
/*****************************************************************************/
269
270
dng_matrix operator* (const dng_matrix &A,
271
            const dng_matrix &B);
272
273
dng_vector operator* (const dng_matrix &A,
274
            const dng_vector &B);
275
276
dng_matrix operator* (real64 scale,
277
            const dng_matrix &A);
278
279
dng_vector operator* (real64 scale,
280
            const dng_vector &A);
281
282
/*****************************************************************************/
283
284
dng_matrix operator+ (const dng_matrix &A,
285
            const dng_matrix &B);
286
287
/*****************************************************************************/
288
289
dng_matrix Transpose (const dng_matrix &A);
290
291
/*****************************************************************************/
292
293
dng_matrix Invert (const dng_matrix &A);
294
295
dng_matrix Invert (const dng_matrix &A,
296
           const dng_matrix &hint);
297
298
/*****************************************************************************/
299
300
inline real64 MaxEntry (const dng_matrix &A)
301
0
  {
302
0
  return A.MaxEntry ();
303
0
  }
304
    
305
inline real64 MaxEntry (const dng_vector &A)
306
0
  {
307
0
  return A.MaxEntry ();
308
0
  }
309
            
310
/*****************************************************************************/
311
312
inline real64 MinEntry (const dng_matrix &A)
313
0
  {
314
0
  return A.MinEntry ();
315
0
  }
316
    
317
inline real64 MinEntry (const dng_vector &A)
318
0
  {
319
0
  return A.MinEntry ();
320
0
  }
321
            
322
/*****************************************************************************/
323
324
#endif
325
  
326
/*****************************************************************************/