Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef PD_ITERATOR_H
00021 #define PD_ITERATOR_H
00022
00024
00025
00026
00027
00028
00029
00030
00031 #include "ut_TextIterator.h"
00032 #include "pt_Types.h"
00033
00034 class PD_Document;
00035 class pt_PieceTable;
00036 class pf_Frag;
00037 class pf_Frag_Strux;
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 class ABI_EXPORT PD_DocIterator : public UT_TextIterator
00054 {
00055 public:
00056 PD_DocIterator(const PD_Document & doc, PT_DocPosition dpos = 0);
00057
00058 virtual UT_UCS4Char getChar();
00059
00060 virtual UT_uint32 getPosition() const {return m_pos;}
00061 virtual void setPosition(UT_uint32 pos);
00062
00063 virtual void setUpperLimit(UT_uint32 maxpos) {m_max_pos = maxpos;}
00064 virtual UT_uint32 getUpperLimit() const { return m_max_pos;}
00065
00066 virtual UTIterStatus getStatus() const {return m_status;}
00067
00068 virtual UT_uint32 find(UT_UCS4Char * what, UT_uint32 iLen, bool bForward = true);
00069 virtual UT_uint32 find(UT_TextIterator & text, UT_uint32 iLen, bool bForward = true);
00070
00071 virtual UT_TextIterator * makeCopy() const;
00072
00073 virtual UT_TextIterator & operator ++ ();
00074 virtual UT_TextIterator & operator -- ();
00075 virtual UT_TextIterator & operator += (UT_sint32 i);
00076 virtual UT_TextIterator & operator -= (UT_sint32 i);
00077
00078 virtual UT_UCS4Char operator [](UT_uint32 dpos);
00079
00080 const pf_Frag * getFrag() const {return m_frag;}
00081
00082 void reset() {m_pos = 0; m_frag = NULL; m_status = UTIter_OK;}
00083 void reset(PT_DocPosition pos, const pf_Frag * pf)
00084 {m_pos = pos; m_frag = pf; _findFrag();}
00085
00086
00087 private:
00088
00089 PD_DocIterator(pt_PieceTable & pt):m_pt(pt){};
00090
00091 bool _findFrag();
00092
00093 pt_PieceTable & m_pt;
00094 PT_DocPosition m_pos;
00095 PT_DocPosition m_max_pos;
00096
00097 const pf_Frag * m_frag;
00098
00099 UTIterStatus m_status;
00100 };
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111 class ABI_EXPORT PD_StruxIterator : public UT_TextIterator
00112 {
00113 public:
00114 PD_StruxIterator(pf_Frag_Strux* sdh,
00115 UT_uint32 offset = 0, UT_uint32 maxoffset = 0xffffffff);
00116
00117 virtual UT_UCS4Char getChar();
00118
00119 virtual UT_uint32 getPosition() const {return m_offset;}
00120 virtual void setPosition(UT_uint32 pos);
00121
00122 virtual void setUpperLimit(UT_uint32 maxpos) {m_max_offset = maxpos;}
00123 virtual UT_uint32 getUpperLimit() const {return m_max_offset;}
00124
00125 virtual UTIterStatus getStatus() const {return m_status;}
00126
00127 virtual UT_uint32 find(UT_UCS4Char * what, UT_uint32 iLen, bool bForward = true);
00128 virtual UT_uint32 find(UT_TextIterator & text, UT_uint32 iLen, bool bForward = true);
00129
00130 virtual UT_TextIterator * makeCopy() const;
00131
00132 virtual UT_TextIterator & operator ++ ();
00133 virtual UT_TextIterator & operator -- ();
00134 virtual UT_TextIterator & operator += (UT_sint32 i);
00135 virtual UT_TextIterator & operator -= (UT_sint32 i);
00136
00137 virtual UT_UCS4Char operator [](UT_uint32 dpos);
00138
00139 private:
00140
00141 PD_StruxIterator(){};
00142
00143 bool _findFrag();
00144 bool _incrementPos(UT_sint32 d);
00145
00146 pt_PieceTable * m_pPT;
00147 UT_uint32 m_offset;
00148 UT_uint32 m_frag_offset;
00149 pf_Frag_Strux* m_sdh;
00150
00151 const pf_Frag * m_frag;
00152
00153 UTIterStatus m_status;
00154 UT_uint32 m_max_offset;
00155 UT_uint32 m_strux_len;
00156 };
00157
00158 #endif //PD_ITERATOR_H