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