From 53790d2a0c50915d8cec71df3e89cd24d887b2fe Mon Sep 17 00:00:00 2001 From: Jonathan Kew Date: Tue, 4 Mar 2008 13:26:36 +0000 Subject: update icu-xetex to 3.8.1-based code from xetex repository git-svn-id: svn://tug.org/texlive/trunk@6842 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/libs/icu-xetex/common/mutex.h | 85 ++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Build/source/libs/icu-xetex/common/mutex.h (limited to 'Build/source/libs/icu-xetex/common/mutex.h') diff --git a/Build/source/libs/icu-xetex/common/mutex.h b/Build/source/libs/icu-xetex/common/mutex.h new file mode 100644 index 00000000000..26aefbf86b5 --- /dev/null +++ b/Build/source/libs/icu-xetex/common/mutex.h @@ -0,0 +1,85 @@ +/* +****************************************************************************** +* +* Copyright (C) 1997-2003, International Business Machines +* Corporation and others. All Rights Reserved. +* +****************************************************************************** +*/ +//---------------------------------------------------------------------------- +// File: mutex.h +// +// Lightweight C++ wrapper for umtx_ C mutex functions +// +// Author: Alan Liu 1/31/97 +// History: +// 06/04/97 helena Updated setImplementation as per feedback from 5/21 drop. +// 04/07/1999 srl refocused as a thin wrapper +// +//---------------------------------------------------------------------------- +#ifndef MUTEX_H +#define MUTEX_H + +#include "unicode/utypes.h" +#include "unicode/uobject.h" +#include "umutex.h" + +U_NAMESPACE_BEGIN + +//---------------------------------------------------------------------------- +// Code within that accesses shared static or global data should +// should instantiate a Mutex object while doing so. You should make your own +// private mutex where possible. + +// For example: +// +// UMTX myMutex; +// +// int InitializeMyMutex() +// { +// umtx_init( &myMutex ); +// return 0; +// } +// +// static int initializeMyMutex = InitializeMyMutex(); +// +// void Function(int arg1, int arg2) +// { +// static Object* foo; // Shared read-write object +// Mutex mutex(&myMutex); // or no args for the global lock +// foo->Method(); +// // When 'mutex' goes out of scope and gets destroyed here, the lock is released +// } +// +// Note: Do NOT use the form 'Mutex mutex();' as that merely forward-declares a function +// returning a Mutex. This is a common mistake which silently slips through the +// compiler!! +// + +class U_COMMON_API Mutex : public UMemory { +public: + inline Mutex(UMTX *mutex = NULL); + inline ~Mutex(); + +private: + UMTX *fMutex; + + Mutex(const Mutex &other); // forbid copying of this class + Mutex &operator=(const Mutex &other); // forbid copying of this class +}; + +inline Mutex::Mutex(UMTX *mutex) + : fMutex(mutex) +{ + umtx_lock(fMutex); +} + +inline Mutex::~Mutex() +{ + umtx_unlock(fMutex); +} + +U_NAMESPACE_END + +#endif //_MUTEX_ +//eof -- cgit v1.2.3