open_toontown_panda3d/dtool/src/dtoolbase/deletedBufferChain.I

83 lines
3.0 KiB
Plaintext

// Filename: deletedBufferChain.I
// Created by: drose (20Jul07)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) Carnegie Mellon University. All rights reserved.
//
// All use of this software is subject to the terms of the revised BSD
// license. You should have received a copy of this license along
// with this source code in a file named "LICENSE."
//
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// Function: DeletedBufferChain::validate
// Access: Public
// Description: Returns true if the pointer is valid, false if it has
// been deleted or if it was never a valid pointer.
//
// This is only meaningful in debug mode, where
// USE_DELETEDCHAINFLAG is defined. If not, this
// trivially returns true.
////////////////////////////////////////////////////////////////////
INLINE bool DeletedBufferChain::
validate(void *ptr) {
TAU_PROFILE("bool DeletedBufferChain::validate(void *)", " ", TAU_USER);
if (ptr == (void *)NULL) {
return false;
}
#if defined(USE_DELETEDCHAINFLAG) && defined(USE_DELETED_CHAIN)
const ObjectNode *obj = buffer_to_node(ptr);
return AtomicAdjust::get(obj->_flag) == DCF_alive;
#else
return true;
#endif // USE_DELETEDCHAINFLAG
}
////////////////////////////////////////////////////////////////////
// Function: DeletedBufferChain::get_buffer_size
// Access: Public
// Description: Returns the size of the buffer that is actually
// returned at each request.
////////////////////////////////////////////////////////////////////
INLINE size_t DeletedBufferChain::
get_buffer_size() const {
return _buffer_size;
}
////////////////////////////////////////////////////////////////////
// Function: DeletedBufferChain::node_to_buffer
// Access: Private, Static
// Description: Casts an ObjectNode* to a void* buffer.
////////////////////////////////////////////////////////////////////
INLINE void *DeletedBufferChain::
node_to_buffer(DeletedBufferChain::ObjectNode *node) {
#if defined(USE_DELETEDCHAINFLAG) && defined(USE_DELETED_CHAIN)
// In development mode, we increment the pointer so that the
// returned data does not overlap our _flag member.
return (void *)(((AtomicAdjust::Integer *)node) + 1);
#else
return (void *)node;
#endif // NDEBUG
}
////////////////////////////////////////////////////////////////////
// Function: DeletedBufferChain::buffer_to_node
// Access: Private, Static
// Description: Casts a void* buffer to an ObjectNode* .
////////////////////////////////////////////////////////////////////
INLINE DeletedBufferChain::ObjectNode *DeletedBufferChain::
buffer_to_node(void *ptr) {
#if defined(USE_DELETEDCHAINFLAG) && defined(USE_DELETED_CHAIN)
// In development mode, we decrement the pointer to undo the
// increment we did above.
return (ObjectNode *)(((AtomicAdjust::Integer *)ptr) - 1);
#else
return (ObjectNode *)ptr;
#endif // NDEBUG
}