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