| // © 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 |