imagemagick/Magick++/lib/BlobRef.cpp

45 lines
981 B
C++
Raw Normal View History

2023-02-03 21:16:55 +08:00
// This may look like C code, but it is really -*- C++ -*-
//
// Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2004
// Copyright Dirk Lemstra 2015
//
// Implementation of Blob
//
#define MAGICKCORE_IMPLEMENTATION 1
#define MAGICK_PLUSPLUS_IMPLEMENTATION 1
#include "Magick++/Include.h"
#include "Magick++/Thread.h"
#include "Magick++/BlobRef.h"
#include <string.h>
Magick::BlobRef::BlobRef(const void* data_,const size_t length_)
: _data(0),
_length(length_),
_allocator(Magick::Blob::NewAllocator),
_refCount(1),
_mutexLock()
{
if (data_)
{
_data=new unsigned char[length_];
memcpy(_data,data_,length_);
}
}
// Destructor (actually destroys data)
Magick::BlobRef::~BlobRef(void)
{
if (_allocator == Magick::Blob::NewAllocator)
{
delete[] static_cast<unsigned char*>(_data);
_data=0;
}
else if (_allocator == Magick::Blob::MallocAllocator)
{
_data=(void *) RelinquishMagickMemory(_data);
}
}