1// This may look like C code, but it is really -*- C++ -*- 2// 3// Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002 4// Copyright Dirk Lemstra 2015 5// 6// Reference counted container class for Binary Large Objects (BLOBs) 7// 8 9#if !defined(Magick_BlobRef_header) 10#define Magick_BlobRef_header 11 12#include "Magick++/Include.h" 13#include <string> 14 15namespace Magick 16{ 17 // Forward decl 18 class BlobRef; 19 20 class MagickPPExport Blob 21 { 22 public: 23 24 enum Allocator 25 { 26 MallocAllocator, 27 NewAllocator 28 }; 29 30 // Default constructor 31 Blob(void); 32 33 // Construct object with data, making a copy of the supplied data. 34 Blob(const void* data_,const size_t length_); 35 36 // Copy constructor (reference counted) 37 Blob(const Blob& blob_); 38 39 // Destructor (reference counted) 40 virtual ~Blob(); 41 42 // Assignment operator (reference counted) 43 Blob& operator=(const Blob& blob_); 44 45 // Update object contents from Base64-encoded string representation. 46 void base64(const std::string base64_); 47 // Return Base64-encoded string representation. 48 std::string base64(void) const; 49 50 // Obtain pointer to data. The user should never try to modify or 51 // free this data since the Blob class manages its own data. The 52 // user must be finished with the data before allowing the Blob to 53 // be destroyed since the pointer is invalid once the Blob is 54 // destroyed. 55 const void* data(void) const; 56 57 // Obtain data length 58 size_t length(void) const; 59 60 // Update object contents, making a copy of the supplied data. 61 // Any existing data in the object is deallocated. 62 void update(const void* data_,const size_t length_); 63 64 // Update object contents, using supplied pointer directly (no 65 // copy). Any existing data in the object is deallocated. The user 66 // must ensure that the pointer supplied is not deleted or 67 // otherwise modified after it has been supplied to this method. 68 // Specify allocator_ as "MallocAllocator" if memory is allocated 69 // via the C language malloc() function, or "NewAllocator" if 70 // memory is allocated via C++ 'new'. 71 void updateNoCopy(void* data_,const size_t length_, 72 const Allocator allocator_=NewAllocator); 73 74 private: 75 BlobRef *_blobRef; 76 }; 77 78} // namespace Magick 79 80#endif // Magick_BlobRef_header 81