1/* { dg-do compile } */
2
3typedef unsigned int UT_uint32;
4typedef UT_uint32 PT_DocPosition;
5typedef UT_uint32 PT_BlockOffset;
6typedef enum _PTStruxType { PTX_Block } PTStruxType;
7typedef UT_uint32 PL_ListenerId;
8typedef const void * PL_StruxFmtHandle;
9class PX_ChangeRecord;
10class pf_Frag {
11  public:
12   typedef enum _PFType { PFT_Object } PFType;
13   inline PFType getType(void) const { }
14   inline pf_Frag * getNext(void) const { }
15   PT_DocPosition getPos(void) const { }
16};
17class pf_Fragments {
18  public:
19   pf_Frag * getFirst() const;
20};
21class pt_PieceTable {
22   bool getStruxOfTypeFromPosition(PL_ListenerId listenerId, PT_DocPosition docPos, PTStruxType pts, PL_StruxFmtHandle * psfh) const;
23   bool _tellAndMaybeAddListener(PL_ListenerId listenerId, bool bAdd);
24   pf_Fragments m_fragments;
25};
26class pf_Frag_Object : public pf_Frag
27{
28  public:
29   virtual bool createSpecialChangeRecord(PX_ChangeRecord ** ppcr, PT_DocPosition dpos, PT_BlockOffset blockOffset) const;
30};
31bool pt_PieceTable::_tellAndMaybeAddListener(PL_ListenerId listenerId, bool bAdd)
32{
33  PL_StruxFmtHandle sfh = 0;
34  PT_DocPosition sum = 0;
35  UT_uint32 blockOffset = 0;
36  for (pf_Frag * pf = m_fragments.getFirst(); (pf); pf=pf->getNext())
37  {
38      pf_Frag_Object * pfo = static_cast<pf_Frag_Object *> (pf);
39      PX_ChangeRecord * pcr = __null;
40      bool bStatus1 = false;
41      if(sfh != __null)     {
42       bStatus1 = pfo->createSpecialChangeRecord(&pcr,sum,blockOffset);
43       if (!(bStatus1))
44	 return (false);
45      }
46      else
47      {
48       PT_DocPosition pos = pf->getPos();
49       getStruxOfTypeFromPosition(listenerId,pos,PTX_Block,&sfh);
50       bStatus1 = pfo->createSpecialChangeRecord(&pcr,pos,blockOffset);
51       if (!(bStatus1))
52	 return (false);
53      }
54      if (!(bStatus1))
55	return (false);
56  }
57}
58