xref: /aosp_15_r20/external/icu/libicu/cts_headers/sharedbreakiterator.h (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
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