Index: icu46/source/common/servnotf.h |
=================================================================== |
--- icu46/source/common/servnotf.h (revision 0) |
+++ icu46/source/common/servnotf.h (revision 0) |
@@ -0,0 +1,124 @@ |
+/** |
+ ******************************************************************************* |
+ * Copyright (C) 2001-2004, International Business Machines Corporation and * |
+ * others. All Rights Reserved. * |
+ ******************************************************************************* |
+ */ |
+#ifndef ICUNOTIF_H |
+#define ICUNOTIF_H |
+ |
+#include "unicode/utypes.h" |
+ |
+#if UCONFIG_NO_SERVICE |
+ |
+U_NAMESPACE_BEGIN |
+ |
+/* |
+ * Allow the declaration of APIs with pointers to BreakIterator |
+ * even when break iteration is removed from the build. |
+ */ |
+class ICUNotifier; |
+ |
+U_NAMESPACE_END |
+ |
+#else |
+ |
+#include "unicode/uobject.h" |
+#include "unicode/unistr.h" |
+ |
+#include "mutex.h" |
+#include "uvector.h" |
+ |
+U_NAMESPACE_BEGIN |
+ |
+class U_COMMON_API EventListener : public UObject { |
+public: |
+ virtual ~EventListener(); |
+ |
+public: |
+ static UClassID U_EXPORT2 getStaticClassID(); |
+ |
+ virtual UClassID getDynamicClassID() const; |
+ |
+public: |
+#ifdef SERVICE_DEBUG |
+ virtual UnicodeString& debug(UnicodeString& result) const { |
+ return debugClass(result); |
+ } |
+ |
+ virtual UnicodeString& debugClass(UnicodeString& result) const { |
+ return result.append("Key"); |
+ } |
+#endif |
+}; |
+ |
+/** |
+ * <p>Abstract implementation of a notification facility. Clients add |
+ * EventListeners with addListener and remove them with removeListener. |
+ * Notifiers call notifyChanged when they wish to notify listeners. |
+ * This queues the listener list on the notification thread, which |
+ * eventually dequeues the list and calls notifyListener on each |
+ * listener in the list.</p> |
+ * |
+ * <p>Subclasses override acceptsListener and notifyListener |
+ * to add type-safe notification. AcceptsListener should return |
+ * true if the listener is of the appropriate type; ICUNotifier |
+ * itself will ensure the listener is non-null and that the |
+ * identical listener is not already registered with the Notifier. |
+ * NotifyListener should cast the listener to the appropriate |
+ * type and call the appropriate method on the listener. |
+ */ |
+ |
+class U_COMMON_API ICUNotifier : public UMemory { |
+private: UMTX notifyLock; |
+private: UVector* listeners; |
+ |
+public: |
+ ICUNotifier(void); |
+ |
+ virtual ~ICUNotifier(void); |
+ |
+ /** |
+ * Add a listener to be notified when notifyChanged is called. |
+ * The listener must not be null. AcceptsListener must return |
+ * true for the listener. Attempts to concurrently |
+ * register the identical listener more than once will be |
+ * silently ignored. |
+ */ |
+ virtual void addListener(const EventListener* l, UErrorCode& status); |
+ |
+ /** |
+ * Stop notifying this listener. The listener must |
+ * not be null. Attemps to remove a listener that is |
+ * not registered will be silently ignored. |
+ */ |
+ virtual void removeListener(const EventListener* l, UErrorCode& status); |
+ |
+ /** |
+ * ICU doesn't spawn its own threads. All listeners are notified in |
+ * the thread of the caller. Misbehaved listeners can therefore |
+ * indefinitely block the calling thread. Callers should beware of |
+ * deadlock situations. |
+ */ |
+ virtual void notifyChanged(void); |
+ |
+protected: |
+ /** |
+ * Subclasses implement this to return TRUE if the listener is |
+ * of the appropriate type. |
+ */ |
+ virtual UBool acceptsListener(const EventListener& l) const = 0; |
+ |
+ /** |
+ * Subclasses implement this to notify the listener. |
+ */ |
+ virtual void notifyListener(EventListener& l) const = 0; |
+}; |
+ |
+U_NAMESPACE_END |
+ |
+/* UCONFIG_NO_SERVICE */ |
+#endif |
+ |
+/* ICUNOTIF_H */ |
+#endif |
Property changes on: icu46/source/common/servnotf.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |