1 | // © 2016 and later: Unicode, Inc. and others. |
2 | // License & terms of use: http://www.unicode.org/copyright.html |
3 | /* |
4 | ********************************************************************** |
5 | * Copyright (c) 2002-2014, International Business Machines |
6 | * Corporation and others. All Rights Reserved. |
7 | ********************************************************************** |
8 | * Author: Alan Liu |
9 | * Created: November 11 2002 |
10 | * Since: ICU 2.4 |
11 | ********************************************************************** |
12 | */ |
13 | #ifndef _USTRENUM_H_ |
14 | #define _USTRENUM_H_ |
15 | |
16 | #include "unicode/uenum.h" |
17 | #include "unicode/strenum.h" |
18 | |
19 | //---------------------------------------------------------------------- |
20 | U_NAMESPACE_BEGIN |
21 | |
22 | /** |
23 | * A wrapper to make a UEnumeration into a StringEnumeration. The |
24 | * wrapper adopts the UEnumeration is wraps. |
25 | */ |
26 | class U_COMMON_API UStringEnumeration : public StringEnumeration { |
27 | |
28 | public: |
29 | /** |
30 | * Constructor. This constructor adopts its UEnumeration |
31 | * argument. |
32 | * @param uenum a UEnumeration object. This object takes |
33 | * ownership of 'uenum' and will close it in its destructor. The |
34 | * caller must not call uenum_close on 'uenum' after calling this |
35 | * constructor. |
36 | */ |
37 | UStringEnumeration(UEnumeration* uenum); |
38 | |
39 | /** |
40 | * Destructor. This closes the UEnumeration passed in to the |
41 | * constructor. |
42 | */ |
43 | virtual ~UStringEnumeration(); |
44 | |
45 | /** |
46 | * Return the number of elements that the iterator traverses. |
47 | * @param status the error code. |
48 | * @return number of elements in the iterator. |
49 | */ |
50 | virtual int32_t count(UErrorCode& status) const override; |
51 | |
52 | virtual const char* next(int32_t *resultLength, UErrorCode& status) override; |
53 | |
54 | /** |
55 | * Returns the next element a UnicodeString*. If there are no |
56 | * more elements, returns nullptr. |
57 | * @param status the error code. |
58 | * @return a pointer to the string, or nullptr. |
59 | */ |
60 | virtual const UnicodeString* snext(UErrorCode& status) override; |
61 | |
62 | /** |
63 | * Resets the iterator. |
64 | * @param status the error code. |
65 | */ |
66 | virtual void reset(UErrorCode& status) override; |
67 | |
68 | /** |
69 | * ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class. |
70 | */ |
71 | virtual UClassID getDynamicClassID() const override; |
72 | |
73 | /** |
74 | * ICU4C "poor man's RTTI", returns a UClassID for this ICU class. |
75 | */ |
76 | static UClassID U_EXPORT2 getStaticClassID(); |
77 | |
78 | static UStringEnumeration * U_EXPORT2 fromUEnumeration( |
79 | UEnumeration *enumToAdopt, UErrorCode &status); |
80 | private: |
81 | UEnumeration *uenum; // owned |
82 | }; |
83 | |
84 | U_NAMESPACE_END |
85 | |
86 | #endif |
87 | |
88 | |