| // © 2016 and later: Unicode, Inc. and others. |
| // License & terms of use: http://www.unicode.org/copyright.html |
| /* |
| ****************************************************************************** |
| * Copyright (C) 2014, International Business Machines |
| * Corporation and others. All Rights Reserved. |
| ****************************************************************************** |
| * sharedbreakiterator.h |
| */ |
| |
| #ifndef __SHARED_BREAKITERATOR_H__ |
| #define __SHARED_BREAKITERATOR_H__ |
| |
| #include "unicode/utypes.h" |
| #include "sharedobject.h" |
| |
| #if !UCONFIG_NO_BREAK_ITERATION |
| |
| U_NAMESPACE_BEGIN |
| |
| class BreakIterator; |
| |
| // SharedBreakIterator encapsulates a shared BreakIterator. Because |
| // BreakIterator has mutable semantics, clients must ensure that all uses |
| // of a particular shared BreakIterator is protected by the same mutex |
| // ensuring that only one thread at a time gets access to that shared |
| // BreakIterator. Clients can accomplish this by creating a mutex for all |
| // uses of break iterator within a particular class. Then objects of that |
| // class may then freely share break iterators among themselves. However, |
| // these shared break iterators must never be exposed outside of that class. |
| class U_I18N_API SharedBreakIterator : public SharedObject { |
| public: |
| SharedBreakIterator(BreakIterator *biToAdopt); |
| virtual ~SharedBreakIterator(); |
| |
| BreakIterator *get() const { return ptr; } |
| BreakIterator *operator->() const { return ptr; } |
| BreakIterator &operator*() const { return *ptr; } |
| private: |
| BreakIterator *ptr; |
| SharedBreakIterator(const SharedBreakIterator &); |
| SharedBreakIterator &operator=(const SharedBreakIterator &); |
| }; |
| |
| U_NAMESPACE_END |
| |
| #endif |
| |
| #endif |