| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- // Filename: memoryUsagePointers.h
- // Created by: drose (25May00)
- //
- ////////////////////////////////////////////////////////////////////
- //
- // PANDA 3D SOFTWARE
- // Copyright (c) 2001, Disney Enterprises, Inc. All rights reserved
- //
- // All use of this software is subject to the terms of the Panda 3d
- // Software license. You should have received a copy of this license
- // along with this source code; you will also find a current copy of
- // the license at http://www.panda3d.org/license.txt .
- //
- // To contact the maintainers of this program write to
- // [email protected] .
- //
- ////////////////////////////////////////////////////////////////////
- #ifndef MEMORYUSAGEPOINTERS_H
- #define MEMORYUSAGEPOINTERS_H
- #include "pandabase.h"
- #ifdef DO_MEMORY_USAGE
- #include "typedObject.h"
- #include "pointerTo.h"
- #include "referenceCount.h"
- #include "pvector.h"
- ////////////////////////////////////////////////////////////////////
- // Class : MemoryUsagePointers
- // Description : This is a list of pointers returned by a MemoryUsage
- // object in response to some query.
- //
- // Warning: once pointers are stored in a
- // MemoryUsagePointers object, they are
- // reference-counted, and will not be freed until the
- // MemoryUsagePointers object is freed (or clear() is
- // called on the object). However, they may not even be
- // freed then; pointers may leak once they have been
- // added to this structure. This is because we don't
- // store enough information in this structure to
- // correctly free the pointers that have been added.
- // Since this is intended primarily as a debugging tool,
- // this is not a major issue.
- //
- // This class is just a user interface to talk about
- // pointers stored in a MemoryUsage object. It doesn't
- // even exist when compiled with NDEBUG.
- ////////////////////////////////////////////////////////////////////
- class EXPCL_PANDAEXPRESS MemoryUsagePointers {
- PUBLISHED:
- MemoryUsagePointers();
- ~MemoryUsagePointers();
- int get_num_pointers() const;
- ReferenceCount *get_pointer(int n) const;
- TypedObject *get_typed_pointer(int n) const;
- TypeHandle get_type(int n) const;
- string get_type_name(int n) const;
- double get_age(int n) const;
- void clear();
- private:
- void add_entry(ReferenceCount *ref_ptr, TypedObject *typed_ptr,
- TypeHandle type, double age);
- class Entry {
- public:
- INLINE Entry(ReferenceCount *ref_ptr, TypedObject *typed_ptr,
- TypeHandle type, double age);
- INLINE Entry(const Entry ©);
- INLINE void operator = (const Entry ©);
- INLINE ~Entry();
- // We have an ordinary pointer to a type ReferenceCount, and not a
- // PT(ReferenceCount), because we can't actually delete this thing
- // (since ReferenceCount has no public destructor). If we can't
- // delete it, we can't make a PointerTo it, since PointerTo wants
- // to be able to delete things.
- ReferenceCount *_ref_ptr;
- TypedObject *_typed_ptr;
- TypeHandle _type;
- double _age;
- };
- typedef pvector<Entry> Entries;
- Entries _entries;
- friend class MemoryUsage;
- };
- #include "memoryUsagePointers.I"
- #endif // MEMORY_USAGE_POINTERS
- #endif
|