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