Avoid naked new operator in sample apps
This commit is contained in:
parent
b3517a6ab0
commit
2505e52345
@ -57,7 +57,7 @@ try {
|
|||||||
std::cout << "Added a few tags the quick way.\n";
|
std::cout << "Added a few tags the quick way.\n";
|
||||||
|
|
||||||
// Create a ASCII string value (note the use of create)
|
// Create a ASCII string value (note the use of create)
|
||||||
Exiv2::Value::UniquePtr v = Exiv2::Value::create(Exiv2::asciiString);
|
auto v = Exiv2::Value::create(Exiv2::asciiString);
|
||||||
// Set the value to a string
|
// Set the value to a string
|
||||||
v->read("1999:12:31 23:59:59");
|
v->read("1999:12:31 23:59:59");
|
||||||
// Add the value together with its key to the Exif data container
|
// Add the value together with its key to the Exif data container
|
||||||
@ -66,16 +66,16 @@ try {
|
|||||||
std::cout << "Added key \"" << key << "\", value \"" << *v << "\"\n";
|
std::cout << "Added key \"" << key << "\", value \"" << *v << "\"\n";
|
||||||
|
|
||||||
// Now create a more interesting value (without using the create method)
|
// Now create a more interesting value (without using the create method)
|
||||||
Exiv2::URationalValue::UniquePtr rv(new Exiv2::URationalValue);
|
Exiv2::URationalValue rv;
|
||||||
// Set two rational components from a string
|
// Set two rational components from a string
|
||||||
rv->read("1/2 1/3");
|
rv.read("1/2 1/3");
|
||||||
// Add more elements through the extended interface of rational value
|
// Add more elements through the extended interface of rational value
|
||||||
rv->value_.emplace_back(2, 3);
|
rv.value_.emplace_back(2, 3);
|
||||||
rv->value_.emplace_back(3, 4);
|
rv.value_.emplace_back(3, 4);
|
||||||
// Add the key and value pair to the Exif data
|
// Add the key and value pair to the Exif data
|
||||||
key = Exiv2::ExifKey("Exif.Image.PrimaryChromaticities");
|
key = Exiv2::ExifKey("Exif.Image.PrimaryChromaticities");
|
||||||
exifData.add(key, rv.get());
|
exifData.add(key, &rv);
|
||||||
std::cout << "Added key \"" << key << "\", value \"" << *rv << "\"\n";
|
std::cout << "Added key \"" << key << "\", value \"" << rv << "\"\n";
|
||||||
|
|
||||||
// *************************************************************************
|
// *************************************************************************
|
||||||
// Modify Exif data
|
// Modify Exif data
|
||||||
@ -92,18 +92,21 @@ try {
|
|||||||
// Alternatively, we can use findKey()
|
// Alternatively, we can use findKey()
|
||||||
key = Exiv2::ExifKey("Exif.Image.PrimaryChromaticities");
|
key = Exiv2::ExifKey("Exif.Image.PrimaryChromaticities");
|
||||||
auto pos = exifData.findKey(key);
|
auto pos = exifData.findKey(key);
|
||||||
if (pos == exifData.end()) throw Exiv2::Error(Exiv2::kerErrorMessage, "Key not found");
|
if (pos == exifData.end())
|
||||||
|
throw Exiv2::Error(Exiv2::kerErrorMessage, "Key not found");
|
||||||
|
|
||||||
// Get a pointer to a copy of the value
|
// Get a pointer to a copy of the value
|
||||||
v = pos->getValue();
|
v = pos->getValue();
|
||||||
// Downcast the Value pointer to its actual type
|
// Downcast the Value pointer to its actual type
|
||||||
auto prv = dynamic_cast<Exiv2::URationalValue*>(v.release());
|
auto prv = dynamic_cast<Exiv2::URationalValue*>(v.release());
|
||||||
if (prv == nullptr)
|
if (prv == nullptr)
|
||||||
throw Exiv2::Error(Exiv2::kerErrorMessage, "Downcast failed");
|
throw Exiv2::Error(Exiv2::kerErrorMessage, "Downcast failed");
|
||||||
rv = Exiv2::URationalValue::UniquePtr(prv);
|
|
||||||
|
rv = Exiv2::URationalValue(*prv);
|
||||||
// Modify the value directly through the interface of URationalValue
|
// Modify the value directly through the interface of URationalValue
|
||||||
rv->value_.at(2) = {88, 77};
|
rv.value_.at(2) = {88, 77};
|
||||||
// Copy the modified value back to the metadatum
|
// Copy the modified value back to the metadatum
|
||||||
pos->setValue(rv.get());
|
pos->setValue(&rv);
|
||||||
std::cout << "Modified key \"" << key
|
std::cout << "Modified key \"" << key
|
||||||
<< "\", new value \"" << pos->value() << "\"\n";
|
<< "\", new value \"" << pos->value() << "\"\n";
|
||||||
|
|
||||||
|
|||||||
@ -65,8 +65,10 @@ int main(int argc, char* const argv[])
|
|||||||
if ( argc >= 5 ) {
|
if ( argc >= 5 ) {
|
||||||
int blocksize = argc==6 ? atoi(ba) : 10000;
|
int blocksize = argc==6 ? atoi(ba) : 10000;
|
||||||
// ensure blocksize is sane
|
// ensure blocksize is sane
|
||||||
if (blocksize>1024*1024) blocksize=10000;
|
if (blocksize>1024*1024)
|
||||||
Exiv2::byte* bytes = blocksize > 0 ? new Exiv2::byte[blocksize] : nullptr;
|
blocksize=10000;
|
||||||
|
|
||||||
|
std::vector<Exiv2::byte> bytes (blocksize);
|
||||||
|
|
||||||
// copy fileIn from a remote location.
|
// copy fileIn from a remote location.
|
||||||
BasicIo::UniquePtr io = Exiv2::ImageFactory::createIo(fr);
|
BasicIo::UniquePtr io = Exiv2::ImageFactory::createIo(fr);
|
||||||
@ -78,11 +80,11 @@ int main(int argc, char* const argv[])
|
|||||||
Error(Exiv2::kerFileOpenFailed, output.path() , "w+b", strError());
|
Error(Exiv2::kerFileOpenFailed, output.path() , "w+b", strError());
|
||||||
}
|
}
|
||||||
size_t l = 0;
|
size_t l = 0;
|
||||||
if ( bytes ) {
|
if ( !bytes.empty() ) {
|
||||||
int r ;
|
int r ;
|
||||||
while ( (r=io->read(bytes,blocksize)) > 0 ) {
|
while ( (r=io->read(bytes.data(),blocksize)) > 0 ) {
|
||||||
l += r;
|
l += r;
|
||||||
output.write(bytes,r) ;
|
output.write(bytes.data(),r) ;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// read/write byte-wise (#1029)
|
// read/write byte-wise (#1029)
|
||||||
@ -90,7 +92,6 @@ int main(int argc, char* const argv[])
|
|||||||
output.putb(io->getb()) ;
|
output.putb(io->getb()) ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete[] bytes;
|
|
||||||
output.close();
|
output.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -49,9 +49,9 @@ try {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Use MemIo to increase test coverage.
|
// Use MemIo to increase test coverage.
|
||||||
Exiv2::BasicIo::UniquePtr fileIo(new Exiv2::FileIo(params.read_));
|
Exiv2::FileIo fileIo(params.read_);
|
||||||
Exiv2::BasicIo::UniquePtr memIo(new Exiv2::MemIo);
|
auto memIo = std::make_unique<Exiv2::MemIo>();
|
||||||
memIo->transfer(*fileIo);
|
memIo->transfer(fileIo);
|
||||||
|
|
||||||
Exiv2::Image::UniquePtr readImg = Exiv2::ImageFactory::open(std::move(memIo));
|
Exiv2::Image::UniquePtr readImg = Exiv2::ImageFactory::open(std::move(memIo));
|
||||||
assert(readImg.get() != 0);
|
assert(readImg.get() != 0);
|
||||||
|
|||||||
@ -91,7 +91,7 @@ void mini1(const char* path)
|
|||||||
|
|
||||||
void mini9(const char* path)
|
void mini9(const char* path)
|
||||||
{
|
{
|
||||||
TiffImage tiffImage(BasicIo::UniquePtr(new FileIo(path)), false);
|
TiffImage tiffImage(std::make_unique<FileIo>(path), false);
|
||||||
tiffImage.readMetadata();
|
tiffImage.readMetadata();
|
||||||
|
|
||||||
std::cout << "MIME type: " << tiffImage.mimeType() << "\n";
|
std::cout << "MIME type: " << tiffImage.mimeType() << "\n";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user