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