diff --git a/openVulkanoCpp/Image/ExifBuilder.cpp b/openVulkanoCpp/Image/ExifBuilder.cpp index 3fe5436..1f8eebc 100644 --- a/openVulkanoCpp/Image/ExifBuilder.cpp +++ b/openVulkanoCpp/Image/ExifBuilder.cpp @@ -16,11 +16,11 @@ namespace { - const int EXIF_HEADER_SIZE = 6; - std::array EXIF_HEADER_AND_PADDING = { 'E', 'x', 'i', 'f', 0, 0 }; + constexpr int EXIF_HEADER_SIZE = 6; + constexpr std::array EXIF_HEADER_AND_PADDING = { 'E', 'x', 'i', 'f', 0, 0 }; - const int TIFF_HEADER_SIZE = 4; - std::array TIFF_HEADER = { 0x4d, 0x4d, 0, 0x2a }; + constexpr int TIFF_HEADER_SIZE = 4; + constexpr std::array TIFF_HEADER = { 0x4d, 0x4d, 0, 0x2a }; constexpr bool LITTLE_ENDIAN = std::endian::native == std::endian::little; @@ -70,59 +70,46 @@ namespace return result; } - int AppendU8(std::vector& array, uint8_t value) + template + int Append(std::vector& array, T value) { int offset = array.size(); - array.push_back(value); + const int bytes = sizeof(T); + char *c = (char *) &value; + for (int i = 0; i < bytes; i++) + { + array.push_back(c[i]); + } return offset; } + int AppendU8(std::vector& array, uint8_t value) + { + return Append(array, value); + } + int AppendU16(std::vector& array, uint16_t value) { - int offset = array.size(); - if constexpr (LITTLE_ENDIAN) { value = ::EndianSwap(value); } - - char *src = (char *) &value; - array.push_back(src[0]); - array.push_back(src[1]); - - return offset; + return Append(array, value); } // no endian swap int AppendU32NES(std::vector& array, uint32_t value) { - int offset = array.size(); - - char *src = (char *) &value; - array.push_back(src[0]); - array.push_back(src[1]); - array.push_back(src[2]); - array.push_back(src[3]); - - return offset; + return Append(array, value); } int AppendU32(std::vector& array, uint32_t value) { - int offset = array.size(); - if constexpr (LITTLE_ENDIAN) { value = ::EndianSwap(value); } - - char *src = (char *) &value; - array.push_back(src[0]); - array.push_back(src[1]); - array.push_back(src[2]); - array.push_back(src[3]); - - return offset; + return Append(array, value); } template @@ -138,7 +125,7 @@ namespace return offset; } - int AppendVector(std::vector& array, std::vector values) + int AppendVector(std::vector& array, const std::vector& values) { int offset = array.size(); @@ -233,7 +220,7 @@ namespace OpenVulkano::Image std::vector result; std::vector data; // the data that has ascii and rational values - if (dateTaken == "") + if (dateTaken.empty()) { dateTaken = GetCurrentTimestamp(); } @@ -263,7 +250,7 @@ namespace OpenVulkano::Image int gpsInfoOffset = 0; // Make - if (make != "") + if (!make.empty()) { AppendTagAndValueType(result, (uint16_t) IFDTag::MAKE, (uint16_t) IFDValueType::ASCII); AppendU32(result, make.size() + 1); @@ -274,7 +261,7 @@ namespace OpenVulkano::Image } // Model - if (model != "") + if (!model.empty()) { AppendTagAndValueType(result, (uint16_t) IFDTag::MODEL, (uint16_t) IFDValueType::ASCII); AppendU32(result, model.size() + 1); @@ -339,7 +326,7 @@ namespace OpenVulkano::Image } // Software Used - if (softwareUsed != "") + if (!softwareUsed.empty()) { AppendTagAndValueType(result, (uint16_t) IFDTag::SOFTWARE_USED, (uint16_t) IFDValueType::ASCII); AppendU32(result, softwareUsed.size() + 1); @@ -375,12 +362,12 @@ namespace OpenVulkano::Image { const int valueToAdd = resultSize - EXIF_HEADER_SIZE; - if (model != "") + if (!model.empty()) { AddValueToU32AndEndianSwap(result.data() + modelOffset, valueToAdd); } - if (make != "") + if (!make.empty()) { AddValueToU32AndEndianSwap(result.data() + makeOffset, valueToAdd); }