1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/intl/icu/source/i18n/fphdlimp.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,73 @@ 1.4 +/* 1.5 +******************************************************************************* 1.6 +* Copyright (C) 2009-2010, International Business Machines Corporation and * 1.7 +* others. All Rights Reserved. * 1.8 +******************************************************************************* 1.9 +*/ 1.10 + 1.11 +#ifndef FPHDLIMP_H 1.12 +#define FPHDLIMP_H 1.13 + 1.14 +#if !UCONFIG_NO_FORMATTING 1.15 + 1.16 +#include "unicode/utypes.h" 1.17 +#include "unicode/fieldpos.h" 1.18 +#include "unicode/fpositer.h" 1.19 + 1.20 +U_NAMESPACE_BEGIN 1.21 + 1.22 +// utility FieldPositionHandler 1.23 +// base class, null implementation 1.24 + 1.25 +class FieldPositionHandler: public UMemory { 1.26 + public: 1.27 + virtual ~FieldPositionHandler(); 1.28 + virtual void addAttribute(int32_t id, int32_t start, int32_t limit); 1.29 + virtual void shiftLast(int32_t delta); 1.30 + virtual UBool isRecording(void); 1.31 +}; 1.32 + 1.33 + 1.34 +// utility subclass FieldPositionOnlyHandler 1.35 + 1.36 +class FieldPositionOnlyHandler : public FieldPositionHandler { 1.37 + FieldPosition& pos; 1.38 + 1.39 + public: 1.40 + FieldPositionOnlyHandler(FieldPosition& pos); 1.41 + virtual ~FieldPositionOnlyHandler(); 1.42 + 1.43 + virtual void addAttribute(int32_t id, int32_t start, int32_t limit); 1.44 + virtual void shiftLast(int32_t delta); 1.45 + virtual UBool isRecording(void); 1.46 +}; 1.47 + 1.48 + 1.49 +// utility subclass FieldPositionIteratorHandler 1.50 + 1.51 +class FieldPositionIteratorHandler : public FieldPositionHandler { 1.52 + FieldPositionIterator* iter; // can be NULL 1.53 + UVector32* vec; 1.54 + UErrorCode status; 1.55 + 1.56 + // Note, we keep a reference to status, so if status is on the stack, we have 1.57 + // to be destroyed before status goes out of scope. Easiest thing is to 1.58 + // allocate us on the stack in the same (or narrower) scope as status has. 1.59 + // This attempts to encourage that by blocking heap allocation. 1.60 + void *operator new(size_t s); 1.61 + void *operator new[](size_t s); 1.62 + 1.63 + public: 1.64 + FieldPositionIteratorHandler(FieldPositionIterator* posIter, UErrorCode& status); 1.65 + ~FieldPositionIteratorHandler(); 1.66 + 1.67 + virtual void addAttribute(int32_t id, int32_t start, int32_t limit); 1.68 + virtual void shiftLast(int32_t delta); 1.69 + virtual UBool isRecording(void); 1.70 +}; 1.71 + 1.72 +U_NAMESPACE_END 1.73 + 1.74 +#endif /* !UCONFIG_NO_FORMATTING */ 1.75 + 1.76 +#endif /* FPHDLIMP_H */