1/* 2******************************************************************************* 3* Copyright (C) 2009-2010, International Business Machines Corporation and * 4* others. All Rights Reserved. * 5******************************************************************************* 6*/ 7 8#ifndef FPHDLIMP_H 9#define FPHDLIMP_H 10 11#if !UCONFIG_NO_FORMATTING 12 13#include "unicode/utypes.h" 14#include "unicode/fieldpos.h" 15#include "unicode/fpositer.h" 16 17U_NAMESPACE_BEGIN 18 19// utility FieldPositionHandler 20// base class, null implementation 21 22class FieldPositionHandler: public UMemory { 23 public: 24 virtual ~FieldPositionHandler(); 25 virtual void addAttribute(int32_t id, int32_t start, int32_t limit); 26 virtual void shiftLast(int32_t delta); 27 virtual UBool isRecording(void); 28}; 29 30 31// utility subclass FieldPositionOnlyHandler 32 33class FieldPositionOnlyHandler : public FieldPositionHandler { 34 FieldPosition& pos; 35 36 public: 37 FieldPositionOnlyHandler(FieldPosition& pos); 38 virtual ~FieldPositionOnlyHandler(); 39 40 virtual void addAttribute(int32_t id, int32_t start, int32_t limit); 41 virtual void shiftLast(int32_t delta); 42 virtual UBool isRecording(void); 43}; 44 45 46// utility subclass FieldPositionIteratorHandler 47 48class FieldPositionIteratorHandler : public FieldPositionHandler { 49 FieldPositionIterator* iter; // can be NULL 50 UVector32* vec; 51 UErrorCode status; 52 53 // Note, we keep a reference to status, so if status is on the stack, we have 54 // to be destroyed before status goes out of scope. Easiest thing is to 55 // allocate us on the stack in the same (or narrower) scope as status has. 56 // This attempts to encourage that by blocking heap allocation. 57 void *operator new(size_t s); 58 void *operator new[](size_t s); 59 60 public: 61 FieldPositionIteratorHandler(FieldPositionIterator* posIter, UErrorCode& status); 62 ~FieldPositionIteratorHandler(); 63 64 virtual void addAttribute(int32_t id, int32_t start, int32_t limit); 65 virtual void shiftLast(int32_t delta); 66 virtual UBool isRecording(void); 67}; 68 69U_NAMESPACE_END 70 71#endif /* !UCONFIG_NO_FORMATTING */ 72 73#endif /* FPHDLIMP_H */ 74