| // This may look like C code, but it is really -*- C++ -*- |
| // |
| // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002 |
| // Copyright Dirk Lemstra 2014-2015 |
| // |
| // Blob reference class |
| // |
| // This is an internal implementation class that should not be |
| // accessed by users. |
| // |
| |
| #if !defined(Magick_Blob_header) |
| #define Magick_Blob_header |
| |
| #include "Magick++/Include.h" |
| #include "Magick++/Thread.h" |
| #include "Magick++/Blob.h" |
| |
| namespace Magick |
| { |
| class BlobRef |
| { |
| public: |
| |
| // Construct with data, making private copy of data |
| BlobRef(const void* data_,const size_t length_); |
| |
| // Destructor (actually destroys data) |
| ~BlobRef(void); |
| |
| // Decreases reference count and return the new count |
| size_t decrease(); |
| |
| // Increases reference count |
| void increase(); |
| |
| Blob::Allocator allocator; // Memory allocation system in use |
| size_t length; // Blob length |
| void* data; // Blob data |
| |
| private: |
| // Copy constructor and assignment are not supported |
| BlobRef(const BlobRef&); |
| BlobRef& operator=(const BlobRef&); |
| |
| MutexLock _mutexLock; // Mutex lock |
| size_t _refCount; // Reference count |
| }; |
| |
| } // namespace Magick |
| |
| #endif // Magick_Blob_header |