Coverage Report

Created: 2026-08-11 07:29

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/exiv2/src/tiffcomposite_int.hpp
Line
Count
Source
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
3
#ifndef TIFFCOMPOSITE_INT_HPP_
4
#define TIFFCOMPOSITE_INT_HPP_
5
6
// *****************************************************************************
7
// included header files
8
#include "tifffwd_int.hpp"
9
#include "types.hpp"
10
11
#include <cstddef>
12
#include <cstdint>
13
#include <memory>
14
#include <string_view>
15
#include <utility>
16
#include <vector>
17
18
// *****************************************************************************
19
// namespace extensions
20
namespace Exiv2 {
21
class BasicIo;
22
class Value;
23
24
namespace Internal {
25
// *****************************************************************************
26
// class definitions
27
28
//! TIFF value type.
29
enum TiffType : uint16_t {
30
  ttUnsignedByte = 1,      //!< Exif BYTE type
31
  ttAsciiString = 2,       //!< Exif ASCII type
32
  ttUnsignedShort = 3,     //!< Exif SHORT type
33
  ttUnsignedLong = 4,      //!< Exif LONG type
34
  ttUnsignedRational = 5,  //!< Exif RATIONAL type
35
  ttSignedByte = 6,        //!< Exif SBYTE type
36
  ttUndefined = 7,         //!< Exif UNDEFINED type
37
  ttSignedShort = 8,       //!< Exif SSHORT type
38
  ttSignedLong = 9,        //!< Exif SLONG type
39
  ttSignedRational = 10,   //!< Exif SRATIONAL type
40
  ttTiffFloat = 11,        //!< TIFF FLOAT type
41
  ttTiffDouble = 12,       //!< TIFF DOUBLE type
42
  ttTiffIfd = 13,          //!< TIFF IFD type
43
};
44
45
//! Convert the \em tiffType of a \em tag and \em group to an Exiv2 \em typeId.
46
TypeId toTypeId(TiffType tiffType, uint16_t tag, IfdId group);
47
//! Convert the %Exiv2 \em typeId to a TIFF value type.
48
TiffType toTiffType(TypeId typeId);
49
50
/*!
51
  Special TIFF tags for the use in TIFF structures only
52
*/
53
enum Tag {
54
  none = 0x10000,   //!< Dummy tag
55
  root = 0x20000,   //!< Special tag: root IFD
56
  next = 0x30000,   //!< Special tag: next IFD
57
  all = 0x40000,    //!< Special tag: all tags in a group
58
  pana = 0x80000,   //!< Special tag: root IFD of Panasonic RAW images
59
  fuji = 0x100000,  //!< Special tag: root IFD of Fujifilm RAF images
60
  cmt2 = 0x110000,  //!< Special tag: root IFD of CR3 images
61
  cmt3 = 0x120000,  //!< Special tag: root IFD of CR3 images
62
  cmt4 = 0x130000,  //!< Special tag: root IFD of CR3 images
63
};
64
65
/*!
66
  @brief A tuple consisting of extended Tag and group used as an item in
67
         TIFF paths.
68
*/
69
class TiffPathItem {
70
 public:
71
  //! @name Creators
72
  //@{
73
  //! Constructor
74
0
  constexpr TiffPathItem(uint32_t extendedTag, IfdId group) : extendedTag_(extendedTag), group_(group) {
75
0
  }
76
  //@}
77
78
  //! @name Accessors
79
  //@{
80
  //! Return the tag corresponding to the extended tag
81
0
  [[nodiscard]] uint16_t tag() const {
82
0
    return static_cast<uint16_t>(extendedTag_);
83
0
  }
84
  //! Return the extended tag (32 bit so that it can contain special tags)
85
0
  [[nodiscard]] uint32_t extendedTag() const {
86
0
    return extendedTag_;
87
0
  }
88
  //! Return the group
89
0
  [[nodiscard]] IfdId group() const {
90
0
    return group_;
91
0
  }
92
  //@}
93
94
 private:
95
  // DATA
96
  uint32_t extendedTag_;
97
  IfdId group_;
98
};
99
100
/*!
101
  @brief Simple IO wrapper to ensure that the header is only written if there is
102
         any other data at all.
103
104
  The wrapper is initialized with an IO reference and a pointer to a TIFF header.
105
  Subsequently the wrapper is used by all TIFF write methods. It takes care that
106
  the TIFF header is written to the IO first before any other output and only if
107
  there is any other data.
108
 */
109
class IoWrapper {
110
 public:
111
  //! @name Creators
112
  //@{
113
  /*!
114
    brief Constructor.
115
116
    The IO wrapper owns none of the objects passed in so the caller is
117
    responsible to keep them alive.
118
   */
119
  IoWrapper(BasicIo& io, const byte* pHeader, size_t size, OffsetWriter* pow);
120
  //@}
121
122
  //! @name Manipulators
123
  //@{
124
  /*!
125
    @brief Wraps the corresponding BasicIo::write() method.
126
127
    Writes the TIFF header to the IO, if it hasn't been written yet, followed
128
    by the data passed in the arguments.
129
   */
130
  size_t write(const byte* pData, size_t wcount);
131
  /*!
132
    @brief Wraps the corresponding BasicIo::putb() method.
133
134
    Writes the TIFF header to the IO, if it hasn't been written yet, followed
135
    by the data passed in the argument.
136
   */
137
  int putb(byte data);
138
  //! Wrapper for OffsetWriter::setTarget(), using an int instead of the enum to reduce include deps
139
  void setTarget(int id, size_t target);
140
  //@}
141
142
 private:
143
  // DATA
144
  BasicIo& io_;              //! Reference for the IO instance.
145
  const byte* pHeader_;      //! Pointer to the header data.
146
  size_t size_;              //! Size of the header data.
147
  bool wroteHeader_{false};  //! Indicates if the header has been written.
148
  OffsetWriter* pow_;        //! Pointer to an offset-writer, if any, or 0
149
};
150
151
/*!
152
  @brief Interface class for components of a TIFF directory hierarchy
153
         (Composite pattern).  Both TIFF directories as well as entries
154
         implement this interface.  A component can be uniquely identified
155
         by a tag, group tuple.  This class is implemented as a NVI
156
         (Non-Virtual Interface) and it has an interface for visitors
157
         (Visitor pattern) to perform operations on all components.
158
 */
159
class TiffComponent {
160
 public:
161
  //! TiffComponent auto_ptr type
162
  using UniquePtr = std::unique_ptr<TiffComponent>;
163
  using SharedPtr = std::shared_ptr<TiffComponent>;
164
  //! Container type to hold all metadata
165
  using Components = std::vector<SharedPtr>;
166
167
  //! @name Creators
168
  //@{
169
  //! Constructor
170
1.40M
  constexpr TiffComponent(uint16_t tag, IfdId group) : tag_(tag), group_(group) {
171
1.40M
  }
172
  //! Virtual destructor.
173
1.40M
  virtual ~TiffComponent() = default;
174
  //@}
175
176
  //! @name Manipulators
177
  //@{
178
  /*!
179
    @brief Add a TIFF entry \em tag to the component. Components on
180
           the path to the entry are added if they don't exist yet.
181
182
    @param tag      The tag of the new entry
183
    @param tiffPath A path from the TIFF root element to a TIFF entry.
184
    @param pRoot    Pointer to the root component of the TIFF composite.
185
    @param object   TIFF component to add. If 0, the correct entry will be
186
                    created.
187
188
    @return A pointer to the newly added TIFF entry.
189
   */
190
  TiffComponent* addPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object = nullptr);
191
  /*!
192
    @brief Add a child to the component. Default is to do nothing.
193
    @param tiffComponent Auto pointer to the component to add.
194
    @return Return a pointer to the newly added child element or 0.
195
   */
196
  TiffComponent* addChild(SharedPtr tiffComponent);
197
  /*!
198
      @brief Add a "next" component to the component. Default is to do
199
             nothing.
200
      @param tiffComponent Auto pointer to the component to add.
201
      @return Return a pointer to the newly added "next" element or 0.
202
   */
203
  TiffComponent* addNext(UniquePtr tiffComponent);
204
  /*!
205
    @brief Interface to accept visitors (Visitor pattern). Visitors
206
           can perform operations on all components of the composite.
207
208
    @param visitor The visitor.
209
   */
210
  void accept(TiffVisitor& visitor);
211
  /*!
212
    @brief Set a pointer to the start of the binary representation of the
213
           component in a memory buffer. The buffer must be allocated and
214
           freed outside of this class.
215
   */
216
1.39M
  void setStart(const byte* pStart) {
217
1.39M
    pStart_ = const_cast<byte*>(pStart);
218
1.39M
  }
219
  /*!
220
    @brief Write a TiffComponent to a binary image.
221
222
    @param ioWrapper  IO wrapper to which the TiffComponent is written.
223
    @param byteOrder  Applicable byte order (little or big endian).
224
    @param offset     Offset from the start of the image (TIFF header) to
225
                      the component.
226
    @param valueIdx   Index of the component to be written relative to offset.
227
    @param dataIdx    Index of the data area of the component relative to offset.
228
    @param imageIdx   Index of the image data area relative to offset.
229
    @return           Number of bytes written to the IO wrapper including all
230
                      nested components.
231
    @throw            Error If the component cannot be written.
232
   */
233
  size_t write(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx,
234
               size_t& imageIdx);
235
  //@}
236
237
  //! @name Accessors
238
  //@{
239
  //! Return the tag of this entry.
240
8.73M
  [[nodiscard]] uint16_t tag() const {
241
8.73M
    return tag_;
242
8.73M
  }
243
  //! Return the group id of this component
244
6.78M
  [[nodiscard]] IfdId group() const {
245
6.78M
    return group_;
246
6.78M
  }
247
  //! Return a pointer to the start of the binary representation of the component
248
1.43M
  [[nodiscard]] byte* start() const {
249
1.43M
    return pStart_;
250
1.43M
  }
251
  /*!
252
    @brief Return an auto-pointer to a copy of itself (deep copy, but
253
           without any children). The caller owns this copy and the
254
           auto-pointer ensures that it will be deleted.
255
   */
256
  [[nodiscard]] UniquePtr clone() const;
257
  /*!
258
    @brief Write the IFD data of this component to a binary image.
259
           Return the number of bytes written. Components derived from
260
           TiffEntryBase implement this method if needed.
261
   */
262
  size_t writeData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx, size_t& imageIdx) const;
263
  /*!
264
    @brief Write the image data of this component to a binary image.
265
           Return the number of bytes written. TIFF components implement
266
           this method if needed.
267
   */
268
  size_t writeImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const;
269
  /*!
270
    @brief Return the size in bytes of the IFD value of this component
271
           when written to a binary image.
272
   */
273
  [[nodiscard]] size_t size() const;
274
  /*!
275
    @brief Return the number of components in this component.
276
   */
277
  [[nodiscard]] size_t count() const;
278
  /*!
279
    @brief Return the size in bytes of the IFD data of this component when
280
           written to a binary image.  This is a support function for
281
           write(). Components derived from TiffEntryBase implement this
282
           method corresponding to their implementation of writeData().
283
   */
284
  [[nodiscard]] size_t sizeData() const;
285
  /*!
286
    @brief Return the size in bytes of the image data of this component
287
           when written to a binary image.  This is a support function for
288
           write(). TIFF components implement this method corresponding to
289
           their implementation of writeImage().
290
   */
291
  [[nodiscard]] size_t sizeImage() const;
292
  /*!
293
    @brief Return the unique id of the entry in the image.
294
   */
295
  // Todo: This is only implemented in TiffEntryBase. It is needed here so that
296
  //       we can sort components by tag and idx. Something is not quite right.
297
  [[nodiscard]] virtual int idx() const;
298
  //@}
299
300
 protected:
301
  //! @name Protected Manipulators
302
  //@{
303
  //! Implements addPath(). The default implementation does nothing.
304
  virtual TiffComponent* doAddPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object);
305
  //! Implements addChild(). The default implementation does nothing.
306
  virtual TiffComponent* doAddChild(SharedPtr tiffComponent);
307
  //! Implements addNext(). The default implementation does nothing.
308
  virtual TiffComponent* doAddNext(UniquePtr tiffComponent);
309
  //! Implements accept().
310
  virtual void doAccept(TiffVisitor& visitor) = 0;
311
  //! Implements write().
312
  virtual size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx,
313
                         size_t& imageIdx) = 0;
314
  //@}
315
316
  //! @name Protected Accessors
317
  //@{
318
  //! Internal virtual copy constructor, implements clone().
319
  [[nodiscard]] virtual TiffComponent* doClone() const = 0;
320
  //! Implements writeData().
321
  virtual size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx,
322
                             size_t& imageIdx) const = 0;
323
  //! Implements writeImage().
324
  virtual size_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const = 0;
325
  //! Implements size().
326
  [[nodiscard]] virtual size_t doSize() const = 0;
327
  //! Implements count().
328
  [[nodiscard]] virtual size_t doCount() const = 0;
329
  //! Implements sizeData().
330
  [[nodiscard]] virtual size_t doSizeData() const = 0;
331
  //! Implements sizeImage().
332
  [[nodiscard]] virtual size_t doSizeImage() const = 0;
333
  //@}
334
335
 private:
336
  // DATA
337
  uint16_t tag_;  //!< Tag that identifies the component
338
  IfdId group_;   //!< Group id for this component
339
  /*!
340
    Pointer to the start of the binary representation of the component in
341
    a memory buffer. The buffer is allocated and freed outside of this class.
342
   */
343
  byte* pStart_{};
344
};
345
346
//! TIFF mapping table for functions to decode special cases
347
struct TiffMappingInfo {
348
  struct Key;
349
  /*!
350
    @brief Compare a TiffMappingInfo with a TiffMappingInfo::Key.
351
           The two are equal if TiffMappingInfo::make_ equals a substring
352
           of the key of the same size. E.g., mapping info = "OLYMPUS",
353
           key = "OLYMPUS OPTICAL CO.,LTD" (found in the image) match,
354
           the extendedTag is Tag::all or equal to the extended tag of the
355
           key, and the group is equal to that of the key.
356
   */
357
  bool operator==(const Key& key) const;
358
  //! Return the tag corresponding to the extended tag
359
0
  [[nodiscard]] uint16_t tag() const {
360
0
    return static_cast<uint16_t>(extendedTag_);
361
0
  }
362
363
  // DATA
364
  std::string_view make_;  //!< Camera make for which these mapping functions apply
365
  uint32_t extendedTag_;   //!< Tag (32 bit so that it can contain special tags)
366
  IfdId group_;            //!< Group that contains the tag
367
  DecoderFct decoderFct_;  //!< Decoder function for matching tags
368
  EncoderFct encoderFct_;  //!< Encoder function for matching tags
369
370
};  // struct TiffMappingInfo
371
372
//! Search key for TIFF mapping structures.
373
struct TiffMappingInfo::Key {
374
  std::string_view m_;  //!< Camera make
375
  uint32_t e_;          //!< Extended tag
376
  IfdId g_;             //!< %Group
377
};
378
379
/*!
380
  @brief This abstract base class provides the common functionality of an
381
         IFD directory entry and defines an extended interface for derived
382
         concrete entries, which allows access to the attributes of the
383
         entry.
384
 */
385
class TiffEntryBase : public TiffComponent {
386
  friend class TiffReader;
387
  friend class TiffEncoder;
388
389
 public:
390
  //! @name Creators
391
  //@{
392
  //! Default constructor.
393
  TiffEntryBase(uint16_t tag, IfdId group, TiffType tiffType = ttUndefined);
394
395
  //! Virtual destructor.
396
  ~TiffEntryBase() override;
397
  //@}
398
399
  //! @name NOT implemented
400
  //@{
401
  //! Assignment operator.
402
  TiffEntryBase& operator=(const TiffEntryBase&) = delete;
403
  //@}
404
405
  //! @name Manipulators
406
  //@{
407
  /*!
408
    @brief Encode a TIFF component from the metadatum provided and
409
           information from the \em encoder as needed.
410
411
    Implemented as double-dispatch calls back to one of the specific
412
    encoding functions at the \em encoder.
413
   */
414
  void encode(TiffEncoder& encoder, const Exifdatum* datum);
415
  //! Set the offset
416
913k
  void setOffset(size_t offset) {
417
913k
    offset_ = offset;
418
913k
  }
419
  /*!
420
    @brief Set pointer and size of the entry's data (not taking ownership of the data).
421
422
    @param storage Usually, pData is a pointer into a copy of the image file, which
423
                   means that it points to memory which is guaranteed to live longer
424
                   than this class. However, sometimes pData is pointer into a
425
                   DataBuf that was allocated by another node in the component tree.
426
                   If so, we need to make sure that the DataBuf doesn't get freed too
427
                   early. We use a std::shared_ptr to hold a reference to the DataBuf
428
                   to ensure that it will be kept alive. The storage parameter is
429
                   assigned to the storage_ field. In the more common scenario where
430
                   pData points to a copy of the image, rather than a DataBuf, then
431
                   you should pass std::shared_ptr<DataBuf>(), which is essentially
432
                   a nullptr.
433
   */
434
  void setData(byte* pData, size_t size, std::shared_ptr<DataBuf> storage);
435
  /*!
436
    @brief Set the entry's data buffer. A shared_ptr is used to manage the DataBuf
437
           because TiffEntryBase has a clone method so it is possible (in theory) for
438
           the DataBuf to have multiple owners.
439
   */
440
  void setData(std::shared_ptr<DataBuf> buf);
441
  /*!
442
   @brief Update the value. Takes ownership of the pointer passed in.
443
444
   Update binary value data and call setValue().
445
 */
446
  void updateValue(std::unique_ptr<Value> value, ByteOrder byteOrder);
447
  /*!
448
    @brief Set tag value. Takes ownership of the pointer passed in.
449
450
    Update type, count and the pointer to the value.
451
  */
452
  void setValue(std::unique_ptr<Value> value);
453
  //@}
454
455
  //! @name Accessors
456
  //@{
457
  //! Return the TIFF type
458
10.3k
  [[nodiscard]] TiffType tiffType() const {
459
10.3k
    return tiffType_;
460
10.3k
  }
461
  /*!
462
    @brief Return the offset to the data area relative to the base
463
           for the component (usually the start of the TIFF header)
464
   */
465
0
  [[nodiscard]] size_t offset() const {
466
0
    return offset_;
467
0
  }
468
  /*!
469
    @brief Return the unique id of the entry in the image
470
   */
471
  [[nodiscard]] int idx() const override;
472
  /*!
473
    @brief Return a pointer to the binary representation of the
474
           value of this component.
475
   */
476
597k
  [[nodiscard]] const byte* pData() const {
477
597k
    return pData_;
478
597k
  }
479
  //! Return a const pointer to the converted value of this component
480
2.47M
  [[nodiscard]] const Value* pValue() const {
481
2.47M
    return pValue_.get();
482
2.47M
  }
483
  //@}
484
485
 protected:
486
  //! @name Protected Creators
487
  //@{
488
  //! Copy constructor (used to implement clone()).
489
  TiffEntryBase(const TiffEntryBase& rhs);
490
  //@}
491
492
  //! @name Protected Manipulators
493
  //@{
494
  //! Implements encode().
495
  virtual void doEncode(TiffEncoder& encoder, const Exifdatum* datum) = 0;
496
  //! Set the number of components in this entry
497
0
  void setCount(size_t count) {
498
0
    count_ = count;
499
0
  }
500
  //! Set the unique id of the entry in the image
501
913k
  void setIdx(int idx) {
502
913k
    idx_ = idx;
503
913k
  }
504
  /*!
505
    @brief Implements write(). Write the value of a standard TIFF entry to
506
           the \em ioWrapper, return the number of bytes written. Only the
507
           \em ioWrapper and \em byteOrder arguments are used.
508
   */
509
  size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx,
510
                 size_t& imageIdx) override;
511
  //@}
512
513
  //! @name Protected Accessors
514
  //@{
515
  //! Implements count().
516
  [[nodiscard]] size_t doCount() const override;
517
  /*!
518
    @brief Implements writeData(). Standard TIFF entries have no data:
519
           write nothing and return 0.
520
   */
521
  size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx,
522
                     size_t& imageIdx) const override;
523
  /*!
524
    @brief Implements writeImage(). Standard TIFF entries have no image data:
525
           write nothing and return 0.
526
   */
527
  size_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const override;
528
  //! Implements size(). Return the size of a standard TIFF entry
529
  [[nodiscard]] size_t doSize() const override;
530
  //! Implements sizeData(). Return 0.
531
  [[nodiscard]] size_t doSizeData() const override;
532
  //! Implements sizeImage(). Return 0.
533
  [[nodiscard]] size_t doSizeImage() const override;
534
  //@}
535
536
  //! Helper function to write an \em offset to a preallocated binary buffer
537
  static size_t writeOffset(byte* buf, size_t offset, TiffType tiffType, ByteOrder byteOrder);
538
539
  //! Used (internally) to create another reference to the DataBuf reference by storage_.
540
254k
  [[nodiscard]] std::shared_ptr<DataBuf> storage() const {
541
254k
    return storage_;
542
254k
  }
543
544
 private:
545
  // DATA
546
  TiffType tiffType_;  //!< Field TIFF type
547
  size_t count_{};     //!< The number of values of the indicated type
548
  size_t offset_{};    //!< Offset to the data area
549
  size_t size_{};      //!< Size of the data buffer holding the value in bytes, there is no minimum size.
550
551
  // Notes on the ownership model of pData_: pData_ is a always a
552
  // pointer to a buffer owned by somebody else. Usually it is a
553
  // pointer into a copy of the image file, but if
554
  // TiffEntryBase::setData is used then it is a pointer into the
555
  // storage_ DataBuf below.
556
  byte* pData_{};  //!< Pointer to the data area
557
558
  int idx_{};                      //!< Unique id of the entry in the image
559
  std::unique_ptr<Value> pValue_;  //!< Converted data value
560
561
  // This DataBuf is only used when TiffEntryBase::setData is called.
562
  // Otherwise, it remains empty. It is wrapped in a shared_ptr because
563
  // TiffEntryBase has a clone method, which could lead to the DataBuf
564
  // having multiple owners.
565
  std::shared_ptr<DataBuf> storage_;
566
};
567
568
/*!
569
  @brief A standard TIFF IFD entry.
570
 */
571
class TiffEntry : public TiffEntryBase {
572
 public:
573
  using TiffEntryBase::TiffEntryBase;
574
575
 protected:
576
  //! @name Manipulators
577
  //@{
578
  void doAccept(TiffVisitor& visitor) override;
579
  void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override;
580
  //@}
581
582
  //! @name Protected Accessors
583
  //@{
584
  [[nodiscard]] TiffEntry* doClone() const override;
585
  //@}
586
};
587
588
/*!
589
  @brief Interface for a standard TIFF IFD entry consisting of a value
590
         which is a set of offsets to a data area. The sizes of these "strips"
591
         are provided in a related TiffSizeEntry, tag and group of which are
592
         set in the constructor. The implementations of this interface differ
593
         in whether the data areas are extracted to the higher level metadata
594
         (TiffDataEntry) or not (TiffImageEntry).
595
 */
596
class TiffDataEntryBase : public TiffEntryBase {
597
 public:
598
  //! @name Creators
599
  //@{
600
  //! Constructor
601
  TiffDataEntryBase(uint16_t tag, IfdId group, uint16_t szTag, IfdId szGroup);
602
  //@}
603
604
  ~TiffDataEntryBase() override;
605
606
  //! @name Manipulators
607
  //@{
608
  /*!
609
    @brief Set the data areas ("strips").
610
611
    @param pSize Pointer to the Value holding the sizes corresponding
612
                 to this data entry.
613
    @param pData Pointer to the data area.
614
    @param sizeData Size of the data area.
615
    @param baseOffset Base offset into the data area.
616
   */
617
  virtual void setStrips(const Value* pSize, const byte* pData, size_t sizeData, size_t baseOffset) = 0;
618
  //@}
619
620
  //! @name Accessors
621
  //@{
622
  //! Return the group of the entry which has the size
623
5.42k
  [[nodiscard]] uint16_t szTag() const {
624
5.42k
    return szTag_;
625
5.42k
  }
626
  //! Return the group of the entry which has the size
627
5.42k
  [[nodiscard]] IfdId szGroup() const {
628
5.42k
    return szGroup_;
629
5.42k
  }
630
  //@}
631
632
 private:
633
  // DATA
634
  uint16_t szTag_;  //!< Tag of the entry with the size
635
  IfdId szGroup_;   //!< Group of the entry with the size
636
};
637
638
/*!
639
  @brief A standard TIFF IFD entry consisting of a value which is an offset
640
         to a data area and the data area. The size of the data area is
641
         provided in a related TiffSizeEntry, tag and group of which are set
642
         in the constructor.
643
644
         This component extracts the data areas ("strips") and makes them
645
         available in the higher level metadata. It is used, e.g., for
646
         \em Exif.Thumbnail.JPEGInterchangeFormat for which the size
647
         is provided in \em Exif.Thumbnail.JPEGInterchangeFormatLength.
648
 */
649
class TiffDataEntry : public TiffDataEntryBase {
650
  friend class TiffEncoder;
651
652
 public:
653
  using TiffDataEntryBase::TiffDataEntryBase;
654
655
  //! @name Manipulators
656
  //@{
657
  void setStrips(const Value* pSize, const byte* pData, size_t sizeData, size_t baseOffset) override;
658
  //@}
659
660
 protected:
661
  //! @name Protected Manipulators
662
  //@{
663
  void doAccept(TiffVisitor& visitor) override;
664
  void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override;
665
  /*!
666
    @brief Implements write(). Write pointers into the data area to the
667
           \em ioWrapper, relative to the offsets in the value. Return the
668
           number of bytes written. The \em valueIdx argument is not used.
669
670
    The number of components in the value determines how many offsets are
671
    written. Set the first value to 0, the second to the size of the first
672
    data area, etc. when creating a new data entry. Offsets will be adjusted
673
    on write. The type of the value can only be signed or unsigned short or
674
    long.
675
   */
676
  size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx,
677
                 size_t& imageIdx) override;
678
  //@}
679
680
  //! @name Protected Accessors
681
  //@{
682
  [[nodiscard]] TiffDataEntry* doClone() const override;
683
  /*!
684
    @brief Implements writeData(). Write the data area to the \em ioWrapper.
685
           Return the number of bytes written.
686
   */
687
  size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx,
688
                     size_t& imageIdx) const override;
689
  // Using doWriteImage from base class
690
  // Using doSize() from base class
691
  //! Implements sizeData(). Return the size of the data area.
692
  [[nodiscard]] size_t doSizeData() const override;
693
  // Using doSizeImage from base class
694
  //@}
695
696
 private:
697
  // DATA
698
  byte* pDataArea_{};      //!< Pointer to the data area (never alloc'd)
699
  size_t sizeDataArea_{};  //!< Size of the data area
700
};
701
702
/*!
703
  @brief A standard TIFF IFD entry consisting of a value which is an array
704
         of offsets to image data areas. The sizes of the image data areas are
705
         provided in a related TiffSizeEntry, tag and group of which are set
706
         in the constructor.
707
708
         The data is not extracted into the higher level metadata tags, it is
709
         only copied to the target image when the image is written.
710
         This component is used, e.g., for
711
         \em Exif.Image.StripOffsets for which the sizes are provided in
712
         \em Exif.Image.StripByteCounts.
713
 */
714
class TiffImageEntry : public TiffDataEntryBase {
715
  friend class TiffEncoder;
716
  using TiffDataEntryBase::TiffDataEntryBase;
717
718
 public:
719
  //! @name Manipulators
720
  //@{
721
  void setStrips(const Value* pSize, const byte* pData, size_t sizeData, size_t baseOffset) override;
722
  //@}
723
724
 protected:
725
  //! @name Protected Manipulators
726
  //@{
727
  void doAccept(TiffVisitor& visitor) override;
728
  void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override;
729
  /*!
730
    @brief Implements write(). Write pointers into the image data area to the
731
           \em ioWrapper. Return the number of bytes written. The \em valueIdx
732
           and \em dataIdx  arguments are not used.
733
   */
734
  size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx,
735
                 size_t& imageIdx) override;
736
  //@}
737
738
  //! @name Protected Accessors
739
  //@{
740
  [[nodiscard]] TiffImageEntry* doClone() const override;
741
  /*!
742
    @brief Implements writeData(). Write the image data area to the \em ioWrapper.
743
           Return the number of bytes written.
744
745
    This function writes the image data to the data area of the current
746
    directory. It is used for TIFF image entries in the makernote (large
747
    preview images) so that the image data remains in the makernote IFD.
748
   */
749
  size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx,
750
                     size_t& imageIdx) const override;
751
  /*!
752
    @brief Implements writeImage(). Write the image data area to the \em ioWrapper.
753
           Return the number of bytes written.
754
   */
755
  size_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const override;
756
  //! Implements size(). Return the size of the strip pointers.
757
  [[nodiscard]] size_t doSize() const override;
758
  //! Implements sizeData(). Return the size of the image data area.
759
  [[nodiscard]] size_t doSizeData() const override;
760
  //! Implements sizeImage(). Return the size of the image data area.
761
  [[nodiscard]] size_t doSizeImage() const override;
762
  //@}
763
764
 private:
765
  //! Pointers to the image data (strips) and their sizes.
766
  using Strips = std::vector<std::pair<const byte*, size_t>>;
767
768
  // DATA
769
  Strips strips_;  //!< Image strips data (never alloc'd) and sizes
770
};
771
772
/*!
773
  @brief A TIFF IFD entry containing the size of a data area of a related
774
         TiffDataEntry. This component is used, e.g. for
775
         \em Exif.Thumbnail.JPEGInterchangeFormatLength, which contains the
776
         size of \em Exif.Thumbnail.JPEGInterchangeFormat.
777
 */
778
class TiffSizeEntry : public TiffEntryBase {
779
 public:
780
  //! @name Creators
781
  //@{
782
  //! Constructor
783
  TiffSizeEntry(uint16_t tag, IfdId group, uint16_t dtTag, IfdId dtGroup);
784
  //@}
785
786
  //! @name Accessors
787
  //@{
788
  //! Return the group of the related entry which has the data area
789
9.69k
  [[nodiscard]] uint16_t dtTag() const {
790
9.69k
    return dtTag_;
791
9.69k
  }
792
  //! Return the group of the related entry which has the data area
793
9.69k
  [[nodiscard]] IfdId dtGroup() const {
794
9.69k
    return dtGroup_;
795
9.69k
  }
796
  //@}
797
798
 protected:
799
  //! @name Protected Manipulators
800
  //@{
801
  void doAccept(TiffVisitor& visitor) override;
802
  void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override;
803
  //@}
804
805
  //! @name Protected Accessors
806
  //@{
807
  [[nodiscard]] TiffSizeEntry* doClone() const override;
808
  //@}
809
810
 private:
811
  // DATA
812
  uint16_t dtTag_;  //!< Tag of the entry with the data area
813
  IfdId dtGroup_;   //!< Group of the entry with the data area
814
};
815
816
/*!
817
  @brief This class models a TIFF directory (%Ifd). It is a composite
818
         component of the TIFF tree.
819
 */
820
class TiffDirectory : public TiffComponent {
821
  friend class TiffEncoder;
822
  friend class TiffDecoder;
823
824
 public:
825
  //! @name Creators
826
  //@{
827
  //! Default constructor
828
  TiffDirectory(uint16_t tag, IfdId group, bool hasNext = true);
829
  //! Virtual destructor
830
52.7k
  ~TiffDirectory() override = default;
831
  //@}
832
833
  //! @name NOT implemented
834
  //@{
835
  //! Assignment operator.
836
  TiffDirectory& operator=(const TiffDirectory&) = delete;
837
  //@}
838
839
  //! @name Accessors
840
  //@{
841
  //! Return true if the directory has a next pointer
842
28.0k
  [[nodiscard]] bool hasNext() const {
843
28.0k
    return hasNext_;
844
28.0k
  }
845
  //@}
846
847
 protected:
848
  //! @name Protected Creators
849
  //@{
850
  //! Copy constructor (used to implement clone()).
851
  TiffDirectory(const TiffDirectory& rhs);
852
  //@}
853
854
  //! @name Protected Manipulators
855
  //@{
856
  TiffComponent* doAddPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object) override;
857
  TiffComponent* doAddChild(SharedPtr tiffComponent) override;
858
  TiffComponent* doAddNext(UniquePtr tiffComponent) override;
859
  void doAccept(TiffVisitor& visitor) override;
860
  /*!
861
    @brief Implements write(). Write the TIFF directory, values and
862
           additional data, including the next-IFD, if any, to the
863
           \em ioWrapper, return the number of bytes written.
864
   */
865
  size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx,
866
                 size_t& imageIdx) override;
867
  //@}
868
869
  //! @name Protected Accessors
870
  //@{
871
  [[nodiscard]] TiffDirectory* doClone() const override;
872
  /*!
873
    @brief This class does not really implement writeData(), it only has
874
           write(). This method must not be called; it commits suicide.
875
   */
876
  size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx,
877
                     size_t& imageIdx) const override;
878
  /*!
879
    @brief Implements writeImage(). Write the image data of the TIFF
880
           directory to the \em ioWrapper by forwarding the call to each
881
           component as well as the next-IFD, if there is any. Return the
882
           number of bytes written.
883
   */
884
  size_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const override;
885
  /*!
886
    @brief Implements size(). Return the size of the TIFF directory,
887
           values and additional data, including the next-IFD, if any.
888
   */
889
  [[nodiscard]] size_t doSize() const override;
890
  /*!
891
    @brief Implements count(). Return the number of entries in the TIFF
892
           directory. Does not count entries which are marked as deleted.
893
   */
894
  [[nodiscard]] size_t doCount() const override;
895
  /*!
896
    @brief This class does not really implement sizeData(), it only has
897
           size(). This method must not be called; it commits suicide.
898
   */
899
  [[nodiscard]] size_t doSizeData() const override;
900
  /*!
901
    @brief Implements sizeImage(). Return the sum of the image sizes of
902
           all components plus that of the next-IFD, if there is any.
903
   */
904
  [[nodiscard]] size_t doSizeImage() const override;
905
  //@}
906
907
 private:
908
  //! @name Private Accessors
909
  //@{
910
  //! Write a binary directory entry for a TIFF component.
911
  static size_t writeDirEntry(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, TiffComponent* pTiffComponent,
912
                              size_t valueIdx, size_t dataIdx, size_t& imageIdx);
913
  //@}
914
915
  // DATA
916
  Components components_;  //!< List of components in this directory
917
  bool hasNext_;           //!< True if the directory has a next pointer
918
  UniquePtr pNext_;        //!< Pointer to the next IFD
919
};
920
921
/*!
922
  @brief This class models a TIFF sub-directory (sub-IFD). A sub-IFD
923
         is an entry with one or more values that are pointers to IFD
924
         structures containing an IFD. The TIFF standard defines
925
         some important tags to be sub-IFDs, including the %Exif and
926
         GPS tags.
927
 */
928
class TiffSubIfd : public TiffEntryBase {
929
  friend class TiffReader;
930
931
 public:
932
  //! @name Creators
933
  //@{
934
  //! Default constructor
935
  TiffSubIfd(uint16_t tag, IfdId group, IfdId newGroup);
936
  //! Virtual destructor
937
9.63k
  ~TiffSubIfd() override = default;
938
  //@}
939
940
  //! @name NOT implemented
941
  //@{
942
  //! Assignment operator.
943
  TiffSubIfd& operator=(const TiffSubIfd&) = delete;
944
  //@}
945
946
 protected:
947
  //! @name Protected Creators
948
  //@{
949
  //! Copy constructor (used to implement clone()).
950
  TiffSubIfd(const TiffSubIfd& rhs);
951
  //@}
952
953
  //! @name Protected Manipulators
954
  //@{
955
  TiffComponent* doAddPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object) override;
956
  TiffComponent* doAddChild(SharedPtr tiffComponent) override;
957
  void doAccept(TiffVisitor& visitor) override;
958
  void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override;
959
  /*!
960
    @brief Implements write(). Write the sub-IFD pointers to the \em ioWrapper,
961
           return the number of bytes written. The \em valueIdx and
962
           \em imageIdx arguments are not used.
963
   */
964
  size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx,
965
                 size_t& imageIdx) override;
966
  //@}
967
968
  //! @name Protected Accessors
969
  //@{
970
  [[nodiscard]] TiffSubIfd* doClone() const override;
971
  /*!
972
    @brief Implements writeData(). Write the sub-IFDs to the \em ioWrapper.
973
           Return the number of bytes written.
974
   */
975
  size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx,
976
                     size_t& imageIdx) const override;
977
  /*!
978
    @brief Implements writeImage(). Write the image data of each sub-IFD to
979
           the \em ioWrapper. Return the number of bytes written.
980
   */
981
  size_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const override;
982
  //! Implements size(). Return the size of the sub-Ifd pointers.
983
  [[nodiscard]] size_t doSize() const override;
984
  //! Implements sizeData(). Return the sum of the sizes of all sub-IFDs.
985
  [[nodiscard]] size_t doSizeData() const override;
986
  //! Implements sizeImage(). Return the sum of the image sizes of all sub-IFDs.
987
  [[nodiscard]] size_t doSizeImage() const override;
988
  //@}
989
990
 private:
991
  //! A collection of TIFF directories (IFDs)
992
  using Ifds = std::vector<std::shared_ptr<TiffDirectory>>;
993
994
  // DATA
995
  IfdId newGroup_;  //!< Start of the range of group numbers for the sub-IFDs
996
  Ifds ifds_;       //!< The subdirectories
997
};
998
999
/*!
1000
  @brief This class is the basis for Makernote support in TIFF. It contains
1001
         a pointer to a concrete Makernote. The TiffReader visitor has the
1002
         responsibility to create the correct Make/Model specific Makernote
1003
         for a particular TIFF file. Calls to child management methods are
1004
         forwarded to the concrete Makernote, if there is one.
1005
 */
1006
class TiffMnEntry : public TiffEntryBase {
1007
  friend class TiffReader;
1008
  friend class TiffDecoder;
1009
  friend class TiffEncoder;
1010
1011
 public:
1012
  //! @name Creators
1013
  //@{
1014
  //! Default constructor
1015
  TiffMnEntry(uint16_t tag, IfdId group, IfdId mnGroup);
1016
  ~TiffMnEntry() override;
1017
1018
 protected:
1019
  //! @name Protected Manipulators
1020
  //@{
1021
  TiffComponent* doAddPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object) override;
1022
  TiffComponent* doAddChild(SharedPtr tiffComponent) override;
1023
  TiffComponent* doAddNext(UniquePtr tiffComponent) override;
1024
  void doAccept(TiffVisitor& visitor) override;
1025
  void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override;
1026
  /*!
1027
    @brief Implements write() by forwarding the call to the actual
1028
           concrete Makernote, if there is one.
1029
   */
1030
  size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx,
1031
                 size_t& imageIdx) override;
1032
  //@}
1033
1034
  //! @name Protected Accessors
1035
  //@{
1036
  [[nodiscard]] TiffMnEntry* doClone() const override;
1037
  //! Implements count(). Return number of components in the entry.
1038
  [[nodiscard]] size_t doCount() const override;
1039
  // Using doWriteData from base class
1040
  // Using doWriteImage from base class
1041
  /*!
1042
    @brief Implements size() by forwarding the call to the actual
1043
           concrete Makernote, if there is one.
1044
   */
1045
  [[nodiscard]] size_t doSize() const override;
1046
  // Using doSizeData from base class
1047
  // Using doSizeImage from base class
1048
  //@}
1049
1050
 private:
1051
  // DATA
1052
  IfdId mnGroup_;                         //!< New group for concrete mn
1053
  std::unique_ptr<TiffIfdMakernote> mn_;  //!< The Makernote
1054
};
1055
1056
/*!
1057
  @brief Tiff IFD Makernote. This is a concrete class suitable for all
1058
         IFD makernotes.
1059
1060
         Contains a makernote header (which can be 0) and an IFD and
1061
         implements child mgmt functions to deal with the IFD entries. The
1062
         various makernote weirdnesses are taken care of in the makernote
1063
         header (and possibly in special purpose IFD entries).
1064
 */
1065
class TiffIfdMakernote : public TiffComponent {
1066
  friend class TiffReader;
1067
1068
 public:
1069
  //! @name Creators
1070
  //@{
1071
  //! Default constructor
1072
  TiffIfdMakernote(uint16_t tag, IfdId group, IfdId mnGroup, std::unique_ptr<MnHeader> pHeader, bool hasNext = true);
1073
  //! Virtual destructor
1074
  ~TiffIfdMakernote() override;
1075
  //@}
1076
1077
  /*!
1078
    @name NOT implemented
1079
1080
    Implementing the copy constructor and assignment operator will require
1081
    cloning the header, i.e., clone() functionality on the MnHeader
1082
    hierarchy.
1083
   */
1084
  //@{
1085
  //! Copy constructor.
1086
  TiffIfdMakernote(const TiffIfdMakernote&) = delete;
1087
  //! Assignment operator.
1088
  TiffIfdMakernote& operator=(const TiffIfdMakernote&) = delete;
1089
  //@}
1090
1091
  //! @name Manipulators
1092
  //@{
1093
  /*!
1094
    @brief Read the header from a data buffer, return true if successful.
1095
1096
    The default implementation simply returns true.
1097
   */
1098
  bool readHeader(const byte* pData, size_t size, ByteOrder byteOrder);
1099
  /*!
1100
    @brief Set the byte order for the makernote.
1101
   */
1102
  void setByteOrder(ByteOrder byteOrder);
1103
  /*!
1104
    @brief Set the byte order used for the image.
1105
   */
1106
876
  void setImageByteOrder(ByteOrder byteOrder) {
1107
876
    imageByteOrder_ = byteOrder;
1108
876
  }
1109
  //@}
1110
1111
  //! @name Accessors
1112
  //@{
1113
  //! Return the size of the header in bytes.
1114
  [[nodiscard]] size_t sizeHeader() const;
1115
  //! Write the header to a data buffer, return the number of bytes written.
1116
  size_t writeHeader(IoWrapper& ioWrapper, ByteOrder byteOrder) const;
1117
  /*!
1118
    @brief Return the offset to the makernote from the start of the
1119
           TIFF header.
1120
  */
1121
  [[nodiscard]] size_t mnOffset() const;
1122
  /*!
1123
    @brief Return the offset to the start of the Makernote IFD from
1124
           the start of the Makernote.
1125
           Returns 0 if there is no header.
1126
   */
1127
  [[nodiscard]] size_t ifdOffset() const;
1128
  /*!
1129
    @brief Return the byte order for the makernote. Requires the image
1130
           byte order to be set (setImageByteOrder()).  Returns the byte
1131
           order for the image if there is no header or the byte order for
1132
           the header is \c invalidByteOrder.
1133
   */
1134
  [[nodiscard]] ByteOrder byteOrder() const;
1135
1136
  /*!
1137
    @brief Return the base offset for use with the makernote IFD entries
1138
           relative to the start of the TIFF header.
1139
           Returns 0 if there is no header.
1140
   */
1141
  [[nodiscard]] size_t baseOffset() const;
1142
  //@}
1143
1144
 protected:
1145
  //! @name Protected Manipulators
1146
  //@{
1147
  TiffComponent* doAddPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object) override;
1148
  TiffComponent* doAddChild(SharedPtr tiffComponent) override;
1149
  TiffComponent* doAddNext(UniquePtr tiffComponent) override;
1150
  void doAccept(TiffVisitor& visitor) override;
1151
  /*!
1152
    @brief Implements write(). Write the Makernote header, TIFF directory,
1153
           values and additional data to the \em ioWrapper, return the
1154
           number of bytes written.
1155
   */
1156
  size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx,
1157
                 size_t& imageIdx) override;
1158
  //@}
1159
1160
  //! @name Protected Accessors
1161
  //@{
1162
  [[nodiscard]] TiffIfdMakernote* doClone() const override;
1163
  /*!
1164
    @brief This class does not really implement writeData(), it only has
1165
           write(). This method must not be called; it commits suicide.
1166
   */
1167
  size_t doWriteData(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t dataIdx,
1168
                     size_t& imageIdx) const override;
1169
  /*!
1170
    @brief Implements writeImage(). Write the image data of the IFD of
1171
           the Makernote. Return the number of bytes written.
1172
   */
1173
  size_t doWriteImage(IoWrapper& ioWrapper, ByteOrder byteOrder) const override;
1174
  /*!
1175
    @brief Implements size(). Return the size of the Makernote header,
1176
           TIFF directory, values and additional data.
1177
   */
1178
  [[nodiscard]] size_t doSize() const override;
1179
  /*!
1180
    @brief Implements count(). Return the number of entries in the IFD
1181
           of the Makernote. Does not count entries which are marked as
1182
           deleted.
1183
   */
1184
  [[nodiscard]] size_t doCount() const override;
1185
  /*!
1186
    @brief This class does not really implement sizeData(), it only has
1187
           size(). This method must not be called; it commits suicide.
1188
   */
1189
  [[nodiscard]] size_t doSizeData() const override;
1190
  /*!
1191
    @brief Implements sizeImage(). Return the total image data size of the
1192
           makernote IFD.
1193
   */
1194
  [[nodiscard]] size_t doSizeImage() const override;
1195
  //@}
1196
1197
 private:
1198
  // DATA
1199
  std::unique_ptr<MnHeader> pHeader_;           //!< Makernote header
1200
  TiffDirectory ifd_;                           //!< Makernote IFD
1201
  size_t mnOffset_{};                           //!< Makernote offset
1202
  ByteOrder imageByteOrder_{invalidByteOrder};  //!< Byte order for the image
1203
};
1204
1205
/*!
1206
  @brief Function pointer type for a function to determine which cfg + def
1207
         of a corresponding array set to use.
1208
 */
1209
using CfgSelFct = int (*)(uint16_t, const byte*, size_t, TiffComponent*);
1210
1211
//! Function pointer type for a crypt function used for binary arrays.
1212
using CryptFct = DataBuf (*)(uint16_t, const byte*, size_t, TiffComponent*);
1213
1214
//! Defines one tag in a binary array
1215
struct ArrayDef {
1216
  //! Comparison with idx
1217
50.9k
  bool operator==(size_t idx) const {
1218
50.9k
    return idx_ == idx;
1219
50.9k
  }
1220
  //! Get the size in bytes of a tag.
1221
  [[nodiscard]] size_t size(uint16_t tag, IfdId group) const;
1222
  // DATA
1223
  size_t idx_;         //!< Index in bytes from the start
1224
  TiffType tiffType_;  //!< TIFF type of the element
1225
  size_t count_;       //!< Number of components
1226
};
1227
1228
//! Additional configuration for a binary array.
1229
struct ArrayCfg {
1230
  /*!
1231
    @brief Return the size of the default tag, which is used
1232
           to calculate tag numbers as idx/tagStep
1233
   */
1234
254k
  [[nodiscard]] size_t tagStep() const {
1235
254k
    return elDefaultDef_.size(0, group_);
1236
254k
  }
1237
  // DATA
1238
  IfdId group_;            //!< Group for the elements
1239
  ByteOrder byteOrder_;    //!< Byte order, invalidByteOrder to inherit
1240
  TiffType elTiffType_;    //!< Type for the array entry and the size element, if any
1241
  CryptFct cryptFct_;      //!< Crypt function, 0 if not used
1242
  bool hasSize_;           //!< If true, first tag is the size element
1243
  bool hasFillers_;        //!< If true, write all defined tags
1244
  bool concat_;            //!< If true, concatenate gaps between defined tags to single tags
1245
  ArrayDef elDefaultDef_;  //!< Default element
1246
};
1247
1248
//! Combination of array configuration and definition for arrays
1249
struct ArraySet {
1250
  ArrayCfg cfg_;         //!< Binary array configuration
1251
  const ArrayDef* def_;  //!< Binary array definition array
1252
  size_t defSize_;       //!< Size of the array definition array
1253
};
1254
1255
/*!
1256
  @brief Composite to model an array of different tags. The tag types as well
1257
         as other aspects of the array are configurable. The elements of this
1258
         component are of type TiffBinaryElement.
1259
 */
1260
class TiffBinaryArray : public TiffEntryBase {
1261
 public:
1262
  //! @name Creators
1263
  //@{
1264
  //! Constructor
1265
  TiffBinaryArray(uint16_t tag, IfdId group, const ArrayCfg& arrayCfg, const ArrayDef* arrayDef, size_t defSize);
1266
  //! Constructor for a complex binary array
1267
  TiffBinaryArray(uint16_t tag, IfdId group, const ArraySet* arraySet, size_t setSize, CfgSelFct cfgSelFct);
1268
  //! Virtual destructor
1269
8.36k
  ~TiffBinaryArray() override = default;
1270
  //@}
1271
1272
  //! @name NOT implemented
1273
  //@{
1274
  //! Assignment operator.
1275
  TiffBinaryArray& operator=(const TiffBinaryArray&) = delete;
1276
  //@}
1277
1278
  //! @name Manipulators
1279
  //@{
1280
  //! Add an element to the binary array, return the size of the element
1281
  size_t addElement(size_t idx, const ArrayDef& def);
1282
  /*!
1283
    @brief Setup cfg and def for the component, in case of a complex binary array.
1284
           Else do nothing. Return true if the initialization succeeded, else false.
1285
1286
    This version of initialize() is used during intrusive writing. It determines the
1287
    correct settings based on the \em group passed in (which is the group of the first
1288
    tag that is added to the array). It doesn't require cfgSelFct_.
1289
1290
    @param group Group to setup the binary array for.
1291
    @return true if the initialization succeeded, else false.
1292
   */
1293
  bool initialize(IfdId group);
1294
  /*!
1295
    @brief Setup cfg and def for the component, in case of a complex binary array.
1296
           Else do nothing. Return true if the initialization succeeded, else false.
1297
1298
    This version of initialize() is used for reading and non-intrusive writing. It
1299
    calls cfgSelFct_ to determine the correct settings.
1300
1301
    @param pRoot Pointer to the root component of the TIFF tree.
1302
    @return true if the initialization succeeded, else false.
1303
   */
1304
  bool initialize(TiffComponent* pRoot);
1305
  //! Initialize the original data buffer and its size from the base entry.
1306
  void iniOrigDataBuf();
1307
  //! Update the original data buffer and its size, return true if successful.
1308
  bool updOrigDataBuf(const byte* pData, size_t size);
1309
  //! Set a flag to indicate if the array was decoded
1310
258k
  void setDecoded(bool decoded) {
1311
258k
    decoded_ = decoded;
1312
258k
  }
1313
  //@}
1314
1315
  //! @name Accessors
1316
  //@{
1317
  //! Return a pointer to the configuration
1318
1.03M
  [[nodiscard]] const ArrayCfg* cfg() const {
1319
1.03M
    return arrayCfg_;
1320
1.03M
  }
1321
  //! Return a pointer to the definition
1322
3.85k
  [[nodiscard]] const ArrayDef* def() const {
1323
3.85k
    return arrayDef_;
1324
3.85k
  }
1325
  //! Return the number of elements in the definition
1326
3.85k
  [[nodiscard]] size_t defSize() const {
1327
3.85k
    return defSize_;
1328
3.85k
  }
1329
  //! Return the flag which indicates if the array was decoded
1330
8.36k
  [[nodiscard]] bool decoded() const {
1331
8.36k
    return decoded_;
1332
8.36k
  }
1333
  //@}
1334
1335
 protected:
1336
  //! @name Protected Creators
1337
  //@{
1338
  //! Copy constructor (used to implement clone()).
1339
  TiffBinaryArray(const TiffBinaryArray& rhs);
1340
  //@}
1341
1342
  //! @name Protected Manipulators
1343
  //@{
1344
  /*!
1345
    @brief Implements addPath(). Todo: Document it!
1346
   */
1347
  TiffComponent* doAddPath(uint16_t tag, TiffPath& tiffPath, TiffComponent* pRoot, UniquePtr object) override;
1348
  /*!
1349
    @brief Implements addChild(). Todo: Document it!
1350
   */
1351
  TiffComponent* doAddChild(SharedPtr tiffComponent) override;
1352
  void doAccept(TiffVisitor& visitor) override;
1353
  void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override;
1354
  /*!
1355
    @brief Implements write(). Todo: Document it!
1356
   */
1357
  size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx,
1358
                 size_t& imageIdx) override;
1359
  //@}
1360
1361
  //! @name Protected Accessors
1362
  //@{
1363
  [[nodiscard]] TiffBinaryArray* doClone() const override;
1364
  //! Implements count(). Todo: Document it!
1365
  [[nodiscard]] size_t doCount() const override;
1366
  // Using doWriteData from base class
1367
  // Using doWriteImage from base class
1368
  /*!
1369
    @brief Implements size(). Todo: Document it!
1370
   */
1371
  [[nodiscard]] size_t doSize() const override;
1372
  // Using doSizeData from base class
1373
  // Using doSizeImage from base class
1374
  //@}
1375
1376
 private:
1377
  // DATA
1378
  CfgSelFct cfgSelFct_{};       //!< Pointer to a function to determine which cfg to use (may be 0)
1379
  const ArraySet* arraySet_{};  //!< Pointer to the array set, if any (may be 0)
1380
  const ArrayCfg* arrayCfg_{};  //!< Pointer to the array configuration (must not be 0, except for
1381
                                //!< unrecognized complex binary arrays)
1382
  const ArrayDef* arrayDef_{};  //!< Pointer to the array definition (may be 0)
1383
  size_t defSize_{};            //!< Size of the array definition array (may be 0)
1384
  size_t setSize_{};            //!< Size of the array set (may be 0)
1385
  Components elements_;         //!< List of elements in this composite
1386
  byte* origData_{};            //!< Pointer to the original data buffer (unencrypted)
1387
  size_t origSize_{};           //!< Size of the original data buffer
1388
  TiffComponent* pRoot_{};      //!< Pointer to the root component of the TIFF tree. (Only used for intrusive writing.)
1389
  bool decoded_{};              //!< Flag to indicate if the array was decoded
1390
};
1391
1392
/*!
1393
  @brief Element of a TiffBinaryArray.
1394
 */
1395
class TiffBinaryElement : public TiffEntryBase {
1396
  using TiffEntryBase::TiffEntryBase;
1397
1398
 public:
1399
  //! @name Manipulators
1400
  //@{
1401
  /*!
1402
    @brief Set the array definition for this element.
1403
   */
1404
254k
  void setElDef(const ArrayDef& def) {
1405
254k
    elDef_ = def;
1406
254k
  }
1407
  /*!
1408
    @brief Set the byte order of this element.
1409
   */
1410
254k
  void setElByteOrder(ByteOrder byteOrder) {
1411
254k
    elByteOrder_ = byteOrder;
1412
254k
  }
1413
  //@}
1414
1415
  //! @name Accessors
1416
  //@{
1417
  /*!
1418
    @brief Return the array definition of this element.
1419
   */
1420
254k
  [[nodiscard]] const ArrayDef* elDef() const {
1421
254k
    return &elDef_;
1422
254k
  }
1423
  /*!
1424
    @brief Return the byte order of this element.
1425
   */
1426
254k
  [[nodiscard]] ByteOrder elByteOrder() const {
1427
254k
    return elByteOrder_;
1428
254k
  }
1429
  //@}
1430
1431
 protected:
1432
  //! @name Protected Manipulators
1433
  //@{
1434
  void doAccept(TiffVisitor& visitor) override;
1435
  void doEncode(TiffEncoder& encoder, const Exifdatum* datum) override;
1436
  /*!
1437
    @brief Implements write(). Todo: Document it!
1438
   */
1439
  size_t doWrite(IoWrapper& ioWrapper, ByteOrder byteOrder, size_t offset, size_t valueIdx, size_t dataIdx,
1440
                 size_t& imageIdx) override;
1441
  //@}
1442
1443
  //! @name Protected Accessors
1444
  //@{
1445
  [[nodiscard]] TiffBinaryElement* doClone() const override;
1446
  /*!
1447
    @brief Implements count(). Returns the count from the element definition.
1448
   */
1449
  [[nodiscard]] size_t doCount() const override;
1450
  // Using doWriteData from base class
1451
  // Using doWriteImage from base class
1452
  /*!
1453
    @brief Implements size(). Returns count * type-size, both taken from
1454
           the element definition.
1455
   */
1456
  [[nodiscard]] size_t doSize() const override;
1457
  // Using doSizeData from base class
1458
  // Using doSizeImage from base class
1459
  //@}
1460
1461
 private:
1462
  // DATA
1463
  ArrayDef elDef_{0, ttUndefined, 0};        //!< The array element definition
1464
  ByteOrder elByteOrder_{invalidByteOrder};  //!< Byte order to read/write the element
1465
};
1466
1467
// *****************************************************************************
1468
// template, inline and free functions
1469
1470
/*!
1471
  @brief Compare two TIFF component pointers by tag. Return true if the tag
1472
         of component lhs is less than that of rhs.
1473
 */
1474
bool cmpTagLt(const TiffComponent::SharedPtr& lhs, const TiffComponent::SharedPtr& rhs);
1475
1476
//! Function to create and initialize a new TIFF entry
1477
TiffComponent::UniquePtr newTiffEntry(uint16_t tag, IfdId group);
1478
1479
//! Function to create and initialize a new TIFF makernote entry
1480
TiffComponent::UniquePtr newTiffMnEntry(uint16_t tag, IfdId group);
1481
1482
//! Function to create and initialize a new binary array element
1483
TiffComponent::UniquePtr newTiffBinaryElement(uint16_t tag, IfdId group);
1484
1485
//! Function to create and initialize a new TIFF directory
1486
template <IfdId newGroup>
1487
41.4k
TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) {
1488
41.4k
  return std::make_unique<TiffDirectory>(tag, newGroup);
1489
41.4k
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1487
25.5k
TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) {
1488
25.5k
  return std::make_unique<TiffDirectory>(tag, newGroup);
1489
25.5k
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)56>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)5>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)21>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)6>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1487
14.6k
TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) {
1488
14.6k
  return std::make_unique<TiffDirectory>(tag, newGroup);
1489
14.6k
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1487
940
TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) {
1488
940
  return std::make_unique<TiffDirectory>(tag, newGroup);
1489
940
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1487
131
TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) {
1488
131
  return std::make_unique<TiffDirectory>(tag, newGroup);
1489
131
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)19>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1487
198
TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) {
1488
198
  return std::make_unique<TiffDirectory>(tag, newGroup);
1489
198
}
1490
1491
//! Function to create and initialize a new TIFF sub-directory
1492
template <IfdId newGroup>
1493
9.63k
TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) {
1494
9.63k
  return std::make_unique<TiffSubIfd>(tag, group, newGroup);
1495
9.63k
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)56>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)5>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1493
4.51k
TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) {
1494
4.51k
  return std::make_unique<TiffSubIfd>(tag, group, newGroup);
1495
4.51k
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)6>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1493
3.00k
TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) {
1494
3.00k
  return std::make_unique<TiffSubIfd>(tag, group, newGroup);
1495
3.00k
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1493
293
TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) {
1494
293
  return std::make_unique<TiffSubIfd>(tag, group, newGroup);
1495
293
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)7>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1493
1.78k
TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) {
1494
1.78k
  return std::make_unique<TiffSubIfd>(tag, group, newGroup);
1495
1.78k
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1493
40
TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) {
1494
40
  return std::make_unique<TiffSubIfd>(tag, group, newGroup);
1495
40
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)100>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)99>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)101>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)102>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)103>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)104>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)105>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)106>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)107>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)108>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)109>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)110>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)111>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)112>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)113>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)114>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)65>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)119>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)124>(unsigned short, Exiv2::IfdId)
1496
1497
//! Function to create and initialize a new binary array entry
1498
template <const ArrayCfg& arrayCfg, size_t N, const ArrayDef (&arrayDef)[N]>
1499
3.67k
TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) {
1500
3.67k
  static_assert(N > 0, "Passed zero length newTiffBinaryArray0");
1501
3.67k
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N);
1502
3.67k
}
tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10canonCsCfgEELm1ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10canonCsDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Line
Count
Source
1499
3.01k
TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) {
1500
3.01k
  static_assert(N > 0, "Passed zero length newTiffBinaryArray0");
1501
3.01k
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N);
1502
3.01k
}
tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10canonFiCfgEELm1ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10canonFiDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Line
Count
Source
1499
412
TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) {
1500
412
  static_assert(N > 0, "Passed zero length newTiffBinaryArray0");
1501
412
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N);
1502
412
}
tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10canonLeCfgEELm2ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10canonLeDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Line
Count
Source
1499
254
TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) {
1500
254
  static_assert(N > 0, "Passed zero length newTiffBinaryArray0");
1501
254
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N);
1502
254
}
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonVrCfgEELm2ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonVrDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonPcCfgEELm13ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonPcDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonWtCfgEELm3ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonWtDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonIiCfgEELm5ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonIiDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonAfCfgEELm3ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonAfDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonMeCfgEELm4ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonMeDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10nikonFiCfgEELm3ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10nikonFiDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L11nikonAFTCfgEELm3ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L11nikonAFTDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L12samsungPwCfgEELm5ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L12samsungPwDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L12sonyMisc1CfgEELm1ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L12sonyMisc1DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L13sonySInfo1CfgEELm5ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L13sonySInfo1DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Line
Count
Source
1499
1
TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) {
1500
1
  static_assert(N > 0, "Passed zero length newTiffBinaryArray0");
1501
1
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N);
1502
1
}
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L12sony1MCs7CfgEELm2ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10minoCs7DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L15sony1MCsA100CfgEELm3ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L15sony1MCsA100DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10minoCs7CfgEELm2ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10minoCs7DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10minoCs5CfgEELm1ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10minoCs5DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
1503
1504
//! Function to create and initialize a new simple binary array entry
1505
template <const ArrayCfg& arrayCfg>
1506
4.68k
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
4.68k
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
4.68k
}
Unexecuted instantiation: tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::minoCsoCfg>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::minoCsnCfg>(unsigned short, Exiv2::IfdId)
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonSiCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
1.18k
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
1.18k
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
1.18k
}
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonPaCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
639
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
639
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
639
}
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonCfCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
87
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
87
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
87
}
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonPiCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
364
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
364
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
364
}
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonTiCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
440
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
440
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
440
}
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonPrCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
226
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
226
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
226
}
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonAfMiAdjCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
265
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
265
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
265
}
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonVigCor2Cfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
256
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
256
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
256
}
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonLiOpCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
257
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
257
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
257
}
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonAmCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
250
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
250
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
250
}
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonMeCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
239
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
239
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
239
}
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonFilCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
238
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
238
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
238
}
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonHdrCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
237
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
237
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
237
}
Unexecuted instantiation: tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonAfCCfg>(unsigned short, Exiv2::IfdId)
tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::canonRawBCfg>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1506
1
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
1
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
1
}
Unexecuted instantiation: tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::sony1MCsoCfg>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: tiffimage_int.cpp:std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffBinaryArray1<Exiv2::Internal::sony1MCsnCfg>(unsigned short, Exiv2::IfdId)
1509
1510
//! Function to create and initialize a new complex binary array entry
1511
template <size_t N, const ArraySet (&arraySet)[N], CfgSelFct cfgSelFct>
1512
1
TiffComponent::UniquePtr newTiffBinaryArray2(uint16_t tag, IfdId group) {
1513
1
  static_assert(N > 0, "Passed zero length newTiffBinaryArray2");
1514
1
  return std::make_unique<TiffBinaryArray>(tag, group, arraySet, N, cfgSelFct);
1515
1
}
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm6ETnRAT__KNS0_8ArraySetEL_ZNS0_L10nikonSiSetEEXadL_ZNS0_13nikonSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm6ETnRAT__KNS0_8ArraySetEL_ZNS0_L10nikonCbSetEEXadL_ZNS0_13nikonSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm4ETnRAT__KNS0_8ArraySetEL_ZNS0_L10nikonLdSetEEXadL_ZNS0_13nikonSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm5ETnRAT__KNS0_8ArraySetEL_ZNS0_L10nikonFlSetEEXadL_ZNS0_13nikonSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm2ETnRAT__KNS0_8ArraySetEL_ZNS0_L11nikonAf2SetEEXadL_ZNS0_13nikonSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm1ETnRAT__KNS0_8ArraySetEL_ZNS0_L12sony2010eSetEEXadL_ZNS0_17sony2010eSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm1ETnRAT__KNS0_8ArraySetEL_ZNS0_L10sony2FpSetEEXadL_ZNS0_15sony2FpSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm1ETnRAT__KNS0_8ArraySetEL_ZNS0_L13sonyMisc2bSetEEXadL_ZNS0_18sonyMisc2bSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE
tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm1ETnRAT__KNS0_8ArraySetEL_ZNS0_L13sonyMisc3cSetEEXadL_ZNS0_18sonyMisc3cSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE
Line
Count
Source
1512
1
TiffComponent::UniquePtr newTiffBinaryArray2(uint16_t tag, IfdId group) {
1513
1
  static_assert(N > 0, "Passed zero length newTiffBinaryArray2");
1514
1
  return std::make_unique<TiffBinaryArray>(tag, group, arraySet, N, cfgSelFct);
1515
1
}
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm2ETnRAT__KNS0_8ArraySetEL_ZNS0_L10sony1CsSetEEXadL_ZNS0_14sonyCsSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm2ETnRAT__KNS0_8ArraySetEL_ZNS0_L10sony2CsSetEEXadL_ZNS0_14sonyCsSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE
1516
1517
//! Function to create and initialize a new TIFF entry for a thumbnail (data)
1518
template <uint16_t szTag, IfdId szGroup>
1519
896
TiffComponent::UniquePtr newTiffThumbData(uint16_t tag, IfdId group) {
1520
896
  return std::make_unique<TiffDataEntry>(tag, group, szTag, szGroup);
1521
896
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)279, (Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1519
125
TiffComponent::UniquePtr newTiffThumbData(uint16_t tag, IfdId group) {
1520
125
  return std::make_unique<TiffDataEntry>(tag, group, szTag, szGroup);
1521
125
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)514, (Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1519
771
TiffComponent::UniquePtr newTiffThumbData(uint16_t tag, IfdId group) {
1520
771
  return std::make_unique<TiffDataEntry>(tag, group, szTag, szGroup);
1521
771
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)514, (Exiv2::IfdId)65>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)3, (Exiv2::IfdId)117>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)3, (Exiv2::IfdId)116>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)514, (Exiv2::IfdId)119>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)137, (Exiv2::IfdId)124>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbData<(unsigned short)137, (Exiv2::IfdId)57>(unsigned short, Exiv2::IfdId)
1522
1523
//! Function to create and initialize a new TIFF entry for a thumbnail (size)
1524
template <uint16_t dtTag, IfdId dtGroup>
1525
4.02k
TiffComponent::UniquePtr newTiffThumbSize(uint16_t tag, IfdId group) {
1526
4.02k
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1527
4.02k
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)273, (Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1525
130
TiffComponent::UniquePtr newTiffThumbSize(uint16_t tag, IfdId group) {
1526
130
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1527
130
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)513, (Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1525
3.89k
TiffComponent::UniquePtr newTiffThumbSize(uint16_t tag, IfdId group) {
1526
3.89k
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1527
3.89k
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)513, (Exiv2::IfdId)65>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)4, (Exiv2::IfdId)117>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)4, (Exiv2::IfdId)116>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)513, (Exiv2::IfdId)119>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)136, (Exiv2::IfdId)124>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffThumbSize<(unsigned short)136, (Exiv2::IfdId)57>(unsigned short, Exiv2::IfdId)
1528
1529
//! Function to create and initialize a new TIFF entry for image data
1530
template <uint16_t szTag, IfdId szGroup>
1531
4.53k
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
4.53k
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
4.53k
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
538
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
538
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
538
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
141
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
141
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
141
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
3.12k
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
3.12k
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
3.12k
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
38
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
38
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
38
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
37
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
37
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
37
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
47
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
47
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
47
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)10>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
26
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
26
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
26
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)10>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
26
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
26
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
26
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)10>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
48
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
48
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
48
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)11>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
29
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
29
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
29
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)11>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
27
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
27
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
27
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)11>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
50
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
50
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
50
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)12>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
32
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
32
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
32
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)12>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
32
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
32
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
32
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)12>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
46
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
46
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
46
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)13>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
26
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
26
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
26
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)13>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
29
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
29
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
29
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)13>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
42
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
42
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
42
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)14>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)14>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)14>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
1
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
1
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
1
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)15>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)15>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)15>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)16>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)16>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)16>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)17>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)17>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)17>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
24
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
24
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
24
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
10
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
10
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
10
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
105
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
105
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
105
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)279, (Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
1
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
1
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
1
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)325, (Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)514, (Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1531
55
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
55
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
55
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageData<(unsigned short)258, (Exiv2::IfdId)99>(unsigned short, Exiv2::IfdId)
1534
1535
//! Function to create and initialize a new TIFF entry for image data (size)
1536
template <uint16_t dtTag, IfdId dtGroup>
1537
5.66k
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
5.66k
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
5.66k
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
442
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
442
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
442
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
265
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
265
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
265
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)1>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
4.05k
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
4.05k
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
4.05k
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
10
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
10
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
10
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
91
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
91
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
91
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)10>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
9
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
9
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
9
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)10>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
12
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
12
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
12
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)10>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
205
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
205
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
205
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)11>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
3
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
3
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
3
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)11>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
11
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
11
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
11
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)11>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
115
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
115
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
115
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)12>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
1
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
1
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
1
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)12>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
10
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
10
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
10
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)12>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
127
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
127
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
127
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)13>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)13>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
11
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
11
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
11
}
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)13>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
95
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
95
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
95
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)14>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)14>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)14>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)15>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)15>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)15>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)16>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)16>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)16>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)17>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)17>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)17>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)2>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
13
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
13
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
13
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)18>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
1
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
1
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
1
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)3>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
150
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
150
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
150
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)273, (Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId)
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)324, (Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId)
std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)513, (Exiv2::IfdId)4>(unsigned short, Exiv2::IfdId)
Line
Count
Source
1537
43
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
43
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
43
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffImageSize<(unsigned short)257, (Exiv2::IfdId)99>(unsigned short, Exiv2::IfdId)
1541
1542
}  // namespace Internal
1543
}  // namespace Exiv2
1544
1545
#endif  // #ifndef TIFFCOMPOSITE_INT_HPP_