fphdlimp.h revision 50294ead5e5d23f5bbfed76e00e6b510bd41eee1
150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/*
250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*******************************************************************************
350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* Copyright (C) 2009-2010, International Business Machines Corporation and    *
450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* others. All Rights Reserved.                                                *
550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*******************************************************************************
650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*/
750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#ifndef FPHDLIMP_H
950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define FPHDLIMP_H
1050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FORMATTING
1250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/fieldpos.h"
1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/fpositer.h"
1550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_BEGIN
1750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// utility FieldPositionHandler
1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// base class, null implementation
2050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass FieldPositionHandler {
2250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho public:
2350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual ~FieldPositionHandler();
2450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual void addAttribute(int32_t id, int32_t start, int32_t limit);
2550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual void shiftLast(int32_t delta);
2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual UBool isRecording(void);
2750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho};
2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// utility subclass FieldPositionOnlyHandler
3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass FieldPositionOnlyHandler : public FieldPositionHandler {
3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPosition& pos;
3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho public:
3650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPositionOnlyHandler(FieldPosition& pos);
3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual ~FieldPositionOnlyHandler();
3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual void addAttribute(int32_t id, int32_t start, int32_t limit);
4050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual void shiftLast(int32_t delta);
4150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual UBool isRecording(void);
4250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho};
4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// utility subclass FieldPositionIteratorHandler
4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass FieldPositionIteratorHandler : public FieldPositionHandler {
4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPositionIterator* iter; // can be NULL
4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UVector32* vec;
5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UErrorCode status;
5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // Note, we keep a reference to status, so if status is on the stack, we have
5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // to be destroyed before status goes out of scope.  Easiest thing is to
5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // allocate us on the stack in the same (or narrower) scope as status has.
5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // This attempts to encourage that by blocking heap allocation.
5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  void *operator new(size_t s);
5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  void *operator new[](size_t s);
5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho public:
6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPositionIteratorHandler(FieldPositionIterator* posIter, UErrorCode& status);
6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ~FieldPositionIteratorHandler();
6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual void addAttribute(int32_t id, int32_t start, int32_t limit);
6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual void shiftLast(int32_t delta);
6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual UBool isRecording(void);
6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho};
6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_END
6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* !UCONFIG_NO_FORMATTING */
7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
7250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* FPHDLIMP_H */
73