Panda3D
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Friends

VertexDataBlock Class Reference

A block of bytes that stores the actual raw vertex data referenced by a GeomVertexArrayData object. More...

#include "vertexDataBlock.h"

Inheritance diagram for VertexDataBlock:
SimpleAllocatorBlock ReferenceCount LinkedListNode MemoryBase

List of all members.

Public Member Functions

void free ()
 Releases the allocated space.
SimpleAllocatorget_allocator () const
 Returns the SimpleAllocator object that owns this block.
size_t get_max_size () const
 Returns the maximum size this block can be reallocated to, as limited by the following block.
VertexDataBlockget_next_block () const
 Returns a pointer to the next allocated block in the chain, or NULL if there are no more allocated blocks.
VertexDataPageget_page () const
 Returns the page from which this buffer was allocated.
unsigned char * get_pointer (bool force) const
 Returns a pointer to the start of the allocated memory for this buffer, or NULL if the data is not currently resident.
int get_ref_count () const
 Returns the current reference count.
size_t get_size () const
 Returns the size of this block.
size_t get_start () const
 Returns the starting point of this block.
WeakReferenceListget_weak_list () const
 Returns the WeakReferenceList associated with this ReferenceCount object.
bool has_weak_list () const
 Returns true if this particular ReferenceCount object has a WeakReferenceList created, false otherwise.
bool is_free () const
 Returns true if the block has been freed, false if it is still valid.
void local_object ()
 This function should be called, once, immediately after creating a new instance of some ReferenceCount-derived object on the stack.
void operator delete (void *ptr, void *)
void operator delete (void *ptr)
void operator delete[] (void *, void *)
void operator delete[] (void *ptr)
void * operator new (size_t size)
void * operator new (size_t size, void *ptr)
void * operator new[] (size_t size, void *ptr)
void * operator new[] (size_t size)
void output (ostream &out) const
bool realloc (size_t size)
 Changes the size of this block to the specified size.
void ref () const
 Explicitly increments the reference count.
bool test_ref_count_integrity () const
 Does some easy checks to make sure that the reference count isn't completely bogus.
bool test_ref_count_nonzero () const
 Does some easy checks to make sure that the reference count isn't zero, or completely bogus.
virtual bool unref () const
 Explicitly decrements the reference count.
void weak_ref (WeakPointerToVoid *ptv)
 Adds the indicated PointerToVoid as a weak reference to this object.
void weak_unref (WeakPointerToVoid *ptv)
 Removes the indicated PointerToVoid as a weak reference to this object.

Static Public Member Functions

static TypeHandle get_class_type ()
static void init_type ()

Protected Member Functions

 VertexDataBlock (VertexDataPage *page, size_t start, size_t size)
void do_free ()
 Releases the allocated space.
size_t do_get_max_size () const
 Returns the maximum size this block can be reallocated to, as limited by the following block.
bool do_realloc (size_t size)
 Changes the size of this block to the specified size.
bool do_test_ref_count_integrity () const
 Does some easy checks to make sure that the reference count isn't completely bogus.
bool do_test_ref_count_nonzero () const
 Returns true if the reference count is nonzero, false otherwise.
void insert_after (LinkedListNode *node)
 Adds a LinkedListNode record after the indicated node in the doubly-linked list.
void insert_before (LinkedListNode *node)
 Adds a LinkedListNode record before the indicated node in the doubly-linked list.
bool is_on_list () const
 Returns true if the node is member of any list, false if it has been removed or never added.
void remove_from_list ()
 Removes a LinkedListNode record from the doubly-linked list.
void take_list_from (LinkedListNode *other_root)
 Given that this LinkedListNode represents the root of a list, and the other pointer represents the root of a different list, move all of the nodes (except the root itself) from other_root onto this list.

Protected Attributes

LinkedListNode_next
LinkedListNode_prev

Friends

class VertexDataPage

Detailed Description

A block of bytes that stores the actual raw vertex data referenced by a GeomVertexArrayData object.

Definition at line 30 of file vertexDataBlock.h.


Member Function Documentation

void SimpleAllocatorBlock::do_free ( ) [inline, protected, inherited]

Releases the allocated space.

Assumes the lock is already held.

Definition at line 296 of file simpleAllocator.I.

References SimpleAllocator::mark_contiguous(), and LinkedListNode::remove_from_list().

Referenced by SimpleAllocatorBlock::free().

size_t SimpleAllocatorBlock::do_get_max_size ( ) const [inline, protected, inherited]

Returns the maximum size this block can be reallocated to, as limited by the following block.

Assumes the lock is already held.

Definition at line 315 of file simpleAllocator.I.

Referenced by SimpleAllocatorBlock::do_realloc(), and SimpleAllocatorBlock::get_max_size().

bool SimpleAllocatorBlock::do_realloc ( size_t  size) [inline, protected, inherited]

Changes the size of this block to the specified size.

Returns true if the change is accepted, false if there was not enough room.

Assumes the lock is already held.

Definition at line 335 of file simpleAllocator.I.

References SimpleAllocatorBlock::do_get_max_size(), and SimpleAllocator::mark_contiguous().

Referenced by SimpleAllocatorBlock::realloc().

bool ReferenceCount::do_test_ref_count_integrity ( ) const [protected, inherited]

Does some easy checks to make sure that the reference count isn't completely bogus.

Returns true if ok, false otherwise.

Reimplemented in NodeReferenceCount, CachedTypedWritableReferenceCount, and NodeCachedReferenceCount.

Definition at line 29 of file referenceCount.cxx.

Referenced by ReferenceCount::do_test_ref_count_nonzero(), and ReferenceCount::test_ref_count_integrity().

bool ReferenceCount::do_test_ref_count_nonzero ( ) const [protected, inherited]

Returns true if the reference count is nonzero, false otherwise.

Definition at line 56 of file referenceCount.cxx.

References ReferenceCount::do_test_ref_count_integrity().

Referenced by ReferenceCount::test_ref_count_nonzero().

void SimpleAllocatorBlock::free ( ) [inline, inherited]

Releases the allocated space.

Definition at line 195 of file simpleAllocator.I.

References SimpleAllocatorBlock::do_free().

Referenced by SimpleAllocatorBlock::~SimpleAllocatorBlock().

SimpleAllocator * SimpleAllocatorBlock::get_allocator ( ) const [inline, inherited]

Returns the SimpleAllocator object that owns this block.

Returns NULL if the block has been freed.

Definition at line 209 of file simpleAllocator.I.

Referenced by SimpleAllocator::do_alloc(), and get_page().

size_t SimpleAllocatorBlock::get_max_size ( ) const [inline, inherited]

Returns the maximum size this block can be reallocated to, as limited by the following block.

Definition at line 255 of file simpleAllocator.I.

References SimpleAllocatorBlock::do_get_max_size().

VertexDataBlock * VertexDataBlock::get_next_block ( ) const [inline]

Returns a pointer to the next allocated block in the chain, or NULL if there are no more allocated blocks.

Reimplemented from SimpleAllocatorBlock.

Definition at line 68 of file vertexDataBlock.I.

VertexDataPage * VertexDataBlock::get_page ( ) const [inline]

Returns the page from which this buffer was allocated.

Definition at line 34 of file vertexDataBlock.I.

References SimpleAllocatorBlock::get_allocator().

Referenced by get_pointer().

unsigned char * VertexDataBlock::get_pointer ( bool  force) const [inline]

Returns a pointer to the start of the allocated memory for this buffer, or NULL if the data is not currently resident.

If the data is not currently resident, this will implicitly request it to become resident soon.

If force is true, this method will never return NULL, but may block until the data is available.

Definition at line 51 of file vertexDataBlock.I.

References get_page(), VertexDataPage::get_page_data(), and SimpleAllocatorBlock::get_start().

int ReferenceCount::get_ref_count ( ) const [inline, inherited]
size_t SimpleAllocatorBlock::get_size ( ) const [inline, inherited]

Returns the size of this block.

It is an error to call this if the block has been freed.

Definition at line 232 of file simpleAllocator.I.

Referenced by VertexDataSaveFile::read_data().

size_t SimpleAllocatorBlock::get_start ( ) const [inline, inherited]

Returns the starting point of this block.

It is an error to call this if the block has been freed.

Definition at line 220 of file simpleAllocator.I.

Referenced by get_pointer(), and VertexDataSaveFile::read_data().

WeakReferenceList * ReferenceCount::get_weak_list ( ) const [inline, inherited]

Returns the WeakReferenceList associated with this ReferenceCount object.

If there has never been a WeakReferenceList associated with this object, creates one now.

Definition at line 307 of file referenceCount.I.

Referenced by ReferenceCount::weak_ref().

bool ReferenceCount::has_weak_list ( ) const [inline, inherited]

Returns true if this particular ReferenceCount object has a WeakReferenceList created, false otherwise.

In general, this will be true if there was ever a WeakPointerTo created for this object (even if there is not any for it now).

Definition at line 294 of file referenceCount.I.

Referenced by ReferenceCount::weak_unref().

void LinkedListNode::insert_after ( LinkedListNode node) [inline, protected, inherited]

Adds a LinkedListNode record after the indicated node in the doubly-linked list.

Definition at line 108 of file linkedListNode.I.

void LinkedListNode::insert_before ( LinkedListNode node) [inline, protected, inherited]

Adds a LinkedListNode record before the indicated node in the doubly-linked list.

Definition at line 91 of file linkedListNode.I.

Referenced by SimpleAllocator::do_alloc(), AdaptiveLru::do_partial_lru_update(), and SimpleLruPage::enqueue_lru().

bool SimpleAllocatorBlock::is_free ( ) const [inline, inherited]

Returns true if the block has been freed, false if it is still valid.

Definition at line 244 of file simpleAllocator.I.

bool LinkedListNode::is_on_list ( ) const [inline, protected, inherited]

Returns true if the node is member of any list, false if it has been removed or never added.

The head of a list generally appears to to always be a member of itself.

Definition at line 62 of file linkedListNode.I.

void ReferenceCount::local_object ( ) [inline, inherited]

This function should be called, once, immediately after creating a new instance of some ReferenceCount-derived object on the stack.

This allows the object to be passed to functions that will increment and decrement the object's reference count temporarily, and it will prevent the object from being deleted (inappropriately), when the reference count returns to zero. It actually achieves this by setting a large positive value in the reference count field.

Definition at line 276 of file referenceCount.I.

Referenced by PGTop::cull_callback(), BoundingSphere::extend_by_hexahedron(), AsyncTaskManager::find_task(), AsyncTaskManager::find_tasks(), and AsyncTaskManager::find_tasks_matching().

bool SimpleAllocatorBlock::realloc ( size_t  size) [inline, inherited]

Changes the size of this block to the specified size.

Returns true if the change is accepted, false if there was not enough room.

Definition at line 269 of file simpleAllocator.I.

References SimpleAllocatorBlock::do_realloc().

void ReferenceCount::ref ( ) const [inline, inherited]

Explicitly increments the reference count.

User code should avoid using ref() and unref() directly, which can result in missed reference counts. Instead, let a PointerTo object manage the reference counting automatically.

This function is const, even though it changes the object, because generally fiddling with an object's reference count isn't considered part of fiddling with the object. An object might be const in other ways, but we still need to accurately count the number of references to it.

Definition at line 179 of file referenceCount.I.

References ReferenceCount::test_ref_count_integrity().

Referenced by CachedTypedWritableReferenceCount::cache_ref(), TypedWritable::decode_raw_from_bam_stream(), NodeCachedReferenceCount::node_ref(), NodeReferenceCount::node_ref(), BamCacheRecord::set_data(), CullableObject::set_draw_callback(), and ModelRoot::set_reference().

void LinkedListNode::remove_from_list ( ) [inline, protected, inherited]

Removes a LinkedListNode record from the doubly-linked list.

Definition at line 73 of file linkedListNode.I.

Referenced by SimpleLruPage::dequeue_lru(), SimpleAllocatorBlock::do_free(), AdaptiveLru::do_partial_lru_update(), and SimpleLruPage::enqueue_lru().

void LinkedListNode::take_list_from ( LinkedListNode other_root) [inline, protected, inherited]

Given that this LinkedListNode represents the root of a list, and the other pointer represents the root of a different list, move all of the nodes (except the root itself) from other_root onto this list.

Definition at line 127 of file linkedListNode.I.

Referenced by BufferContextChain::take_from().

bool ReferenceCount::test_ref_count_integrity ( ) const [inline, inherited]
bool ReferenceCount::test_ref_count_nonzero ( ) const [inline, inherited]

Does some easy checks to make sure that the reference count isn't zero, or completely bogus.

Returns true if ok, false otherwise.

Definition at line 252 of file referenceCount.I.

References ReferenceCount::do_test_ref_count_nonzero().

Referenced by CopyOnWritePointer::test_ref_count_nonzero().

bool ReferenceCount::unref ( ) const [inline, virtual, inherited]

Explicitly decrements the reference count.

Note that the object will not be implicitly deleted by unref() simply because the reference count drops to zero. (Having a member function delete itself is problematic.) However, see the helper function unref_delete().

User code should avoid using ref() and unref() directly, which can result in missed reference counts. Instead, let a PointerTo object manage the reference counting automatically.

This function is const, even though it changes the object, because generally fiddling with an object's reference count isn't considered part of fiddling with the object. An object might be const in other ways, but we still need to accurately count the number of references to it.

The return value is true if the new reference count is nonzero, false if it is zero.

Reimplemented in GeomVertexArrayFormat, GeomVertexFormat, InternalName, RenderAttrib, RenderEffects, RenderState, and TransformState.

Definition at line 214 of file referenceCount.I.

References ReferenceCount::test_ref_count_integrity().

Referenced by CachedTypedWritableReferenceCount::cache_unref(), TypedWritable::decode_raw_from_bam_stream(), RenderEffect::finalize(), NodeCachedReferenceCount::node_unref(), NodeReferenceCount::node_unref(), TransformState::unref(), RenderState::unref(), RenderEffects::unref(), RenderAttrib::unref(), InternalName::unref(), GeomVertexFormat::unref(), and GeomVertexArrayFormat::unref().

void ReferenceCount::weak_ref ( WeakPointerToVoid ptv) [inline, inherited]

Adds the indicated PointerToVoid as a weak reference to this object.

Definition at line 321 of file referenceCount.I.

References WeakReferenceList::add_reference(), and ReferenceCount::get_weak_list().

void ReferenceCount::weak_unref ( WeakPointerToVoid ptv) [inline, inherited]

Removes the indicated PointerToVoid as a weak reference to this object.

It must have previously been added via a call to weak_ref().

Definition at line 334 of file referenceCount.I.

References WeakReferenceList::clear_reference(), and ReferenceCount::has_weak_list().


The documentation for this class was generated from the following files:
 All Classes Functions Variables Enumerations