• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
74