]> git.saurik.com Git - apple/icu.git/blob - icuSources/i18n/fphdlimp.h
ICU-491.11.1.tar.gz
[apple/icu.git] / icuSources / i18n / fphdlimp.h
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
17 U_NAMESPACE_BEGIN
18
19 // utility FieldPositionHandler
20 // base class, null implementation
21
22 class 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
33 class 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
48 class 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
69 U_NAMESPACE_END
70
71 #endif /* !UCONFIG_NO_FORMATTING */
72
73 #endif /* FPHDLIMP_H */