Coverage Report

Created: 2026-07-30 07:17

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
134k
  constexpr TiffComponent(uint16_t tag, IfdId group) : tag_(tag), group_(group) {
171
134k
  }
172
  //! Virtual destructor.
173
134k
  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
134k
  void setStart(const byte* pStart) {
217
134k
    pStart_ = const_cast<byte*>(pStart);
218
134k
  }
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
697k
  [[nodiscard]] uint16_t tag() const {
241
697k
    return tag_;
242
697k
  }
243
  //! Return the group id of this component
244
637k
  [[nodiscard]] IfdId group() const {
245
637k
    return group_;
246
637k
  }
247
  //! Return a pointer to the start of the binary representation of the component
248
140k
  [[nodiscard]] byte* start() const {
249
140k
    return pStart_;
250
140k
  }
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
117k
  void setOffset(size_t offset) {
417
117k
    offset_ = offset;
418
117k
  }
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
3.04k
  [[nodiscard]] TiffType tiffType() const {
459
3.04k
    return tiffType_;
460
3.04k
  }
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
62.9k
  [[nodiscard]] const byte* pData() const {
477
62.9k
    return pData_;
478
62.9k
  }
479
  //! Return a const pointer to the converted value of this component
480
274k
  [[nodiscard]] const Value* pValue() const {
481
274k
    return pValue_.get();
482
274k
  }
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
117k
  void setIdx(int idx) {
502
117k
    idx_ = idx;
503
117k
  }
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
29.3k
  [[nodiscard]] std::shared_ptr<DataBuf> storage() const {
541
29.3k
    return storage_;
542
29.3k
  }
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
172
  [[nodiscard]] uint16_t szTag() const {
624
172
    return szTag_;
625
172
  }
626
  //! Return the group of the entry which has the size
627
172
  [[nodiscard]] IfdId szGroup() const {
628
172
    return szGroup_;
629
172
  }
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
83
  [[nodiscard]] uint16_t dtTag() const {
790
83
    return dtTag_;
791
83
  }
792
  //! Return the group of the related entry which has the data area
793
83
  [[nodiscard]] IfdId dtGroup() const {
794
83
    return dtGroup_;
795
83
  }
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
7.10k
  ~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
5.69k
  [[nodiscard]] bool hasNext() const {
843
5.69k
    return hasNext_;
844
5.69k
  }
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
2.99k
  ~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
86
  void setImageByteOrder(ByteOrder byteOrder) {
1107
86
    imageByteOrder_ = byteOrder;
1108
86
  }
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
9.12k
  bool operator==(size_t idx) const {
1218
9.12k
    return idx_ == idx;
1219
9.12k
  }
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
29.3k
  [[nodiscard]] size_t tagStep() const {
1235
29.3k
    return elDefaultDef_.size(0, group_);
1236
29.3k
  }
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
1.15k
  ~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
29.7k
  void setDecoded(bool decoded) {
1311
29.7k
    decoded_ = decoded;
1312
29.7k
  }
1313
  //@}
1314
1315
  //! @name Accessors
1316
  //@{
1317
  //! Return a pointer to the configuration
1318
119k
  [[nodiscard]] const ArrayCfg* cfg() const {
1319
119k
    return arrayCfg_;
1320
119k
  }
1321
  //! Return a pointer to the definition
1322
740
  [[nodiscard]] const ArrayDef* def() const {
1323
740
    return arrayDef_;
1324
740
  }
1325
  //! Return the number of elements in the definition
1326
740
  [[nodiscard]] size_t defSize() const {
1327
740
    return defSize_;
1328
740
  }
1329
  //! Return the flag which indicates if the array was decoded
1330
1.15k
  [[nodiscard]] bool decoded() const {
1331
1.15k
    return decoded_;
1332
1.15k
  }
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
29.3k
  void setElDef(const ArrayDef& def) {
1405
29.3k
    elDef_ = def;
1406
29.3k
  }
1407
  /*!
1408
    @brief Set the byte order of this element.
1409
   */
1410
29.3k
  void setElByteOrder(ByteOrder byteOrder) {
1411
29.3k
    elByteOrder_ = byteOrder;
1412
29.3k
  }
1413
  //@}
1414
1415
  //! @name Accessors
1416
  //@{
1417
  /*!
1418
    @brief Return the array definition of this element.
1419
   */
1420
29.3k
  [[nodiscard]] const ArrayDef* elDef() const {
1421
29.3k
    return &elDef_;
1422
29.3k
  }
1423
  /*!
1424
    @brief Return the byte order of this element.
1425
   */
1426
29.3k
  [[nodiscard]] ByteOrder elByteOrder() const {
1427
29.3k
    return elByteOrder_;
1428
29.3k
  }
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
4.08k
TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) {
1488
4.08k
  return std::make_unique<TiffDirectory>(tag, newGroup);
1489
4.08k
}
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
2.25k
TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) {
1488
2.25k
  return std::make_unique<TiffDirectory>(tag, newGroup);
1489
2.25k
}
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
1.66k
TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) {
1488
1.66k
  return std::make_unique<TiffDirectory>(tag, newGroup);
1489
1.66k
}
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
130
TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) {
1488
130
  return std::make_unique<TiffDirectory>(tag, newGroup);
1489
130
}
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
32
TiffComponent::UniquePtr newTiffDirectory(uint16_t tag, IfdId /*group*/) {
1488
32
  return std::make_unique<TiffDirectory>(tag, newGroup);
1489
32
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffDirectory<(Exiv2::IfdId)19>(unsigned short, Exiv2::IfdId)
1490
1491
//! Function to create and initialize a new TIFF sub-directory
1492
template <IfdId newGroup>
1493
2.99k
TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) {
1494
2.99k
  return std::make_unique<TiffSubIfd>(tag, group, newGroup);
1495
2.99k
}
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
1.29k
TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) {
1494
1.29k
  return std::make_unique<TiffSubIfd>(tag, group, newGroup);
1495
1.29k
}
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
1.12k
TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) {
1494
1.12k
  return std::make_unique<TiffSubIfd>(tag, group, newGroup);
1495
1.12k
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(Exiv2::IfdId)9>(unsigned short, Exiv2::IfdId)
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
577
TiffComponent::UniquePtr newTiffSubIfd(uint16_t tag, IfdId group) {
1494
577
  return std::make_unique<TiffSubIfd>(tag, group, newGroup);
1495
577
}
Unexecuted instantiation: std::__1::unique_ptr<Exiv2::Internal::TiffComponent, std::__1::default_delete<Exiv2::Internal::TiffComponent> > Exiv2::Internal::newTiffSubIfd<(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::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
491
TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) {
1500
491
  static_assert(N > 0, "Passed zero length newTiffBinaryArray0");
1501
491
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N);
1502
491
}
tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10canonCsCfgEELm1ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10canonCsDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Line
Count
Source
1499
374
TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) {
1500
374
  static_assert(N > 0, "Passed zero length newTiffBinaryArray0");
1501
374
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N);
1502
374
}
tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10canonFiCfgEELm1ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10canonFiDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Line
Count
Source
1499
63
TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) {
1500
63
  static_assert(N > 0, "Passed zero length newTiffBinaryArray0");
1501
63
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N);
1502
63
}
tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L10canonLeCfgEELm2ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L10canonLeDefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
Line
Count
Source
1499
54
TiffComponent::UniquePtr newTiffBinaryArray0(uint16_t tag, IfdId group) {
1500
54
  static_assert(N > 0, "Passed zero length newTiffBinaryArray0");
1501
54
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, arrayDef, N);
1502
54
}
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
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray0IL_ZNS0_L13sonySInfo1CfgEELm5ETnRAT0__KNS0_8ArrayDefEL_ZNS0_L13sonySInfo1DefEEEENSt3__110unique_ptrINS0_13TiffComponentENS6_14default_deleteIS8_EEEEtNS_5IfdIdE
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
663
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
663
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
663
}
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
141
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
141
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
141
}
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
13
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
13
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
13
}
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
5
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
5
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
5
}
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
6
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
6
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
6
}
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
66
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
66
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
66
}
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
61
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
61
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
61
}
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
54
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
54
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
54
}
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
54
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
54
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
54
}
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
54
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
54
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
54
}
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
54
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
54
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
54
}
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
54
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
54
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
54
}
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
50
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
50
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
50
}
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
51
TiffComponent::UniquePtr newTiffBinaryArray1(uint16_t tag, IfdId group) {
1507
51
  return std::make_unique<TiffBinaryArray>(tag, group, arrayCfg, nullptr, 0);
1508
51
}
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)
Unexecuted instantiation: 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)
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
0
TiffComponent::UniquePtr newTiffBinaryArray2(uint16_t tag, IfdId group) {
1513
0
  static_assert(N > 0, "Passed zero length newTiffBinaryArray2");
1514
0
  return std::make_unique<TiffBinaryArray>(tag, group, arraySet, N, cfgSelFct);
1515
0
}
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
Unexecuted instantiation: tiffimage_int.cpp:_ZN5Exiv28Internal19newTiffBinaryArray2ILm1ETnRAT__KNS0_8ArraySetEL_ZNS0_L13sonyMisc3cSetEEXadL_ZNS0_18sonyMisc3cSelectorEtPKhmPNS0_13TiffComponentEEEEENSt3__110unique_ptrIS8_NSA_14default_deleteIS8_EEEEtNS_5IfdIdE
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
71
TiffComponent::UniquePtr newTiffThumbData(uint16_t tag, IfdId group) {
1520
71
  return std::make_unique<TiffDataEntry>(tag, group, szTag, szGroup);
1521
71
}
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
15
TiffComponent::UniquePtr newTiffThumbData(uint16_t tag, IfdId group) {
1520
15
  return std::make_unique<TiffDataEntry>(tag, group, szTag, szGroup);
1521
15
}
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
56
TiffComponent::UniquePtr newTiffThumbData(uint16_t tag, IfdId group) {
1520
56
  return std::make_unique<TiffDataEntry>(tag, group, szTag, szGroup);
1521
56
}
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
29
TiffComponent::UniquePtr newTiffThumbSize(uint16_t tag, IfdId group) {
1526
29
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1527
29
}
Unexecuted instantiation: 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)
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
29
TiffComponent::UniquePtr newTiffThumbSize(uint16_t tag, IfdId group) {
1526
29
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1527
29
}
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
101
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
101
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
101
}
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
5
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
5
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
5
}
Unexecuted instantiation: 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)
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
96
TiffComponent::UniquePtr newTiffImageData(uint16_t tag, IfdId group) {
1532
96
  return std::make_unique<TiffImageEntry>(tag, group, szTag, szGroup);
1533
96
}
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
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)
Unexecuted instantiation: 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)
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)
Unexecuted instantiation: 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)
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)
Unexecuted instantiation: 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)
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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
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)
Unexecuted instantiation: 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)
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
54
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
54
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
54
}
Unexecuted instantiation: 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)
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
7
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
7
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
7
}
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
46
TiffComponent::UniquePtr newTiffImageSize(uint16_t tag, IfdId group) {
1538
  // Todo: Same as newTiffThumbSize - consolidate (rename)?
1539
46
  return std::make_unique<TiffSizeEntry>(tag, group, dtTag, dtGroup);
1540
46
}
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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
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)
Unexecuted instantiation: 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)
Unexecuted instantiation: 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)
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
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)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)
Unexecuted instantiation: 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)
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)
Unexecuted instantiation: 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)
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)
Unexecuted instantiation: 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)
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_