1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others. 2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html 3*0e209d39SAndroid Build Coastguard Worker /* 4*0e209d39SAndroid Build Coastguard Worker ****************************************************************************** 5*0e209d39SAndroid Build Coastguard Worker * Copyright (C) 2014, International Business Machines 6*0e209d39SAndroid Build Coastguard Worker * Corporation and others. All Rights Reserved. 7*0e209d39SAndroid Build Coastguard Worker ****************************************************************************** 8*0e209d39SAndroid Build Coastguard Worker * sharedbreakiterator.h 9*0e209d39SAndroid Build Coastguard Worker */ 10*0e209d39SAndroid Build Coastguard Worker 11*0e209d39SAndroid Build Coastguard Worker #ifndef __SHARED_BREAKITERATOR_H__ 12*0e209d39SAndroid Build Coastguard Worker #define __SHARED_BREAKITERATOR_H__ 13*0e209d39SAndroid Build Coastguard Worker 14*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h" 15*0e209d39SAndroid Build Coastguard Worker #include "sharedobject.h" 16*0e209d39SAndroid Build Coastguard Worker 17*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_BREAK_ITERATION 18*0e209d39SAndroid Build Coastguard Worker 19*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN 20*0e209d39SAndroid Build Coastguard Worker 21*0e209d39SAndroid Build Coastguard Worker class BreakIterator; 22*0e209d39SAndroid Build Coastguard Worker 23*0e209d39SAndroid Build Coastguard Worker // SharedBreakIterator encapsulates a shared BreakIterator. Because 24*0e209d39SAndroid Build Coastguard Worker // BreakIterator has mutable semantics, clients must ensure that all uses 25*0e209d39SAndroid Build Coastguard Worker // of a particular shared BreakIterator is protected by the same mutex 26*0e209d39SAndroid Build Coastguard Worker // ensuring that only one thread at a time gets access to that shared 27*0e209d39SAndroid Build Coastguard Worker // BreakIterator. Clients can accomplish this by creating a mutex for all 28*0e209d39SAndroid Build Coastguard Worker // uses of break iterator within a particular class. Then objects of that 29*0e209d39SAndroid Build Coastguard Worker // class may then freely share break iterators among themselves. However, 30*0e209d39SAndroid Build Coastguard Worker // these shared break iterators must never be exposed outside of that class. 31*0e209d39SAndroid Build Coastguard Worker class U_I18N_API SharedBreakIterator : public SharedObject { 32*0e209d39SAndroid Build Coastguard Worker public: 33*0e209d39SAndroid Build Coastguard Worker SharedBreakIterator(BreakIterator *biToAdopt); 34*0e209d39SAndroid Build Coastguard Worker virtual ~SharedBreakIterator(); 35*0e209d39SAndroid Build Coastguard Worker get()36*0e209d39SAndroid Build Coastguard Worker BreakIterator *get() const { return ptr; } 37*0e209d39SAndroid Build Coastguard Worker BreakIterator *operator->() const { return ptr; } 38*0e209d39SAndroid Build Coastguard Worker BreakIterator &operator*() const { return *ptr; } 39*0e209d39SAndroid Build Coastguard Worker private: 40*0e209d39SAndroid Build Coastguard Worker BreakIterator *ptr; 41*0e209d39SAndroid Build Coastguard Worker SharedBreakIterator(const SharedBreakIterator &) = delete; 42*0e209d39SAndroid Build Coastguard Worker SharedBreakIterator &operator=(const SharedBreakIterator &) = delete; 43*0e209d39SAndroid Build Coastguard Worker }; 44*0e209d39SAndroid Build Coastguard Worker 45*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END 46*0e209d39SAndroid Build Coastguard Worker 47*0e209d39SAndroid Build Coastguard Worker #endif 48*0e209d39SAndroid Build Coastguard Worker 49*0e209d39SAndroid Build Coastguard Worker #endif 50