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
1327f654740f2a26ad62a5c155af9199af9e69b889claireho#include "unicode/utypes.h"
1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/fieldpos.h"
1550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/fpositer.h"
1650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_BEGIN
1850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// utility FieldPositionHandler
2050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// base class, null implementation
2150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2227f654740f2a26ad62a5c155af9199af9e69b889clairehoclass FieldPositionHandler: public UMemory {
2350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho public:
2450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual ~FieldPositionHandler();
2550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual void addAttribute(int32_t id, int32_t start, int32_t limit);
2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual void shiftLast(int32_t delta);
2750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual UBool isRecording(void);
2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho};
2950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// utility subclass FieldPositionOnlyHandler
3250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass FieldPositionOnlyHandler : public FieldPositionHandler {
3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPosition& pos;
3550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho public:
3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPositionOnlyHandler(FieldPosition& pos);
3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual ~FieldPositionOnlyHandler();
3950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual void addAttribute(int32_t id, int32_t start, int32_t limit);
4150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual void shiftLast(int32_t delta);
4250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual UBool isRecording(void);
4350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho};
4450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho// utility subclass FieldPositionIteratorHandler
4750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
4850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoclass FieldPositionIteratorHandler : public FieldPositionHandler {
4950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPositionIterator* iter; // can be NULL
5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  UVector32* vec;
51fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  UErrorCode status;
5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // Note, we keep a reference to status, so if status is on the stack, we have
5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // to be destroyed before status goes out of scope.  Easiest thing is to
5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // allocate us on the stack in the same (or narrower) scope as status has.
5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  // This attempts to encourage that by blocking heap allocation.
5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  void *operator new(size_t s);
5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  void *operator new[](size_t s);
5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho public:
6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  FieldPositionIteratorHandler(FieldPositionIterator* posIter, UErrorCode& status);
6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  ~FieldPositionIteratorHandler();
6350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual void addAttribute(int32_t id, int32_t start, int32_t limit);
6550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual void shiftLast(int32_t delta);
6650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho  virtual UBool isRecording(void);
6750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho};
6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
6950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_END
7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* !UCONFIG_NO_FORMATTING */
7250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* FPHDLIMP_H */
74