📄 array_8h-source.html
字号:
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 & 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 & 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 & stream,00539 PINDEX index00540 )<span class="keyword"> const </span>{00541 stream << 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<T> 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<T>) \</span>00569 <span class="preprocessor"> cls(PINDEX initialSize = 0) \</span>00570 <span class="preprocessor"> : PBaseArray<T>(initialSize) { } \</span>00571 <span class="preprocessor"> cls(T const * buffer, PINDEX length, BOOL dynamic = TRUE) \</span>00572 <span class="preprocessor"> : PBaseArray<T>(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> <<span class="keyword">class</span> T> <span class="keyword">class </span>PScalarArray : <span class="keyword">public</span> PBaseArray<T>00596 {00597 <span class="keyword">public</span>:00605 PScalarArray(00606 PINDEX initialSize = 0 00607 ) : PBaseArray<T>(initialSize) { }00608 00611 PScalarArray(00612 T <span class="keyword">const</span> * buffer, 00613 PINDEX length, 00614 BOOL dynamic = TRUE 00615 ) : PBaseArray<T>(buffer, length, dynamic) { }00617 00618 <span class="keyword">protected</span>:00619 <span class="keyword">virtual</span> <span class="keywordtype">void</span> ReadElementFrom(00620 istream & stream,00621 PINDEX index00622 ) {00623 T t;00624 stream >> 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<T> 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) && \</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 < 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 & 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 & 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 & 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 &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 & 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 &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 + -