[SCM] exiv2 packaging branch, master, updated. debian/0.25-3.1-3734-gdcbc29a

Maximiliano Curia maxy at moszumanska.debian.org
Thu Jul 13 17:40:58 UTC 2017


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/exiv2.git;a=commitdiff;h=dd659d5

The following commit has been merged in the master branch:
commit dd659d57bd3cb4aca39968a0cecf1e60a78b0e8c
Author: Andreas Huggel <ahuggel at gmx.net>
Date:   Sun Dec 27 14:57:10 2009 +0000

    Changed MemIo to use a Pimpl class too (#510).
---
 src/basicio.cpp | 137 +++++++++++++++++++++++++++++++++++---------------------
 src/basicio.hpp |  17 +++----
 2 files changed, 91 insertions(+), 63 deletions(-)

diff --git a/src/basicio.cpp b/src/basicio.cpp
index 63fb248..6d8e3f4 100644
--- a/src/basicio.cpp
+++ b/src/basicio.cpp
@@ -709,7 +709,31 @@ namespace Exiv2 {
     }
 
 #endif
-    MemIo::MemIo()
+    //! Internal Pimpl structure of class MemIo.
+    class MemIo::Impl {
+    public:
+        Impl();                            //<! Default constructor
+        Impl(const byte* data, long size); //<! Constructor 2
+
+        // DATA
+        byte* data_;
+        long idx_;
+        long size_;
+        long sizeAlloced_;                 //!< Size of the allocated buffer
+        bool isMalloced_;                  //!< Was the buffer allocated?
+        bool eof_;
+
+        // METHODS
+        void reserve(long wcount);
+
+    private:
+        // NOT IMPLEMENTED
+        Impl(const Impl& rhs);                         //!< Copy constructor
+        Impl& operator=(const Impl& rhs);              //!< Assignment
+
+    }; // class MemIo::Impl
+
+    MemIo::Impl::Impl()
         : data_(0),
           idx_(0),
           size_(0),
@@ -719,7 +743,7 @@ namespace Exiv2 {
     {
     }
 
-    MemIo::MemIo(const byte* data, long size)
+    MemIo::Impl::Impl(const byte* data, long size)
         : data_(const_cast<byte*>(data)),
           idx_(0),
           size_(size),
@@ -729,19 +753,7 @@ namespace Exiv2 {
     {
     }
 
-    MemIo::~MemIo()
-    {
-        if (isMalloced_) {
-            std::free(data_);
-        }
-    }
-
-    BasicIo::AutoPtr MemIo::temporary() const
-    {
-        return BasicIo::AutoPtr(new MemIo);
-    }
-
-    void MemIo::reserve(long wcount)
+    void MemIo::Impl::reserve(long wcount)
     {
         long need = wcount + idx_;
 
@@ -767,12 +779,35 @@ namespace Exiv2 {
         }
     }
 
+    MemIo::MemIo()
+        : p_(new Impl())
+    {
+    }
+
+    MemIo::MemIo(const byte* data, long size)
+        : p_(new Impl(data, size))
+    {
+    }
+
+    MemIo::~MemIo()
+    {
+        if (p_->isMalloced_) {
+            std::free(p_->data_);
+        }
+        delete p_;
+    }
+
+    BasicIo::AutoPtr MemIo::temporary() const
+    {
+        return BasicIo::AutoPtr(new MemIo);
+    }
+
     long MemIo::write(const byte* data, long wcount)
     {
-        reserve(wcount);
-        assert(isMalloced_);
-        std::memcpy(&data_[idx_], data, wcount);
-        idx_ += wcount;
+        p_->reserve(wcount);
+        assert(p_->isMalloced_);
+        std::memcpy(&p_->data_[p_->idx_], data, wcount);
+        p_->idx_ += wcount;
         return wcount;
     }
 
@@ -781,24 +816,24 @@ namespace Exiv2 {
         MemIo *memIo = dynamic_cast<MemIo*>(&src);
         if (memIo) {
             // Optimization if src is another instance of MemIo
-            if (true == isMalloced_) {
-                std::free(data_);
+            if (true == p_->isMalloced_) {
+                std::free(p_->data_);
             }
-            idx_ = 0;
-            data_ = memIo->data_;
-            size_ = memIo->size_;
-            isMalloced_ = memIo->isMalloced_;
-            memIo->idx_ = 0;
-            memIo->data_ = 0;
-            memIo->size_ = 0;
-            memIo->isMalloced_ = false;
+            p_->idx_ = 0;
+            p_->data_ = memIo->p_->data_;
+            p_->size_ = memIo->p_->size_;
+            p_->isMalloced_ = memIo->p_->isMalloced_;
+            memIo->p_->idx_ = 0;
+            memIo->p_->data_ = 0;
+            memIo->p_->size_ = 0;
+            memIo->p_->isMalloced_ = false;
         }
         else {
             // Generic reopen to reset position to start
             if (src.open() != 0) {
                 throw Error(9, src.path(), strError());
             }
-            idx_ = 0;
+            p_->idx_ = 0;
             write(src);
             src.close();
         }
@@ -823,9 +858,9 @@ namespace Exiv2 {
 
     int MemIo::putb(byte data)
     {
-        reserve(1);
-        assert(isMalloced_);
-        data_[idx_++] = data;
+        p_->reserve(1);
+        assert(p_->isMalloced_);
+        p_->data_[p_->idx_++] = data;
         return data;
     }
 
@@ -834,20 +869,20 @@ namespace Exiv2 {
         long newIdx = 0;
 
         switch (pos) {
-        case BasicIo::cur: newIdx = idx_ + offset; break;
+        case BasicIo::cur: newIdx = p_->idx_ + offset; break;
         case BasicIo::beg: newIdx = offset; break;
-        case BasicIo::end: newIdx = size_ + offset; break;
+        case BasicIo::end: newIdx = p_->size_ + offset; break;
         }
 
-        if (newIdx < 0 || newIdx > size_) return 1;
-        idx_ = newIdx;
-        eof_ = false;
+        if (newIdx < 0 || newIdx > p_->size_) return 1;
+        p_->idx_ = newIdx;
+        p_->eof_ = false;
         return 0;
     }
 
     byte* MemIo::mmap(bool /*isWriteable*/)
     {
-        return data_;
+        return p_->data_;
     }
 
     int MemIo::munmap()
@@ -857,18 +892,18 @@ namespace Exiv2 {
 
     long MemIo::tell() const
     {
-        return idx_;
+        return p_->idx_;
     }
 
     long MemIo::size() const
     {
-        return size_;
+        return p_->size_;
     }
 
     int MemIo::open()
     {
-        idx_ = 0;
-        eof_ = false;
+        p_->idx_ = 0;
+        p_->eof_ = false;
         return 0;
     }
 
@@ -892,21 +927,21 @@ namespace Exiv2 {
 
     long MemIo::read(byte* buf, long rcount)
     {
-        long avail = size_ - idx_;
+        long avail = p_->size_ - p_->idx_;
         long allow = EXV_MIN(rcount, avail);
-        std::memcpy(buf, &data_[idx_], allow);
-        idx_ += allow;
-        if (rcount > avail) eof_ = true;
+        std::memcpy(buf, &p_->data_[p_->idx_], allow);
+        p_->idx_ += allow;
+        if (rcount > avail) p_->eof_ = true;
         return allow;
     }
 
     int MemIo::getb()
     {
-        if (idx_ == size_) {
-            eof_ = true;
+        if (p_->idx_ == p_->size_) {
+            p_->eof_ = true;
             return EOF;
         }
-        return data_[idx_++];
+        return p_->data_[p_->idx_++];
     }
 
     int MemIo::error() const
@@ -916,7 +951,7 @@ namespace Exiv2 {
 
     bool MemIo::eof() const
     {
-        return eof_;
+        return p_->eof_;
     }
 
     std::string MemIo::path() const
diff --git a/src/basicio.hpp b/src/basicio.hpp
index 6fe87b0..56f4374 100644
--- a/src/basicio.hpp
+++ b/src/basicio.hpp
@@ -256,7 +256,7 @@ namespace Exiv2 {
         //! @name Creators
         //@{
         //! Constructor, takes a BasicIo reference
-        IoCloser(BasicIo &bio) : bio_(bio) {}
+        IoCloser(BasicIo& bio) : bio_(bio) {}
         //! Destructor, closes the BasicIo reference
         ~IoCloser() { close(); }
         //@}
@@ -279,7 +279,6 @@ namespace Exiv2 {
         IoCloser& operator=(const IoCloser&);
     }; // class IoCloser
 
-
     /*!
       @brief Provides binary file IO by implementing the BasicIo
           interface.
@@ -689,16 +688,10 @@ namespace Exiv2 {
         //! Assignment operator
         MemIo& operator=(const MemIo& rhs);
 
-        // DATA
-        byte* data_;
-        long idx_;
-        long size_;
-        long sizeAlloced_;              //!< Size of the allocated buffer
-        bool isMalloced_;               //!< Was the buffer allocated?
-        bool eof_;
-
-        // METHODS
-        EXV_DLLLOCAL void reserve(long wcount);
+        // Pimpl idiom
+        class Impl;
+        Impl* p_;
+
     }; // class MemIo
 
 // *****************************************************************************

-- 
exiv2 packaging



More information about the pkg-kde-commits mailing list