[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a
Maximiliano Curia
maxy at moszumanska.debian.org
Thu Jul 13 17:35:56 UTC 2017
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=478e5f2
The following commit has been merged in the master branch:
commit 478e5f21a5b57d8ad3fdbc9a775b50a837190871
Author: Andreas Huggel <ahuggel at gmx.net>
Date: Mon Jan 19 16:44:28 2004 +0000
Metadatum interface, Ifd::Entry
---
src/exif.cpp | 242 ++++++++++++++++++++++++++++++-------------------------
src/exif.hpp | 115 +++++++++++++++++---------
src/exiftest.cpp | 4 +-
3 files changed, 214 insertions(+), 147 deletions(-)
diff --git a/src/exif.cpp b/src/exif.cpp
index cec8bed..c1a0c87 100644
--- a/src/exif.cpp
+++ b/src/exif.cpp
@@ -25,7 +25,7 @@
RCS information
$Name: $
- $Revision: 1.5 $
+ $Revision: 1.6 $
*/
// *****************************************************************************
// included header files
@@ -47,7 +47,7 @@ namespace {
// Compare two IFD entries by offset, taking care of special cases
// where one or both of the entries don't have an offset.
- bool cmpOffset(const Exif::Metadatum& lhs, const Exif::Metadatum& rhs);
+ bool cmpOffset(const Exif::Ifd::Entry& lhs, const Exif::Ifd::Entry& rhs);
}
@@ -295,21 +295,17 @@ namespace Exif {
}
Metadatum::Metadatum()
- : tag_(0), type_(0), count_(0), offset_(0),
- ifdId_(IfdIdNotSet), ifdIdx_(-1), value_(0), size_(0)
+ : tag_(0), type_(0), ifdId_(IfdIdNotSet), ifdIdx_(-1), value_(0)
{
}
- Metadatum::Metadatum(uint16 tag, uint16 type, uint32 count, uint32 offset,
+ Metadatum::Metadatum(uint16 tag, uint16 type,
IfdId ifdId, int ifdIdx, Value* value)
- : tag_(tag), type_(type), count_(count), offset_(offset),
- ifdId_(ifdId), ifdIdx_(ifdIdx), value_(value)
+ : tag_(tag), type_(type), ifdId_(ifdId), ifdIdx_(ifdIdx), value_(value)
{
key_ = std::string(ifdItem())
+ "." + std::string(sectionName())
+ "." + std::string(tagName());
-
- size_ = count_ * typeSize();
}
Metadatum::~Metadatum()
@@ -321,40 +317,76 @@ namespace Exif {
{
tag_ = rhs.tag_;
type_ = rhs.type_;
- count_ = rhs.count_;
- offset_ = rhs.offset_;
-
ifdId_ = rhs.ifdId_;
ifdIdx_ = rhs.ifdIdx_;
-
value_ = 0;
if (rhs.value_ != 0) value_ = rhs.value_->clone(); // deep copy
-
key_ = rhs.key_;
- size_ = rhs.size_;
}
Metadatum& Metadatum::operator=(const Metadatum& rhs)
{
if (this == &rhs) return *this;
-
tag_ = rhs.tag_;
type_ = rhs.type_;
- count_ = rhs.count_;
- offset_ = rhs.offset_;
-
ifdId_ = rhs.ifdId_;
ifdIdx_ = rhs.ifdIdx_;
-
delete value_;
value_ = 0;
if (rhs.value_ != 0) value_ = rhs.value_->clone(); // deep copy
-
key_ = rhs.key_;
+ return *this;
+ } // Metadatum::operator=
+
+ void Metadatum::setValue(Value* value)
+ {
+ delete value_;
+ value_ = value;
+ }
+
+ Ifd::Entry::Entry()
+ : ifdIdx_(-1), tag_(0), type_(0), count_(0), offset_(0),
+ data_(0), size_(0)
+ {
+ }
+
+ Ifd::Entry::~Entry()
+ {
+ delete[] data_;
+ }
+
+ Ifd::Entry::Entry(const Entry& rhs)
+ {
+ ifdIdx_ = rhs.ifdIdx_;
+ tag_ = rhs.tag_;
+ type_ = rhs.type_;
+ count_ = rhs.count_;
+ offset_ = rhs.offset_;
+ data_ = 0;
+ if (rhs.data_) {
+ data_ = new char[rhs.size_];
+ ::memcpy(data_, rhs.data_, rhs.size_);
+ }
size_ = rhs.size_;
+ }
+ Ifd::Entry::Entry& Ifd::Entry::operator=(const Entry& rhs)
+ {
+ if (this == &rhs) return *this;
+ ifdIdx_ = rhs.ifdIdx_;
+ tag_ = rhs.tag_;
+ type_ = rhs.type_;
+ count_ = rhs.count_;
+ offset_ = rhs.offset_;
+ delete data_;
+ data_ = 0;
+ if (rhs.data_) {
+ data_ = new char[rhs.size_];
+ ::memcpy(data_, rhs.data_, rhs.size_);
+ }
+ size_ = rhs.size_;
return *this;
- } // Metadatum::operator=
+ }
Ifd::Ifd(IfdId ifdId)
: ifdId_(ifdId), offset_(0), next_(0), size_(0)
@@ -369,16 +401,15 @@ namespace Exif {
entries_.clear();
for (int i=0; i<n; ++i) {
- Metadatum e;
- e.ifdId_ = ifdId_;
+ Entry e;
e.ifdIdx_ = i;
e.tag_ = getUShort(buf+o, byteOrder);
e.type_ = getUShort(buf+o+2, byteOrder);
e.count_ = getULong(buf+o+4, byteOrder);
// offset will be converted to a relative offset below
e.offset_ = getULong(buf+o+8, byteOrder);
+ // data_ is set later, see below
e.size_ = e.count_ * e.typeSize();
- // value_ is set later, see below
entries_.push_back(e);
o += 12;
}
@@ -389,9 +420,9 @@ namespace Exif {
// on the assumption that the smallest offset points to a data
// buffer directly following the IFD.
// Subsequently all offsets of IFD entries need to be recalculated.
- const Metadata::iterator eb = entries_.begin();
- const Metadata::iterator ee = entries_.end();
- Metadata::iterator i = eb;
+ const Entries::iterator eb = entries_.begin();
+ const Entries::iterator ee = entries_.end();
+ Entries::iterator i = eb;
if (offset_ == 0 && i != ee) {
// Find the entry with the smallest offset
i = std::min_element(eb, ee, cmpOffset);
@@ -401,29 +432,28 @@ namespace Exif {
}
}
- // Assign the values to each IFD entry and
+ // Assign the values to each IFD entry and
// calculate offsets relative to the start of the IFD
for (i = eb; i != ee; ++i) {
- delete i->value_;
- i->value_ = Value::create(TypeId(i->type_));
+ delete[] i->data_;
if (i->size_ > 4) {
i->offset_ = i->offset_ - offset_;
- i->value_->read(buf + i->offset_, i->size_, byteOrder);
+ i->data_ = new char[i->size_];
+ ::memcpy(i->data_, buf + i->offset_, i->size_);
}
else {
- char tmpbuf[4];
- ul2Data(tmpbuf, i->offset_, byteOrder);
- i->value_->read(tmpbuf, i->size_, byteOrder);
+ i->data_ = new char[4];
+ ul2Data(i->data_, i->offset_, byteOrder);
}
}
return 0;
} // Ifd::read
- Metadata::const_iterator Ifd::findTag(uint16 tag) const
+ Ifd::Entries::const_iterator Ifd::findTag(uint16 tag) const
{
return std::find_if(entries_.begin(), entries_.end(),
- FindMetadatumByTag(tag));
+ FindEntryByTag(tag));
}
int Ifd::readSubIfd(
@@ -431,7 +461,7 @@ namespace Exif {
) const
{
int rc = 0;
- Metadata::const_iterator pos = findTag(tag);
+ Entries::const_iterator pos = findTag(tag);
if (pos != entries_.end()) {
rc = dest.read(buf + pos->offset_, byteOrder, pos->offset_);
}
@@ -448,9 +478,9 @@ namespace Exif {
// Add all directory entries to the data buffer
long dataSize = 0;
- const Metadata::const_iterator b = entries_.begin();
- const Metadata::const_iterator e = entries_.end();
- Metadata::const_iterator i = b;
+ const Entries::const_iterator b = entries_.begin();
+ const Entries::const_iterator e = entries_.end();
+ Entries::const_iterator i = b;
for (; i != e; ++i) {
us2Data(buf+o, i->tag_, byteOrder);
us2Data(buf+o+2, i->type_, byteOrder);
@@ -460,10 +490,7 @@ namespace Exif {
dataSize += i->size_;
}
else {
- char tmpbuf[4];
- ::memset(tmpbuf, 0x0, 4);
- i->value_->copy(tmpbuf, byteOrder);
- ::memcpy(buf+o+8, tmpbuf, 4);
+ ::memcpy(buf+o+8, i->data_, 4);
}
o += 12;
}
@@ -481,10 +508,8 @@ namespace Exif {
// Add the data of all IFD entries to the data buffer
for (i = b; i != e; ++i) {
if (i->size_ > 4) {
- // Todo: Check this! There seems to be an inconsistency
- // in the use of size_ and the return value of copy() here
- // Todo: And can value_ be 0?
- o += i->value_->copy(buf+o, byteOrder);
+ ::memcpy(buf + o, i->data_, i->size_);
+ o += i->size_;
}
}
@@ -504,28 +529,20 @@ namespace Exif {
<< prefix << "Entry Tag Format (Bytes each) Number Offset
"
<< prefix << "----- ------ --------------------- ------ -----------
";
- const Metadata::const_iterator b = entries_.begin();
- const Metadata::const_iterator e = entries_.end();
- Metadata::const_iterator i = b;
+ const Entries::const_iterator b = entries_.begin();
+ const Entries::const_iterator e = entries_.end();
+ Entries::const_iterator i = b;
for (; i != e; ++i) {
std::ostringstream offset;
- if (i->typeSize() * i->count_ <= 4) {
-
-// Todo: Fix me! This doesn't work with Value anymore because we do not know
-// the byte order here. (Wait for Ifd to use a more special type)
-//
-// char tmpbuf[4];
-// i->value_->copy(tmpbuf, byteOrder);
-// offset << std::setw(2) << std::setfill('0') << std::hex
-// << (int)*(unsigned char*)tmpbuf << " "
-// << std::setw(2) << std::setfill('0') << std::hex
-// << (int)*(unsigned char*)(tmpbuf+1) << " "
-// << std::setw(2) << std::setfill('0') << std::hex
-// << (int)*(unsigned char*)(tmpbuf+2) << " "
-// << std::setw(2) << std::setfill('0') << std::hex
-// << (int)*(unsigned char*)(tmpbuf+3) << " ";
-
- offset << "n/a";
+ if (i->size_ <= 4) {
+ offset << std::setw(2) << std::setfill('0') << std::hex
+ << (int)*(unsigned char*)i->data_ << " "
+ << std::setw(2) << std::setfill('0') << std::hex
+ << (int)*(unsigned char*)(i->data_+1) << " "
+ << std::setw(2) << std::setfill('0') << std::hex
+ << (int)*(unsigned char*)(i->data_+2) << " "
+ << std::setw(2) << std::setfill('0') << std::hex
+ << (int)*(unsigned char*)(i->data_+3) << " ";
}
else {
offset << " 0x" << std::setw(8) << std::setfill('0') << std::hex
@@ -548,42 +565,42 @@ namespace Exif {
<< std::setw(8) << std::setfill('0') << std::hex
<< std::right << next_ << "
";
-// Todo: Fix me! This does not work with Value anymore
-// for (i = b; i != e; ++i) {
-// if (i->size_ > 4) {
-// os << "Data of entry " << i-b << ":
";
-// hexdump(os, i->data_, i->size_);
-// }
-// }
+ for (i = b; i != e; ++i) {
+ if (i->size_ > 4) {
+ os << "Data of entry " << i-b << ":
";
+ hexdump(os, i->data_, i->size_);
+ }
+ }
} // Ifd::print
// Todo: implement this properly..
// - Tag values 0x0201 and 0x0202 may be long OR short types...
// - TIFF thumbnails
+ // Rewrite: it should use the higher level Metadata interface
int Thumbnail::read(const char* buf, const Ifd& ifd1, ByteOrder byteOrder)
{
- Metadata::const_iterator pos = ifd1.findTag(0x0103);
- if (pos == ifd1.entries().end()) return 1;
- const UShortValue& compression = dynamic_cast<const UShortValue&>(pos->value());
- if (compression.value() == 6) {
- pos = ifd1.findTag(0x0201);
- if (pos == ifd1.entries().end()) return 2;
- const ULongValue& offset = dynamic_cast<const ULongValue&>(pos->value());
- pos = ifd1.findTag(0x0202);
- if (pos == ifd1.entries().end()) return 3;
- const ULongValue& size = dynamic_cast<const ULongValue&>(pos->value());
-
- thumbnail_ = std::string(buf + offset.value(), size.value());
- }
- else if (compression.value() == 1) {
- // Todo: to be continued...
- return 4;
- }
- else {
- // invalid compression value
- return 5;
- }
+// Ifd::Entries::const_iterator pos = ifd1.findTag(0x0103);
+// if (pos == ifd1.entries().end()) return 1;
+// const UShortValue& compression = dynamic_cast<const UShortValue&>(pos->value());
+// if (compression.value() == 6) {
+// pos = ifd1.findTag(0x0201);
+// if (pos == ifd1.entries().end()) return 2;
+// const ULongValue& offset = dynamic_cast<const ULongValue&>(pos->value());
+// pos = ifd1.findTag(0x0202);
+// if (pos == ifd1.entries().end()) return 3;
+// const ULongValue& size = dynamic_cast<const ULongValue&>(pos->value());
+
+// thumbnail_ = std::string(buf + offset.value(), size.value());
+// }
+// else if (compression.value() == 1) {
+// // Todo: to be continued...
+// return 4;
+// }
+// else {
+// // invalid compression value
+// return 5;
+// }
return 0;
}
@@ -654,16 +671,16 @@ namespace Exif {
rc = ifd1.readSubIfd(ifd1GpsIfd, buf, byteOrder(), 0x8825);
if (rc) return rc;
- // Copy all metadata from the IFDs to the internal metadata
+ // Copy all entries from the IFDs to the internal metadata
metadata_.clear();
- add(ifd0.entries());
- add(exifIfd.entries());
- add(iopIfd.entries());
- add(gpsIfd.entries());
- add(ifd1.entries());
- add(ifd1ExifIfd.entries());
- add(ifd1IopIfd.entries());
- add(ifd1GpsIfd.entries());
+ add(ifd0, byteOrder());
+ add(exifIfd, byteOrder());
+ add(iopIfd, byteOrder());
+ add(gpsIfd, byteOrder());
+ add(ifd1, byteOrder());
+ add(ifd1ExifIfd, byteOrder());
+ add(ifd1IopIfd, byteOrder());
+ add(ifd1GpsIfd, byteOrder());
// Read the thumbnail
thumbnail_.read(buf, ifd1, byteOrder());
@@ -683,9 +700,16 @@ namespace Exif {
return 0;
}
- void ExifData::add(const Metadata& src)
+ void ExifData::add(const Ifd& ifd, ByteOrder byteOrder)
{
- metadata_.insert(metadata_.end(), src.begin(), src.end());
+ Ifd::const_iterator i = ifd.begin();
+ Ifd::const_iterator end = ifd.end();
+ for (; i != end; ++i) {
+ Value* value = Value::create(TypeId(i->type_));
+ value->read(i->data_, i->size_, byteOrder);
+ Metadatum md(i->tag_, i->type_, ifd.ifdId(), i->ifdIdx_, value);
+ add(md);
+ }
}
void ExifData::add(const Metadatum& src)
@@ -857,7 +881,7 @@ namespace Exif {
// local definitions
namespace {
- bool cmpOffset(const Exif::Metadatum& lhs, const Exif::Metadatum& rhs)
+ bool cmpOffset(const Exif::Ifd::Entry& lhs, const Exif::Ifd::Entry& rhs)
{
// We need to ignore entries with size <= 4, so by definition,
// entries with size <= 4 are greater than those with size > 4
diff --git a/src/exif.hpp b/src/exif.hpp
index e4c3444..dd4959e 100644
--- a/src/exif.hpp
+++ b/src/exif.hpp
@@ -21,7 +21,7 @@
/*!
@file exif.hpp
@brief Encoding and decoding of %Exif data
- @version $Name: $ $Revision: 1.5 $
+ @version $Name: $ $Revision: 1.6 $
@author Andreas Huggel (ahu)
<a href="mailto:ahuggel at gmx.net">ahuggel at gmx.net</a>
@date 09-Jan-03, ahu: created
@@ -196,6 +196,8 @@ namespace Exif {
@return Number of characters written.
*/
virtual long copy(char* buf, ByteOrder byteOrder) const =0;
+ //! Return the number of components of the value
+ virtual long count() const =0;
//! Return the size of the value in bytes
virtual long size() const =0;
/*!
@@ -259,6 +261,7 @@ namespace Exif {
@return Number of characters written.
*/
virtual long copy(char* buf, ByteOrder byteOrder) const;
+ virtual long count() const { return size(); }
virtual long size() const;
virtual Value* clone() const;
virtual std::ostream& write(std::ostream& os) const;
@@ -296,6 +299,7 @@ namespace Exif {
@return Number of characters written.
*/
virtual long copy(char* buf, ByteOrder byteOrder) const;
+ virtual long count() const { return size(); }
virtual long size() const;
virtual Value* clone() const;
virtual std::ostream& write(std::ostream& os) const;
@@ -323,6 +327,7 @@ namespace Exif {
*/
virtual void read(const std::string& buf);
virtual long copy(char* buf, ByteOrder byteOrder) const;
+ virtual long count() const { return value_.size(); }
virtual long size() const;
virtual Value* clone() const;
virtual std::ostream& write(std::ostream& os) const;
@@ -371,7 +376,7 @@ namespace Exif {
of the value pointer if one is provided, so the application
must not delete it!
*/
- Metadatum(uint16 tag, uint16 type, uint32 count, uint32 offset,
+ Metadatum(uint16 tag, uint16 type,
IfdId ifdId, int ifdIdx, Value* value =0);
/*!
@brief Constructor for new tags created by an application,
@@ -387,7 +392,13 @@ namespace Exif {
//! Assignment operator
Metadatum& operator=(const Metadatum& rhs);
- //! Return the name of the type
+ /*!
+ @brief Set the value. The Metadatum takes ownership of the value
+ pointer, so the application must not delete it!
+ */
+ void setValue(Value* value);
+
+ //! Return the name of the tag
const char* tagName() const { return ExifTags::tagName(tag_, ifdId_); }
//! Return the name of the type
const char* typeName() const { return ExifTags::typeName(TypeId(type_)); }
@@ -406,8 +417,10 @@ namespace Exif {
uint16 tag() const { return tag_; }
//! Return the type
TypeId type() const { return TypeId(type_); }
- //! Return the count
- uint32 count() const { return count_; }
+ //! Return the number of components in the value
+ long count() const { return value_ == 0 ? 0 : value_->count(); }
+ //! Return the size of the value in bytes
+ long size() const { return value_ == 0 ? 0 : value_->size(); }
//! Return the IFD id
IfdId ifdId() const { return ifdId_; }
//! Return the position in the IFD (-1: not set)
@@ -422,53 +435,82 @@ namespace Exif {
std::string key() const { return key_; }
//@}
- public:
+ private:
uint16 tag_; //!< Tag value
uint16 type_; //!< Type of the data
- uint32 count_; //!< Number of components
- uint32 offset_; //!< Offset of the data from start of IFD
-
IfdId ifdId_; //!< The IFD associated with this tag
int ifdIdx_; //!< Position in the IFD (-1: not set)
-
Value* value_; //!< Pointer to the value
-
std::string key_; //!< Unique key
- long size_; //!< Size of the data in bytes
}; // class Metadatum
//! Container type to hold all metadata
typedef std::vector<Metadatum> Metadata;
- //! Unary predicate that matches a Metadatum with a given tag
- class FindMetadatumByTag {
- public:
- //! Constructor, initializes the object with the tag to look for
- FindMetadatumByTag(uint16 tag) : tag_(tag) {}
- /*!
- @brief Returns true if the tag of the argument metadatum is equal
- to that of the object.
- */
- bool operator()(const Metadatum& metadatum) const
- { return tag_ == metadatum.tag_; }
-
- private:
- uint16 tag_;
-
- }; // class FindMetadatumByTag
-
/*!
@brief Models an IFD (Image File Directory)
Todo:
- make the data handling more intelligent
- - should we return the size and do away with size() ?
*/
class Ifd {
public:
//! Constructor. Allows to set the IFD identifier.
explicit Ifd(IfdId ifdId =IfdIdNotSet);
+
+ //! Data structure for one IFD directory entry
+ struct Entry {
+ Entry(); //!< Default constructor
+ ~Entry(); //!< Destructor
+ Entry(const Entry& rhs); //!< Copy constructor
+ Entry& operator=(const Entry& rhs); //!< Assignment operator
+
+ //! Return the size in bytes of one element of this type
+ long typeSize() const
+ { return ExifTags::typeSize(TypeId(type_)); }
+ //! Return the name of the type
+ const char* typeName() const
+ { return ExifTags::typeName(TypeId(type_)); }
+
+ int ifdIdx_; //!< Position in the IFD
+ uint16 tag_; //!< Tag
+ uint16 type_; //!< Type
+ uint32 count_; //!< Number of components
+ //! Offset from the start of the IFD
+ uint32 offset_;
+ //! Pointer to the data buffer
+ char* data_;
+ //! Size of the data buffer in bytes
+ long size_;
+ }; // struct Entry
+
+ //! Container type to hold all IFD directory entries
+ typedef std::vector<Entry> Entries;
+
+ //! Entries iterator type (const)
+ typedef Entries::const_iterator const_iterator;
+ //! The first entry
+ const_iterator begin() const { return entries_.begin(); }
+ //! End of the entries
+ const_iterator end() const { return entries_.end(); }
+
+ //! Unary predicate that matches an Entry with a given tag
+ class FindEntryByTag {
+ public:
+ //! Constructor, initializes the object with the tag to look for
+ FindEntryByTag(uint16 tag) : tag_(tag) {}
+ /*!
+ @brief Returns true if the tag of the argument metadatum is equal
+ to that of the object.
+ */
+ bool operator()(const Ifd::Entry& entry) const
+ { return tag_ == entry.tag_; }
+ private:
+ uint16 tag_;
+
+ }; // class FindEntryByTag
+
/*!
@brief Read a complete IFD and its data from a data buffer
@@ -521,12 +563,12 @@ namespace Exif {
void print(std::ostream& os, const std::string& prefix ="") const;
//! @name Accessors
//@{
+ //! Ifd id of the IFD
+ IfdId ifdId() const { return ifdId_; }
//! Offset of the IFD from SOI
long offset() const { return offset_; }
- //! Get the IFD entries
- const Metadata& entries() const { return entries_; }
//! Find an IFD entry by tag, return an iterator into the entries list
- Metadata::const_iterator findTag(uint16 tag) const;
+ Entries::const_iterator findTag(uint16 tag) const;
//! Get the offset to the next IFD from the start of the Tiff header
long next() const { return next_; }
//! Get the size of this IFD in bytes (IFD only, without data)
@@ -534,10 +576,11 @@ namespace Exif {
//@}
private:
+ Entries entries_; // IFD entries
+
IfdId ifdId_; // IFD Id
long offset_; // offset of the IFD from the start of
// Tiff header
- Metadata entries_; // IFD metadata entries
long next_; // offset of next IFD from the start of
// the Tiff header
long size_; // size of the IFD in bytes
@@ -599,8 +642,8 @@ namespace Exif {
//! Returns the byte order as specified in the Tiff header
ByteOrder byteOrder() const { return tiffHeader_.byteOrder(); }
- //! Add all entries of src to the Exif metadata
- void add(const Metadata& src);
+ //! Add all entries of an IFD to the Exif metadata
+ void add(const Ifd& ifd, ByteOrder byteOrder);
//! Add Metadatum src to the Exif metadata
void add(const Metadatum& src);
diff --git a/src/exiftest.cpp b/src/exiftest.cpp
index d271557..7974b93 100644
--- a/src/exiftest.cpp
+++ b/src/exiftest.cpp
@@ -22,14 +22,14 @@ int main(int argc, char* const argv[])
for (; i != end; ++i) {
std::cout << "0x"
<< std::hex << std::setw(4) << std::setfill('0') << std::right
- << i->tag_ << " "
+ << i->tag() << " "
<< std::setw(27) << std::setfill(' ') << std::left
<< i->tagName() << " "
<< std::setw(17) << std::setfill(' ') << std::left
<< i->typeName() << " "
<< std::dec << std::setw(3)
<< std::setfill(' ') << std::right
- << i->count_ << " "
+ << i->count() << " "
<< std::dec << i->value() << "
";
}
}
--
exiv2 packaging
More information about the pkg-kde-commits
mailing list