⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 array_8h-source.html

📁 pwlib开发文档
💻 HTML
📖 第 1 页 / 共 3 页
字号:
00459     T * <a class="code" href="classPAbstractArray.html#z25_1">GetPointer</a>(00460       PINDEX minSize = 0    00461     ) {00462       <span class="keywordflow">return</span> (T *)<a class="code" href="classPAbstractArray.html#z25_1">PAbstractArray::GetPointer</a>(minSize);00463     }00465 00477     T operator[](00478       PINDEX index  00479     )<span class="keyword"> const </span>{00480       <span class="keywordflow">return</span> GetAt(index);00481     }00482 00493     T &amp; operator[](00494       PINDEX index  00495     ) {00496       PASSERTINDEX(index);00497       <a class="code" href="object_8h.html#a5">PAssert</a>(<a class="code" href="classPContainer.html#z69_2">SetMinSize</a>(index+1), <a class="code" href="object_8h.html#a70a42">POutOfMemory</a>);00498       <span class="keywordflow">return</span> ((T *)theArray)[index];00499     }00500 00514     operator T const *()<span class="keyword"> const </span>{00515       <span class="keywordflow">return</span> (T <span class="keyword">const</span> *)theArray;00516     }00517 00529     BOOL <a class="code" href="classPAbstractArray.html#z25_2">Concatenate</a>(00530       <span class="keyword">const</span> PBaseArray &amp; array  00531     ) {00532       <span class="keywordflow">return</span> <a class="code" href="classPAbstractArray.html#z25_2">PAbstractArray::Concatenate</a>(array);00533     }00535 00536   <span class="keyword">protected</span>:00537     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPAbstractArray.html#b0">PrintElementOn</a>(00538       ostream &amp; stream,00539       PINDEX index00540     )<span class="keyword"> const </span>{00541       stream &lt;&lt; GetAt(index);00542     }00543 };00544 00545 <span class="comment">/*Declare a dynamic array base type.</span>00546 <span class="comment">   This macro is used to declare a descendent of PAbstractArray class,</span>00547 <span class="comment">   customised for a particular element type {\bf T}. This macro closes the</span>00548 <span class="comment">   class declaration off so no additional members can be added.</span>00549 <span class="comment"></span>00550 <span class="comment">   If the compilation is using templates then this macro produces a typedef</span>00551 <span class="comment">   of the #PBaseArray# template class.</span>00552 <span class="comment"> */</span>00553 <span class="preprocessor">#define PBASEARRAY(cls, T) typedef PBaseArray&lt;T&gt; cls</span>00554 <span class="preprocessor"></span>00567 <span class="preprocessor">#define PDECLARE_BASEARRAY(cls, T) \</span>00568 <span class="preprocessor">  PDECLARE_CLASS(cls, PBaseArray&lt;T&gt;) \</span>00569 <span class="preprocessor">    cls(PINDEX initialSize = 0) \</span>00570 <span class="preprocessor">      : PBaseArray&lt;T&gt;(initialSize) { } \</span>00571 <span class="preprocessor">    cls(T const * buffer, PINDEX length, BOOL dynamic = TRUE) \</span>00572 <span class="preprocessor">      : PBaseArray&lt;T&gt;(buffer, length, dynamic) { } \</span>00573 <span class="preprocessor">    virtual PObject * Clone() const \</span>00574 <span class="preprocessor">      { return PNEW cls(*this, GetSize()); } \</span>00575 <span class="preprocessor"></span>00576 <span class="preprocessor"></span>00595 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <span class="keyword">class </span>PScalarArray : <span class="keyword">public</span> PBaseArray&lt;T&gt;00596 {00597   <span class="keyword">public</span>:00605     PScalarArray(00606       PINDEX initialSize = 0  00607     ) : PBaseArray&lt;T&gt;(initialSize) { }00608     00611     PScalarArray(00612       T <span class="keyword">const</span> * buffer,   00613       PINDEX length,      00614       BOOL dynamic = TRUE 00615     ) : PBaseArray&lt;T&gt;(buffer, length, dynamic) { }00617 00618   <span class="keyword">protected</span>:00619     <span class="keyword">virtual</span> <span class="keywordtype">void</span> ReadElementFrom(00620       istream &amp; stream,00621       PINDEX index00622     ) {00623       T t;00624       stream &gt;&gt; t;00625       <span class="keywordflow">if</span> (!stream.fail())00626         SetAt(index, t);00627     }00628 };00629 00630 00631 <span class="comment">/*Declare a dynamic array base type.</span>00632 <span class="comment">   This macro is used to declare a descendent of PAbstractArray class,</span>00633 <span class="comment">   customised for a particular element type {\bf T}. This macro closes the</span>00634 <span class="comment">   class declaration off so no additional members can be added.</span>00635 <span class="comment"></span>00636 <span class="comment">   If the compilation is using templates then this macro produces a typedef</span>00637 <span class="comment">   of the #PBaseArray# template class.</span>00638 <span class="comment"> */</span>00639 <span class="preprocessor">#define PSCALAR_ARRAY(cls, T) typedef PScalarArray&lt;T&gt; cls</span>00640 <span class="preprocessor"></span>00641 <span class="preprocessor">#else // PHAS_TEMPLATES</span>00642 <span class="preprocessor"></span><a name="l00643"></a><a class="code" href="array_8h.html#a0">00643</a> <span class="preprocessor">#define PBASEARRAY(cls, T) \</span>00644 <span class="preprocessor">  typedef T P_##cls##_Base_Type; \</span>00645 <span class="preprocessor">  class cls : public PAbstractArray { \</span>00646 <span class="preprocessor">    PCLASSINFO(cls, PAbstractArray) \</span>00647 <span class="preprocessor">  public: \</span>00648 <span class="preprocessor">    inline cls(PINDEX initialSize = 0) \</span>00649 <span class="preprocessor">      : PAbstractArray(sizeof(P_##cls##_Base_Type), initialSize) { } \</span>00650 <span class="preprocessor">    inline cls(P_##cls##_Base_Type const * buffer, PINDEX length, BOOL dynamic = TRUE) \</span>00651 <span class="preprocessor">      : PAbstractArray(sizeof(P_##cls##_Base_Type), buffer, length, dynamic) { } \</span>00652 <span class="preprocessor">    virtual PObject * Clone() const \</span>00653 <span class="preprocessor">      { return PNEW cls(*this, GetSize()); } \</span>00654 <span class="preprocessor">    inline BOOL SetAt(PINDEX index, P_##cls##_Base_Type val) \</span>00655 <span class="preprocessor">      { return SetMinSize(index+1) &amp;&amp; \</span>00656 <span class="preprocessor">                     val==(((P_##cls##_Base_Type *)theArray)[index] = val); } \</span>00657 <span class="preprocessor">    inline P_##cls##_Base_Type GetAt(PINDEX index) const \</span>00658 <span class="preprocessor">      { PASSERTINDEX(index); return index &lt; GetSize() ? \</span>00659 <span class="preprocessor">          ((P_##cls##_Base_Type*)theArray)[index] : (P_##cls##_Base_Type)0; } \</span>00660 <span class="preprocessor">    inline P_##cls##_Base_Type operator[](PINDEX index) const \</span>00661 <span class="preprocessor">      { PASSERTINDEX(index); return GetAt(index); } \</span>00662 <span class="preprocessor">    inline P_##cls##_Base_Type &amp; operator[](PINDEX index) \</span>00663 <span class="preprocessor">      { PASSERTINDEX(index); PAssert(SetMinSize(index+1), POutOfMemory); \</span>00664 <span class="preprocessor">        return ((P_##cls##_Base_Type *)theArray)[index]; } \</span>00665 <span class="preprocessor">    inline void Attach(const P_##cls##_Base_Type * buffer, PINDEX bufferSize) \</span>00666 <span class="preprocessor">      { PAbstractArray::Attach(buffer, bufferSize); } \</span>00667 <span class="preprocessor">    inline P_##cls##_Base_Type * GetPointer(PINDEX minSize = 0) \</span>00668 <span class="preprocessor">      { return (P_##cls##_Base_Type *)PAbstractArray::GetPointer(minSize); } \</span>00669 <span class="preprocessor">    inline operator P_##cls##_Base_Type const *() const \</span>00670 <span class="preprocessor">      { return (P_##cls##_Base_Type const *)theArray; } \</span>00671 <span class="preprocessor">    inline BOOL Concatenate(cls const &amp; array) \</span>00672 <span class="preprocessor">      { return PAbstractArray::Concatenate(array); } \</span>00673 <span class="preprocessor">  }</span>00674 <span class="preprocessor"></span><a name="l00675"></a><a class="code" href="array_8h.html#a1">00675</a> <span class="preprocessor">#define PDECLARE_BASEARRAY(cls, T) \</span>00676 <span class="preprocessor">  PBASEARRAY(cls##_PTemplate, T); \</span>00677 <span class="preprocessor">  PDECLARE_CLASS(cls, cls##_PTemplate) \</span>00678 <span class="preprocessor">    cls(PINDEX initialSize = 0) \</span>00679 <span class="preprocessor">      : cls##_PTemplate(initialSize) { } \</span>00680 <span class="preprocessor">    cls(T const * buffer, PINDEX length, BOOL dynamic = TRUE) \</span>00681 <span class="preprocessor">      : cls##_PTemplate(buffer, length, dynamic) { } \</span>00682 <span class="preprocessor">    virtual PObject * Clone() const \</span>00683 <span class="preprocessor">      { return PNEW cls(*this, GetSize()); } \</span>00684 <span class="preprocessor"></span><a name="l00685"></a><a class="code" href="array_8h.html#a2">00685</a> <span class="preprocessor"></span><span class="preprocessor">#define PSCALAR_ARRAY(cls, T) PBASEARRAY(cls, T)</span>00686 <span class="preprocessor"></span>00687 <span class="preprocessor">#endif // PHAS_TEMPLATES</span>00688 <span class="preprocessor"></span>00689 00691 <span class="preprocessor">#ifdef DOC_PLUS_PLUS</span><a name="l00692"></a><a class="code" href="classPCharArray.html">00692</a> <span class="preprocessor"></span><span class="keyword">class </span><a class="code" href="classPCharArray.html">PCharArray</a> : <span class="keyword">public</span> PBaseArray {00693   <span class="keyword">public</span>:00699     <a class="code" href="classPCharArray.html#z27_0">PCharArray</a>(00700       PINDEX initialSize = 0  00701     );00702 00705     <a class="code" href="classPCharArray.html#z27_0">PCharArray</a>(00706       <span class="keywordtype">char</span> <span class="keyword">const</span> * buffer,   00707       PINDEX length,      00708       BOOL dynamic = TRUE 00709     );00711 <span class="preprocessor">#endif</span>00712 <span class="preprocessor"></span><a class="code" href="classPCharArray.html#a0">PDECLARE_BASEARRAY</a>(<a class="code" href="classPCharArray.html">PCharArray</a>, <span class="keywordtype">char</span>);00713   <span class="keyword">public</span>:00716 00717     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPCharArray.html#z29_0">PrintOn</a>(00718       ostream &amp; strm 00719     ) <span class="keyword">const</span>;00721     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classPCharArray.html#z29_1">ReadFrom</a>(00722       istream &amp;strm   <span class="comment">// Stream to read the objects contents from.</span>00723     );00725 };00726 00728 <span class="preprocessor">#ifdef DOC_PLUS_PLUS</span><a name="l00729"></a><a class="code" href="classPShortArray.html">00729</a> <span class="preprocessor"></span><span class="keyword">class </span><a class="code" href="classPShortArray.html">PShortArray</a> : <span class="keyword">public</span> PBaseArray {00730   <span class="keyword">public</span>:00736     <a class="code" href="classPShortArray.html#z31_0">PShortArray</a>(00737       PINDEX initialSize = 0  00738     );00739 00742     <a class="code" href="classPShortArray.html#z31_0">PShortArray</a>(00743       <span class="keywordtype">short</span> <span class="keyword">const</span> * buffer,   00744       PINDEX length,      00745       BOOL dynamic = TRUE 00746     );00748 };00749 <span class="preprocessor">#endif</span>00750 <span class="preprocessor"></span><a class="code" href="array_8h.html#a2">PSCALAR_ARRAY</a>(<a class="code" href="classPShortArray.html">PShortArray</a>, <span class="keywordtype">short</span>);00751 00752 00754 <span class="preprocessor">#ifdef DOC_PLUS_PLUS</span><a name="l00755"></a><a class="code" href="classPIntArray.html">00755</a> <span class="preprocessor"></span><span class="keyword">class </span><a class="code" href="classPIntArray.html">PIntArray</a> : <span class="keyword">public</span> PBaseArray {00756   <span class="keyword">public</span>:00762     <a class="code" href="classPIntArray.html#z33_0">PIntArray</a>(00763       PINDEX initialSize = 0  00764     );00765 00768     <a class="code" href="classPIntArray.html#z33_0">PIntArray</a>(00769       <span class="keywordtype">int</span> <span class="keyword">const</span> * buffer,   00770       PINDEX length,      00771       BOOL dynamic = TRUE 00772     );00774 };00775 <span class="preprocessor">#endif</span>00776 <span class="preprocessor"></span><a class="code" href="array_8h.html#a2">PSCALAR_ARRAY</a>(<a class="code" href="classPIntArray.html">PIntArray</a>, <span class="keywordtype">int</span>);00777 00778 00780 <span class="preprocessor">#ifdef DOC_PLUS_PLUS</span><a name="l00781"></a><a class="code" href="classPLongArray.html">00781</a> <span class="preprocessor"></span><span class="keyword">class </span><a class="code" href="classPLongArray.html">PLongArray</a> : <span class="keyword">public</span> PBaseArray {00782   <span class="keyword">public</span>:00788     <a class="code" href="classPLongArray.html#z35_0">PLongArray</a>(00789       PINDEX initialSize = 0  00790     );00791 00794     <a class="code" href="classPLongArray.html#z35_0">PLongArray</a>(00795       <span class="keywordtype">long</span> <span class="keyword">const</span> * buffer,   00796       PINDEX length,      00797       BOOL dynamic = TRUE 00798     );00800 };00801 <span class="preprocessor">#endif</span>00802 <span class="preprocessor"></span><a class="code" href="array_8h.html#a2">PSCALAR_ARRAY</a>(<a class="code" href="classPLongArray.html">PLongArray</a>, <span class="keywordtype">long</span>);00803 00804 00806 <span class="preprocessor">#ifdef DOC_PLUS_PLUS</span><a name="l00807"></a><a class="code" href="classPBYTEArray.html">00807</a> <span class="preprocessor"></span><span class="keyword">class </span><a class="code" href="classPBYTEArray.html">PBYTEArray</a> : <span class="keyword">public</span> PBaseArray {00808   <span class="keyword">public</span>:00814     <a class="code" href="classPBYTEArray.html#z37_0">PBYTEArray</a>(00815       PINDEX initialSize = 0  00816     );00817 00820     <a class="code" href="classPBYTEArray.html#z37_0">PBYTEArray</a>(00821       BYTE <span class="keyword">const</span> * buffer,   00822       PINDEX length,      00823       BOOL dynamic = TRUE 00824     );00826 };00827 <span class="preprocessor">#endif</span>00828 <span class="preprocessor"></span><a class="code" href="array_8h.html#a1">PDECLARE_BASEARRAY</a>(<a class="code" href="classPBYTEArray.html">PBYTEArray</a>, BYTE);00829   <span class="keyword">public</span>:00832 00833     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="array_8h.html#a9">PrintOn</a>(00834       ostream &amp; strm 00835     ) <span class="keyword">const</span>;00837     <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="array_8h.html#a10">ReadFrom</a>(00838       istream &amp;strm   <span class="comment">// Stream to read the objects contents from.</span>00839     );00841 };00842 00843 00845 <span class="preprocessor">#ifdef DOC_PLUS_PLUS</span><a name="l00846"></a><a class="code" href="classPWORDArray.html">00846</a> <span class="preprocessor"></span><span class="keyword">class </span><a class="code" href="classPWORDArray.html">PWORDArray</a> : <span class="keyword">public</span> PBaseArray {00847   <span class="keyword">public</span>:00853     <a class="code" href="classPWORDArray.html#z39_0">PWORDArray</a>(00854       PINDEX initialSize = 0  00855     );00856 00859     <a class="code" href="classPWORDArray.html#z39_0">PWORDArray</a>(00860       WORD <span class="keyword">const</span> * buffer,   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -