• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 **********************************************************************
3 * Copyright (c) 2002-2006, International Business Machines
4 * Corporation and others.  All Rights Reserved.
5 **********************************************************************
6 * Author: Alan Liu
7 * Created: November 11 2002
8 * Since: ICU 2.4
9 **********************************************************************
10 */
11 #ifndef _USTRENUM_H_
12 #define _USTRENUM_H_
13 
14 #include "unicode/uenum.h"
15 #include "unicode/strenum.h"
16 
17 /**
18  * Given a StringEnumeration, wrap it in a UEnumeration.  The
19  * StringEnumeration is adopted; after this call, the caller must not
20  * delete it (regardless of error status).
21  */
22 U_CAPI UEnumeration* U_EXPORT2
23 uenum_openStringEnumeration(U_NAMESPACE_QUALIFIER StringEnumeration* adopted, UErrorCode* ec);
24 
25 /**
26  * Given an array of const char* strings (invariant chars only),
27  * return a UEnumeration.  Must have strings[i] != 0 for i in
28  * 0..count-1.
29  */
30 U_CAPI UEnumeration* U_EXPORT2
31 uenum_openCharStringsEnumeration(const char** strings, int32_t count,
32                                  UErrorCode* ec);
33 
34 //----------------------------------------------------------------------
35 U_NAMESPACE_BEGIN
36 
37 /**
38  * A wrapper to make a UEnumeration into a StringEnumeration.  The
39  * wrapper adopts the UEnumeration is wraps.
40  */
41 class U_COMMON_API UStringEnumeration : public StringEnumeration {
42 
43 public:
44     /**
45      * Constructor.  This constructor adopts its UEnumeration
46      * argument.
47      * @param uenum a UEnumeration object.  This object takes
48      * ownership of 'uenum' and will close it in its destructor.  The
49      * caller must not call uenum_close on 'uenum' after calling this
50      * constructor.
51      */
52     UStringEnumeration(UEnumeration* uenum);
53 
54     /**
55      * Destructor.  This closes the UEnumeration passed in to the
56      * constructor.
57      */
58     virtual ~UStringEnumeration();
59 
60     /**
61      * Return the number of elements that the iterator traverses.
62      * @param status the error code.
63      * @return number of elements in the iterator.
64      */
65     virtual int32_t count(UErrorCode& status) const;
66 
67     /**
68      * Returns the next element a UnicodeString*.  If there are no
69      * more elements, returns NULL.
70      * @param status the error code.
71      * @return a pointer to the string, or NULL.
72      */
73     virtual const UnicodeString* snext(UErrorCode& status);
74 
75     /**
76      * Resets the iterator.
77      * @param status the error code.
78      */
79     virtual void reset(UErrorCode& status);
80 
81     /**
82      * ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class.
83      */
84     virtual UClassID getDynamicClassID() const;
85 
86     /**
87      * ICU4C "poor man's RTTI", returns a UClassID for this ICU class.
88      */
89     static UClassID U_EXPORT2 getStaticClassID();
90 
91 private:
92     UEnumeration *uenum; // owned
93 };
94 
95 U_NAMESPACE_END
96 
97 #endif
98 
99