Use std::unordered_set for tiffImageTags
This commit is contained in:
parent
12b94bc420
commit
7ec15d247e
@ -10,6 +10,7 @@
|
||||
|
||||
#include <array>
|
||||
#include <iostream>
|
||||
#include <unordered_set>
|
||||
|
||||
// Shortcuts for the newTiffBinaryArray templates.
|
||||
#define EXV_BINARY_ARRAY(arrayCfg, arrayDef) (newTiffBinaryArray0<&(arrayCfg), std::size(arrayDef), arrayDef>)
|
||||
@ -2182,7 +2183,7 @@ bool TiffHeaderBase::isImageTag(uint16_t /*tag*/, IfdId /*group*/, const Primary
|
||||
|
||||
bool isTiffImageTag(uint16_t tag, IfdId group) {
|
||||
//! List of TIFF image tags
|
||||
static constexpr TiffImgTagStruct tiffImageTags[] = {
|
||||
static const std::unordered_set<TiffImgTagKey, TiffImgTagKey_hash> tiffImageTags({
|
||||
{0x00fe, IfdId::ifd0Id}, // Exif.Image.NewSubfileType
|
||||
{0x00ff, IfdId::ifd0Id}, // Exif.Image.SubfileType
|
||||
{0x0100, IfdId::ifd0Id}, // Exif.Image.ImageWidth
|
||||
@ -2249,11 +2250,12 @@ bool isTiffImageTag(uint16_t tag, IfdId group) {
|
||||
{0x8828, IfdId::ifd0Id}, // Exif.Image.OECF
|
||||
{0x9102, IfdId::ifd0Id}, // Exif.Image.CompressedBitsPerPixel
|
||||
{0x9217, IfdId::ifd0Id}, // Exif.Image.SensingMethod
|
||||
};
|
||||
});
|
||||
|
||||
const bool found = tiffImageTags.find(TiffImgTagKey(tag, group)) != tiffImageTags.end();
|
||||
// If tag, group is one of the image tags listed above -> bingo!
|
||||
#ifdef EXIV2_DEBUG_MESSAGES
|
||||
if (find(tiffImageTags, TiffImgTagStruct(tag, group))) {
|
||||
if (found) {
|
||||
ExifKey key(tag, groupName(group));
|
||||
std::cerr << "Image tag: " << key << " (3)\n";
|
||||
return true;
|
||||
@ -2261,7 +2263,7 @@ bool isTiffImageTag(uint16_t tag, IfdId group) {
|
||||
std::cerr << "Not an image tag: " << tag << " (4)\n";
|
||||
return false;
|
||||
#endif
|
||||
return find(tiffImageTags, TiffImgTagStruct(tag, group));
|
||||
return found;
|
||||
}
|
||||
|
||||
TiffHeader::TiffHeader(ByteOrder byteOrder, uint32_t offset, bool hasImageTags) :
|
||||
|
||||
@ -133,7 +133,13 @@ class TiffHeader : public TiffHeaderBase {
|
||||
/*!
|
||||
@brief Data structure used to list image tags for TIFF and TIFF-like images.
|
||||
*/
|
||||
using TiffImgTagStruct = std::pair<uint16_t, IfdId>;
|
||||
using TiffImgTagKey = std::pair<uint16_t, IfdId>;
|
||||
|
||||
struct TiffImgTagKey_hash {
|
||||
std::size_t operator()(const TiffImgTagKey& pair) const {
|
||||
return std::hash<uint64_t>{}(static_cast<uint64_t>(pair.first) << 32 | static_cast<uint64_t>(pair.second));
|
||||
}
|
||||
};
|
||||
|
||||
using TiffGroupKey = std::pair<uint32_t, IfdId>;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user