Home | History | Annotate | Download | only in Magick++
      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 
     15 namespace 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