00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MEMORYINFO_H
00020 #define MEMORYINFO_H
00021
00022 #include "pandabase.h"
00023
00024 #ifdef DO_MEMORY_USAGE
00025
00026 #include "typeHandle.h"
00027
00028 class ReferenceCount;
00029 class TypedObject;
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 class MemoryInfo {
00042 public:
00043 MemoryInfo();
00044
00045 public:
00046
00047 TypeHandle get_type();
00048
00049 INLINE void *get_void_ptr() const;
00050 INLINE ReferenceCount *get_ref_ptr() const;
00051 INLINE TypedObject *get_typed_ptr() const;
00052
00053 INLINE bool is_size_known() const;
00054 INLINE size_t get_size() const;
00055
00056 INLINE double get_time() const;
00057
00058 public:
00059
00060 void determine_dynamic_type();
00061 void update_type_handle(TypeHandle &destination, TypeHandle refined);
00062
00063 private:
00064 enum Flags {
00065 F_got_ref = 0x0001,
00066 F_got_void = 0x0002,
00067 F_size_known = 0x0004,
00068 F_reconsider_dynamic_type = 0x0008,
00069 };
00070
00071 void *_void_ptr;
00072 ReferenceCount *_ref_ptr;
00073 TypedObject *_typed_ptr;
00074 size_t _size;
00075 TypeHandle _static_type;
00076 TypeHandle _dynamic_type;
00077 int _flags;
00078
00079 double _time;
00080 int _freeze_index;
00081
00082 friend class MemoryUsage;
00083 };
00084
00085 #include "memoryInfo.I"
00086
00087 #endif // DO_MEMORY_USAGE
00088
00089 #endif
00090