37#ifdef BZ_HAVE_BOOST_SERIALIZATION
38#include <boost/serialization/serialization.hpp>
39#include <boost/serialization/base_object.hpp>
40#include <boost/serialization/split_member.hpp>
41#include <boost/serialization/array.hpp>
42#include <boost/serialization/collection_size_type.hpp>
43#include <boost/serialization/nvp.hpp>
73template<
typename P_type>
116#ifdef BZ_DEBUG_LOG_ALLOCATIONS
130#if defined(BZ_THREADSAFE) && !defined(BZ_THREADSAFE_USE_ATOMIC)
139#elif defined(BZ_THREADSAFE_USE_ATOMIC)
154#ifdef BZ_DEBUG_LOG_REFERENCES
196#ifdef BZ_DEBUG_LOG_REFERENCES
224#ifdef BZ_HAVE_BOOST_SERIALIZATION
225 friend class boost::serialization::access;
231 template<
class T_arch>
233#if defined(BZ_THREADSAFE) && !defined(BZ_THREADSAFE_USE_ATOMIC)
236 const boost::serialization::collection_size_type
count(
length_);
238#ifdef BZ_DEBUG_LOG_ALLOCATIONS
239 cout <<
"MemoryBlock: serializing " <<
length_ <<
" data for MemoryBlock at "
240 << ((
void*)
this) <<
endl;
246 template<
class T_arch>
247 void load(T_arch& ar,
const unsigned int version) {
248#if defined(BZ_THREADSAFE) && !defined(BZ_THREADSAFE_USE_ATOMIC)
251 boost::serialization::collection_size_type count(
length_);
252 ar >> BOOST_SERIALIZATION_NVP(count);
256#ifdef BZ_DEBUG_LOG_ALLOCATIONS
257 cout <<
"MemoryBlock: unserializing " <<
length_ <<
" data for MemoryBlock at "
258 << ((
void*)
this) << endl;
273 BOOST_SERIALIZATION_SPLIT_MEMBER()
278#if defined(BZ_THREADSAFE) && !defined(BZ_THREADSAFE_USE_ATOMIC)
306template<
typename P_type>
318#ifdef BZ_HAVE_BOOST_SERIALIZATION
319 friend class boost::serialization::access;
328 template<
class T_arch>
330#ifdef BZ_DEBUG_LOG_ALLOCATIONS
331 cout <<
"MemoryBlockReference: serializing object at " << ((
void*)
this) <<
", MemoryBlock at "
338 boost::serialization::collection_size_type
346 template<
class T_arch>
348#ifdef BZ_DEBUG_LOG_ALLOCATIONS
349 cout <<
"MemoryBlockReference: unserializing at " << ((
void*)
this) <<
endl;
353 boost::serialization::collection_size_type
offset;
399#ifdef BZ_DEBUG_LOG_ALLOCATIONS
400 cout <<
"MemoryBlockReference: created MemoryBlock at "
419#ifdef BZ_DEBUG_LOG_ALLOCATIONS
420 cout <<
"MemoryBlockReference: created MemoryBlock at "
445#ifdef BZ_DEBUG_LOG_REFERENCES
446 cout <<
"Invalid reference count for data at "<<
data_ <<
endl;
456#ifdef BZ_DEBUG_LOG_REFERENCES
457 cout <<
"No reference count locking for data at "<<
data_ <<
endl;
485#ifdef BZ_DEBUG_LOG_ALLOCATIONS
486 cout <<
"MemoryBlockReference: created MemoryBlock at "
497#ifdef BZ_DEBUG_LOG_ALLOCATIONS
498 cout <<
"MemoryBlockReference: no more refs, delete MemoryBlock object at "
509#ifdef BZ_DEBUG_LOG_REFERENCES
510 cout <<
"MemoryBlockReference: reffing block at " << ((
void*)
block_)
516#ifdef BZ_DEBUG_LOG_REFERENCES
517 cout <<
"MemoryBlockReference:: Skipping reference count for data at "<<
data_ <<
endl;
525#ifdef BZ_DEBUG_LOG_REFERENCES
526 cout <<
"MemoryBlockReference: dereffing block at " << ((
void*)
block_)
531#ifdef BZ_DEBUG_LOG_REFERENCES
532 cout <<
"Skipping reference count for data at "<<
data_ <<
endl;
544#include <blitz/memblock.cc>
#define BZ_MUTEX_DESTROY(name)
Definition blitz.h:193
#define BZ_MUTEX_UNLOCK(name)
Definition blitz.h:192
#define BZ_MUTEX_LOCK(name)
Definition blitz.h:191
#define BZ_MUTEX_INIT(name)
Definition blitz.h:190
#define BZ_MUTEX_DECLARE(name)
Definition blitz.h:189
#define BZ_REFCOUNT_DECLARE(name)
Definition blitz.h:156
Definition memblock.h:307
MemoryBlock< T_type > * block_
Definition memblock.h:316
int numReferences() const
Definition memblock.h:441
MemoryBlockReference()
Definition memblock.h:367
int removeReference() const
Definition memblock.h:522
~MemoryBlockReference()
Definition memblock.h:425
void changeToNullBlock()
Definition memblock.h:462
void blockRemoveReference()
Definition memblock.h:492
void addReference() const
Definition memblock.h:506
void newBlock(sizeType items)
Definition memblock.h:478
void operator=(const MemoryBlockReference< T_type > &)
Definition memblock.h:537
bool isVectorAligned(size_t offset) const
Returns true if the offset from data_ is vector aligned.
Definition memblock.h:431
bool lockReferenceCount(bool lockingPolicy) const
Definition memblock.h:451
MemoryBlockReference(MemoryBlockReference< T_type > &ref, sizeType offset=0)
Definition memblock.h:374
MemoryBlockReference(sizeType items)
Definition memblock.h:411
void changeBlock(MemoryBlockReference< T_type > &ref, sizeType offset=0)
Definition memblock.h:470
P_type T_type
Definition memblock.h:310
T_type *restrict data_
Definition memblock.h:313
MemoryBlockReference(sizeType length, T_type *data, preexistingMemoryPolicy deletionPolicy)
Definition memblock.h:381
sizeType blockLength() const
Returns the allocated length of the memory block.
Definition memblock.h:435
bool doLock(bool lockingPolicy)
Definition memblock.h:128
simdTypes< T_type >::vecType *restrict dBA_tv_
Definition memblock.h:294
T_type *restrict data()
Definition memblock.h:169
T_type *restrict data_
Definition memblock.h:288
char *restrict data_char_
Definition memblock.h:290
T_type *& dataBlockAddress()
Definition memblock.h:179
MemoryBlock(sizeType length, T_type *data)
Constructor for a preallocated block that should be deleted when we are done?
Definition memblock.h:102
const T_type *restrict data() const
Definition memblock.h:174
int references() const
Definition memblock.h:204
void allocate(sizeType length)
void addReference()
Definition memblock.h:152
MemoryBlock(sizeType items)
Definition memblock.h:82
bool allocatedByUs_
Keeps track of whether the block was preallocated or not.
Definition memblock.h:285
MemoryBlock()
The default constructor is needed for serialization.
Definition memblock.h:223
int removeReference()
Definition memblock.h:189
T_type * dataBlockAddress_
Definition memblock.h:293
MemoryBlock(const MemoryBlock< T_type > &)
Definition memblock.h:218
simdTypes< T_type >::vecType *restrict data_tv_
Definition memblock.h:289
virtual ~MemoryBlock()
Definition memblock.h:112
sizeType length() const
Definition memblock.h:184
char * dBA_char_
Definition memblock.h:295
sizeType length_
Definition memblock.h:297
P_type T_type
Definition memblock.h:79
void operator=(const MemoryBlock< T_type > &)
Definition memblock.h:220
Helper class that defines the width of the simd instructions for a given type.
Definition simdtypes.h:31
static bool isVectorAligned(const T *restrict pointer)
Test if a pointer to T is simd aligned.
Definition simdtypes.h:46
#define restrict
Definition compiler.h:95
Definition array-impl.h:66
bool isThreadsafe()
Definition memblock.h:57
preexistingMemoryPolicy
Definition memblock.h:49
@ deleteDataWhenDone
Definition memblock.h:51
@ duplicateData
Definition memblock.h:50
@ neverDeleteData
Definition memblock.h:52