From 079f4351acfb8a535c744b65a322f1ad09bd8625 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Mon, 31 Mar 2025 14:53:54 -0700 Subject: [PATCH] easyaccess: back to normal templated function Signed-off-by: Rosen Penev --- src/easyaccess.cpp | 73 ++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 42 deletions(-) diff --git a/src/easyaccess.cpp b/src/easyaccess.cpp index a6172b2395..58afae217b 100644 --- a/src/easyaccess.cpp +++ b/src/easyaccess.cpp @@ -9,17 +9,6 @@ namespace { using namespace Exiv2; -template -ExifData::const_iterator findMetadatum(const ExifData& ed) { - static_assert(N > 0, "Passed zero length findMetadatum"); - for (const auto& k : keys) { - auto pos = ed.findKey(ExifKey(k)); - if (pos != ed.end()) - return pos; - } - return ed.end(); -} // findMetadatum - /*! @brief Search \em ed for a Metadatum specified by the \em keys. The \em keys are searched in the order of their appearance, the @@ -73,7 +62,7 @@ ExifData::const_iterator orientation(const ExifData& ed) { "Exif.Sony1MltCsA100.Rotation", "Exif.Sony1Cs.Rotation", "Exif.Sony2Cs.Rotation", "Exif.Sony1Cs2.Rotation", "Exif.Sony2Cs2.Rotation", "Exif.Sony1MltCsA100.Rotation", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator isoSpeed(const ExifData& ed) { @@ -155,7 +144,7 @@ ExifData::const_iterator isoSpeed(const ExifData& ed) { // ISO value (see EXIF 2.3 Annex G) int64_t iso_tmp_val = -1; while (iso_tmp_val == -1 && (iso_val == 65535 || md == ed.end())) { - auto md_st = findMetadatum(ed); + auto md_st = findMetadatum(ed, sensitivityType, std::size(sensitivityType)); // no SensitivityType? exit with existing data if (md_st == ed.end()) break; @@ -198,7 +187,7 @@ ExifData::const_iterator dateTimeOriginal(const ExifData& ed) { "Exif.Photo.DateTimeOriginal", "Exif.Image.DateTimeOriginal", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator flashBias(const ExifData& ed) { @@ -207,7 +196,7 @@ ExifData::const_iterator flashBias(const ExifData& ed) { "Exif.OlympusCs.FlashExposureComp", "Exif.Minolta.FlashExposureComp", "Exif.SonyMinolta.FlashExposureComp", "Exif.Sony1.FlashExposureComp", "Exif.Sony2.FlashExposureComp", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator exposureMode(const ExifData& ed) { @@ -219,7 +208,7 @@ ExifData::const_iterator exposureMode(const ExifData& ed) { "Exif.Sony2Cs.ExposureProgram", "Exif.Sony1MltCsA100.ExposureMode", "Exif.SonyMisc2b.ExposureProgram", "Exif.Sigma.ExposureMode", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator sceneMode(const ExifData& ed) { @@ -238,7 +227,7 @@ ExifData::const_iterator sceneMode(const ExifData& ed) { "Exif.Pentax.PictureMode", "Exif.PentaxDng.PictureMode", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator macroMode(const ExifData& ed) { @@ -247,7 +236,7 @@ ExifData::const_iterator macroMode(const ExifData& ed) { "Exif.OlympusCs.MacroMode", "Exif.Panasonic.Macro", "Exif.MinoltaCsNew.MacroMode", "Exif.MinoltaCsOld.MacroMode", "Exif.Sony1.Macro", "Exif.Sony2.Macro", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator imageQuality(const ExifData& ed) { @@ -264,7 +253,7 @@ ExifData::const_iterator imageQuality(const ExifData& ed) { "Exif.Sony1MltCsA100.Quality", "Exif.Casio.Quality", "Exif.Casio2.QualityMode", "Exif.Casio2.Quality", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator whiteBalance(const ExifData& ed) { @@ -279,7 +268,7 @@ ExifData::const_iterator whiteBalance(const ExifData& ed) { "Exif.SonyMinolta.WhiteBalance", "Exif.Casio.WhiteBalance", "Exif.Casio2.WhiteBalance", "Exif.Casio2.WhiteBalance2", "Exif.Photo.WhiteBalance", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator lensName(const ExifData& ed) { @@ -313,7 +302,7 @@ ExifData::const_iterator saturation(const ExifData& ed) { "Exif.Sony2.Saturation", "Exif.Casio.Saturation", "Exif.Casio2.Saturation", "Exif.Casio2.Saturation2", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator sharpness(const ExifData& ed) { @@ -325,7 +314,7 @@ ExifData::const_iterator sharpness(const ExifData& ed) { "Exif.Sony1.Sharpness", "Exif.Sony2.Sharpness", "Exif.Casio.Sharpness", "Exif.Casio2.Sharpness", "Exif.Casio2.Sharpness2", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator contrast(const ExifData& ed) { @@ -337,7 +326,7 @@ ExifData::const_iterator contrast(const ExifData& ed) { "Exif.Sony1.Contrast", "Exif.Sony2.Contrast", "Exif.Casio.Contrast", "Exif.Casio2.Contrast", "Exif.Casio2.Contrast2", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator sceneCaptureType(const ExifData& ed) { @@ -345,7 +334,7 @@ ExifData::const_iterator sceneCaptureType(const ExifData& ed) { "Exif.Photo.SceneCaptureType", "Exif.Olympus.SpecialMode", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator meteringMode(const ExifData& ed) { @@ -356,7 +345,7 @@ ExifData::const_iterator meteringMode(const ExifData& ed) { "Exif.Sony1.MeteringMode2", "Exif.Sony1Cs.MeteringMode", "Exif.Sony1Cs2.MeteringMode", "Exif.Sony2.MeteringMode2", "Exif.Sony2Cs.MeteringMode", "Exif.Sony1MltCsA100.MeteringMode", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator make(const ExifData& ed) { @@ -364,7 +353,7 @@ ExifData::const_iterator make(const ExifData& ed) { "Exif.Image.Make", "Exif.PanasonicRaw.Make", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator model(const ExifData& ed) { @@ -378,7 +367,7 @@ ExifData::const_iterator model(const ExifData& ed) { "Exif.Sony1.SonyModelID", "Exif.Sony2.SonyModelID", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator exposureTime(const ExifData& ed) { @@ -386,7 +375,7 @@ ExifData::const_iterator exposureTime(const ExifData& ed) { "Exif.Photo.ExposureTime", "Exif.Image.ExposureTime", "Exif.Pentax.ExposureTime", "Exif.PentaxDng.ExposureTime", "Exif.Samsung2.ExposureTime", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator fNumber(const ExifData& ed) { @@ -394,7 +383,7 @@ ExifData::const_iterator fNumber(const ExifData& ed) { "Exif.Photo.FNumber", "Exif.Image.FNumber", "Exif.Pentax.FNumber", "Exif.PentaxDng.FNumber", "Exif.Samsung2.FNumber", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator shutterSpeedValue(const ExifData& ed) { @@ -402,7 +391,7 @@ ExifData::const_iterator shutterSpeedValue(const ExifData& ed) { "Exif.Photo.ShutterSpeedValue", "Exif.Image.ShutterSpeedValue", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator apertureValue(const ExifData& ed) { @@ -411,7 +400,7 @@ ExifData::const_iterator apertureValue(const ExifData& ed) { "Exif.Image.ApertureValue", "Exif.CanonSi.ApertureValue", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator brightnessValue(const ExifData& ed) { @@ -421,7 +410,7 @@ ExifData::const_iterator brightnessValue(const ExifData& ed) { "Exif.Sony1.Brightness", "Exif.Sony2.Brightness", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator exposureBiasValue(const ExifData& ed) { @@ -429,7 +418,7 @@ ExifData::const_iterator exposureBiasValue(const ExifData& ed) { "Exif.Photo.ExposureBiasValue", "Exif.Image.ExposureBiasValue", "Exif.MinoltaCs5D.ExposureManualBias", "Exif.OlympusRd.ExposureBiasValue", "Exif.OlympusRd2.ExposureBiasValue", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator maxApertureValue(const ExifData& ed) { @@ -439,7 +428,7 @@ ExifData::const_iterator maxApertureValue(const ExifData& ed) { "Exif.CanonCs.MaxAperture", "Exif.NikonLd4.MaxAperture", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator subjectDistance(const ExifData& ed) { @@ -459,7 +448,7 @@ ExifData::const_iterator lightSource(const ExifData& ed) { "Exif.Photo.LightSource", "Exif.Image.LightSource", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator flash(const ExifData& ed) { @@ -467,7 +456,7 @@ ExifData::const_iterator flash(const ExifData& ed) { "Exif.Photo.Flash", "Exif.Image.Flash", "Exif.Pentax.Flash", "Exif.PentaxDng.Flash", "Exif.Sony1.FlashAction", "Exif.Sony2.FlashAction", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator serialNumber(const ExifData& ed) { @@ -480,7 +469,7 @@ ExifData::const_iterator serialNumber(const ExifData& ed) { "Exif.PentaxDng.SerialNumber", "Exif.Sigma.SerialNumber", "Exif.Sony1.SerialNumber", "Exif.Sony2.SerialNumber", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator focalLength(const ExifData& ed) { @@ -498,7 +487,7 @@ ExifData::const_iterator subjectArea(const ExifData& ed) { "Exif.Photo.SubjectArea", "Exif.Image.SubjectLocation", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator flashEnergy(const ExifData& ed) { @@ -506,7 +495,7 @@ ExifData::const_iterator flashEnergy(const ExifData& ed) { "Exif.Photo.FlashEnergy", "Exif.Image.FlashEnergy", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator exposureIndex(const ExifData& ed) { @@ -514,7 +503,7 @@ ExifData::const_iterator exposureIndex(const ExifData& ed) { "Exif.Photo.ExposureIndex", "Exif.Image.ExposureIndex", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator sensingMethod(const ExifData& ed) { @@ -522,7 +511,7 @@ ExifData::const_iterator sensingMethod(const ExifData& ed) { "Exif.Photo.SensingMethod", "Exif.Image.SensingMethod", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } ExifData::const_iterator afPoint(const ExifData& ed) { @@ -552,7 +541,7 @@ ExifData::const_iterator afPoint(const ExifData& ed) { "Exif.Casio.AFPoint", "Exif.Casio2.AFPointPosition", }; - return findMetadatum(ed); + return findMetadatum(ed, keys, std::size(keys)); } } // namespace Exiv2