📄 object_8h-source.html
字号:
00555 <span class="preprocessor"></span><a name="l00565"></a><a class="code" href="object_8h.html#a8">00565</a> <span class="preprocessor">#define PAssertNULL(p) ((&(p)&&(p)!=NULL)?(p): \</span>00566 <span class="preprocessor"> (PAssertFunc(__FILE__,__LINE__, __CLASS__, PNullPointerReference),(p)))</span>00567 <span class="preprocessor"></span><a name="l00574"></a><a class="code" href="object_8h.html#a9">00574</a> <span class="preprocessor">#define PAssertAlways(m) PAssertFunc(__FILE__,__LINE__,__CLASS__,(m))</span>00575 <span class="preprocessor"></span><a name="l00582"></a><a class="code" href="object_8h.html#a10">00582</a> <span class="preprocessor">#define PAssertAlways2(c, m) PAssertFunc(__FILE__,__LINE__,(c),(m))</span>00583 <span class="preprocessor"></span>00584 <span class="preprocessor">#endif // P_USE_ASSERTS</span>00585 <span class="preprocessor"></span>00586 00591 ostream & <a class="code" href="object_8h.html#a60">PGetErrorStream</a>();00592 00596 <span class="keywordtype">void</span> <a class="code" href="object_8h.html#a61">PSetErrorStream</a>(ostream * strm );00597 <a name="l00612"></a><a class="code" href="object_8h.html#a11">00612</a> <span class="preprocessor">#define PError (PGetErrorStream())</span>00613 <span class="preprocessor"></span>00614 00615 00617 <span class="comment">// Debug and tracing</span>00618 00619 <span class="preprocessor">#ifndef PTRACING</span>00620 <span class="preprocessor"></span><span class="preprocessor">#ifndef _DEBUG</span><a name="l00621"></a><a class="code" href="object_8h.html#a12">00621</a> <span class="preprocessor"></span><span class="preprocessor">#define PTRACING 0</span>00622 <span class="preprocessor"></span><span class="preprocessor">#else</span>00623 <span class="preprocessor"></span><span class="preprocessor">#define PTRACING 1</span>00624 <span class="preprocessor"></span><span class="preprocessor">#endif</span>00625 <span class="preprocessor"></span><span class="preprocessor">#endif</span>00626 <span class="preprocessor"></span><a name="l00631"></a><a class="code" href="classPTrace.html">00631</a> <span class="keyword">class </span><a class="code" href="classPTrace.html">PTrace</a>00632 {00633 <span class="keyword">public</span>:<a name="l00635"></a><a class="code" href="classPTrace.html#s10">00635</a> <span class="keyword">enum</span> <a class="code" href="classPTrace.html#s10">Options</a> {00641 <a class="code" href="classPTrace.html#s10s0">Blocks</a> = 1,00643 <a class="code" href="classPTrace.html#s10s1">DateAndTime</a> = 2,00645 <a class="code" href="classPTrace.html#s10s2">Timestamp</a> = 4,00647 <a class="code" href="classPTrace.html#s10s3">Thread</a> = 8,00649 <a class="code" href="classPTrace.html#s10s4">TraceLevel</a> = 16,00651 <a class="code" href="classPTrace.html#s10s5">FileAndLine</a> = 32,00653 <a class="code" href="classPTrace.html#s10s6">ThreadAddress</a> = 64,00655 <a class="code" href="classPTrace.html#s10s7">AppendToFile</a> = 128,00659 <a class="code" href="classPTrace.html#s10s8">GMTTime</a> = 256,00662 <a class="code" href="classPTrace.html#s10s9">SystemLogStream</a> = 3276800663 };00664 00672 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classPTrace.html#d0">Initialise</a>(00673 <span class="keywordtype">unsigned</span> level,00674 <span class="keyword">const</span> <span class="keywordtype">char</span> * filename = NULL,00675 <span class="keywordtype">unsigned</span> options = <a class="code" href="classPTrace.html#s10s2">Timestamp</a> | <a class="code" href="classPTrace.html#s10s3">Thread</a> | <a class="code" href="classPTrace.html#s10s0">Blocks</a>00676 );00677 00684 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classPTrace.html#d1">SetOptions</a>(<span class="keywordtype">unsigned</span> options );00685 00693 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classPTrace.html#d2">ClearOptions</a>(<span class="keywordtype">unsigned</span> options );00694 00699 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="classPTrace.html#d3">GetOptions</a>();00700 00706 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classPTrace.html#d4">SetLevel</a>(<span class="keywordtype">unsigned</span> level );00707 00713 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="classPTrace.html#d5">GetLevel</a>();00714 00719 <span class="keyword">static</span> BOOL <a class="code" href="classPTrace.html#d6">CanTrace</a>(<span class="keywordtype">unsigned</span> level );00720 00725 <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classPTrace.html#d7">SetStream</a>(ostream * out );00726 00742 <span class="keyword">static</span> ostream & <a class="code" href="classPTrace.html#d8">Begin</a>(00743 <span class="keywordtype">unsigned</span> level, 00744 <span class="keyword">const</span> <span class="keywordtype">char</span> * fileName, 00745 <span class="keywordtype">int</span> lineNum 00746 );00747 00764 <span class="keyword">static</span> ostream & <a class="code" href="classPTrace.html#d9">End</a>(ostream & strm );00765 00766 <a name="l00772"></a><a class="code" href="classPTrace_1_1Block.html">00772</a> <span class="keyword">class </span><a class="code" href="classPTrace_1_1Block.html">Block</a> {00773 <span class="keyword">public</span>:00775 <a class="code" href="classPTrace_1_1Block.html#a0">Block</a>(00776 <span class="keyword">const</span> <span class="keywordtype">char</span> * fileName, 00777 <span class="keywordtype">int</span> lineNum, 00778 <span class="keyword">const</span> <span class="keywordtype">char</span> * traceName00780 );00782 <a class="code" href="classPTrace_1_1Block.html#a1">~Block</a>();00783 <span class="keyword">private</span>:00784 <span class="keyword">const</span> <span class="keywordtype">char</span> * file;00785 <span class="keywordtype">int</span> line;00786 <span class="keyword">const</span> <span class="keywordtype">char</span> * name;00787 };00788 };00789 00790 <span class="preprocessor">#if !PTRACING</span>00791 <span class="preprocessor"></span><a name="l00792"></a><a class="code" href="object_8h.html#a13">00792</a> <span class="preprocessor">#define PTRACE_PARAM(param)</span><a name="l00793"></a><a class="code" href="object_8h.html#a14">00793</a> <span class="preprocessor"></span><span class="preprocessor">#define PTRACE_BLOCK(n)</span><a name="l00794"></a><a class="code" href="object_8h.html#a15">00794</a> <span class="preprocessor"></span><span class="preprocessor">#define PTRACE_LINE()</span><a name="l00795"></a><a class="code" href="object_8h.html#a16">00795</a> <span class="preprocessor"></span><span class="preprocessor">#define PTRACE(level, arg)</span><a name="l00796"></a><a class="code" href="object_8h.html#a17">00796</a> <span class="preprocessor"></span><span class="preprocessor">#define PTRACE_IF(level, cond, args)</span>00797 <span class="preprocessor"></span>00798 <span class="preprocessor">#else</span>00799 <span class="preprocessor"></span>00800 <span class="comment">/* Macro to conditionally declare a parameter to a function to avoid compiler</span>00801 <span class="comment"> warning due that parameter only being used in a PTRACE */</span>00802 <span class="preprocessor">#define PTRACE_PARAM(param) param</span>00803 <span class="preprocessor"></span>00810 <span class="preprocessor">#define PTRACE_BLOCK(name) PTrace::Block __trace_block_instance(__FILE__, __LINE__, name)</span>00811 <span class="preprocessor"></span>00815 <span class="preprocessor">#define PTRACE_LINE() \</span>00816 <span class="preprocessor"> if (!PTrace::CanTrace(1)) ; else \</span>00817 <span class="preprocessor"> PTrace::Begin(1, __FILE__, __LINE__) << __FILE__ << '(' << __LINE__ << ')' << PTrace::End</span>00818 <span class="preprocessor"></span>00824 <span class="preprocessor">#define PTRACE(level, args) \</span>00825 <span class="preprocessor"> if (!PTrace::CanTrace(level)) ; else \</span>00826 <span class="preprocessor"> PTrace::Begin(level, __FILE__, __LINE__) << args << PTrace::End</span>00827 <span class="preprocessor"></span>00835 <span class="preprocessor">#define PTRACE_IF(level, cond, args) \</span>00836 <span class="preprocessor"> if (!(PTrace::CanTrace(level) && (cond))) ; else \</span>00837 <span class="preprocessor"> PTrace::Begin(level, __FILE__, __LINE__) << args << PTrace::End</span>00838 <span class="preprocessor"></span>00839 <span class="preprocessor">#endif</span>00840 <span class="preprocessor"></span>00841 <span class="preprocessor">#if PMEMORY_CHECK</span>00842 <span class="preprocessor"></span>00849 <span class="keyword">class </span>PMemoryHeap {00850 <span class="keyword">protected</span>:00852 PMemoryHeap();00853 00854 <span class="keyword">public</span>:00855 <span class="comment">// Clear up the memory checking subsystem, dumping memory leaks.</span>00856 ~PMemoryHeap();00857 00864 <span class="keyword">static</span> <span class="keywordtype">void</span> * Allocate(00865 size_t nSize, 00866 <span class="keyword">const</span> <span class="keywordtype">char</span> * file, 00867 <span class="keywordtype">int</span> line, 00868 <span class="keyword">const</span> <span class="keywordtype">char</span> * className 00869 );00876 <span class="keyword">static</span> <span class="keywordtype">void</span> * Allocate(00877 size_t count, 00878 size_t iSize, 00879 <span class="keyword">const</span> <span class="keywordtype">char</span> * file, 00880 <span class="keywordtype">int</span> line 00881 );00882 00890 <span class="keyword">static</span> <span class="keywordtype">void</span> * Reallocate(00891 <span class="keywordtype">void</span> * ptr, 00892 size_t nSize, 00893 <span class="keyword">const</span> <span class="keywordtype">char</span> * file, 00894 <span class="keywordtype">int</span> line 00895 );00896 00902 <span class="keyword">static</span> <span class="keywordtype">void</span> Deallocate(00903 <span class="keywordtype">void</span> * ptr, 00904 <span class="keyword">const</span> <span class="keywordtype">char</span> * className 00905 );00906 00909 <span class="keyword">enum</span> Validation {00910 Ok, Bad, Trashed00911 };00919 <span class="keyword">static</span> Validation Validate(00920 <span class="keywordtype">void</span> * ptr, 00921 <span class="keyword">const</span> <span class="keywordtype">char</span> * className, 00922 ostream * error 00923 );00924 00929 <span class="keyword">static</span> BOOL ValidateHeap(00930 ostream * error = NULL <span class="comment">// Stream to output, use default if NULL</span>00931 );00932 00938 <span class="keyword">static</span> BOOL SetIgnoreAllocations(00939 BOOL ignore 00940 );00941 00945 <span class="keyword">static</span> <span class="keywordtype">void</span> DumpStatistics();00949 <span class="keyword">static</span> <span class="keywordtype">void</span> DumpStatistics(ostream & strm );00950 00951 <span class="comment">/* Get number of allocation.</span>00952 <span class="comment"> Each allocation is counted and if desired the next allocation request</span>00953 <span class="comment"> number may be obtained via this function.</span>00954 <span class="comment"> @return Allocation request number.</span>00955 <span class="comment"> */</span>00956 <span class="keyword">static</span> DWORD GetAllocationRequest();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -