| Index: base/lock_ptr.h
|
| diff --git a/base/lock_ptr.h b/base/lock_ptr.h
|
| deleted file mode 100644
|
| index 74c424ab66de12ea49d638b1c20d8d17a263ce59..0000000000000000000000000000000000000000
|
| --- a/base/lock_ptr.h
|
| +++ /dev/null
|
| @@ -1,128 +0,0 @@
|
| -// Copyright 2003-2009 Google Inc.
|
| -//
|
| -// Licensed under the Apache License, Version 2.0 (the "License");
|
| -// you may not use this file except in compliance with the License.
|
| -// You may obtain a copy of the License at
|
| -//
|
| -// http://www.apache.org/licenses/LICENSE-2.0
|
| -//
|
| -// Unless required by applicable law or agreed to in writing, software
|
| -// distributed under the License is distributed on an "AS IS" BASIS,
|
| -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -// See the License for the specific language governing permissions and
|
| -// limitations under the License.
|
| -// ========================================================================
|
| -//
|
| -// lock_ptr.h
|
| -//
|
| -// A smart pointer to manage synchronized access to a shared resource.
|
| -//
|
| -// LockPtr provides a simple and concise syntax for accessing a
|
| -// shared resource. The LockPtr is a smart pointer and provides
|
| -// pointer operators -> and *. LockPtr does not have copy semantics and it is
|
| -// not intended to be stored in containers. Instead, instances of LockPtr are
|
| -// usually unamed or short-lived named variables.
|
| -//
|
| -// LockPtr uses an external lock, it acquires the lock in the constructor, and
|
| -// it guarantees the lock is released in the destructor.
|
| -//
|
| -// Since different types of locks have different method names, such as
|
| -// Enter/Exit or Lock/Unlock, etc, LockPtr uses an external customizable policy
|
| -// to bind to different operations. The external policy is a set of template
|
| -// functions that can be specialized for different types of locks, if needed.
|
| -// Think of this policy as an adapter between the lock type and the LockPtr.
|
| -//
|
| -// Usage: let's assume that we have the type below:
|
| -//
|
| -// class X {
|
| -// public:
|
| -// X() : i_(0) {}
|
| -// void f() {}
|
| -//
|
| -// private:
|
| -// int i_;
|
| -//
|
| -// friend int LockPtrTest(int, int);
|
| -// };
|
| -//
|
| -// We have an instance of this type and an external lock instance to serialize
|
| -// the access to the X instance.
|
| -//
|
| -// Using LockPtr, the code is:
|
| -//
|
| -// X x;
|
| -// LLock local_lock;
|
| -//
|
| -// LockPtr<X>(x, local_lock)->f();
|
| -//
|
| -// For more example, please see the unit test of the module.
|
| -
|
| -
|
| -
|
| -#ifndef OMAHA_COMMON_LOCK_PTR_H_
|
| -#define OMAHA_COMMON_LOCK_PTR_H_
|
| -
|
| -#include "omaha/base/debug.h"
|
| -
|
| -namespace omaha {
|
| -
|
| -template <typename T>
|
| -class LockPtr {
|
| - public:
|
| - template <typename U>
|
| - LockPtr(T& obj, U& lock)
|
| - : pobj_(&obj),
|
| - plock_(&lock),
|
| - punlock_method_(&LockPtr::Unlock<U>) {
|
| - AcquireLock(lock);
|
| - }
|
| -
|
| - ~LockPtr() {
|
| - ASSERT1(punlock_method_);
|
| - (this->*punlock_method_)();
|
| - }
|
| -
|
| - // Pointer behavior
|
| - T& operator*() {
|
| - ASSERT1(pobj_);
|
| - return *pobj_;
|
| - }
|
| -
|
| - T* operator->() {
|
| - return pobj_;
|
| - }
|
| -
|
| - private:
|
| - // template method to restore the type of the lock and to call the
|
| - // release policy for the lock
|
| - template <class U>
|
| - void Unlock() {
|
| - ASSERT1(plock_);
|
| - U& lock = *(static_cast<U*>(plock_));
|
| - ReleaseLock(lock);
|
| - }
|
| -
|
| - T* pobj_; // managed shared object
|
| - void* plock_; // type-less lock to control access to pobj_
|
| -
|
| - void (LockPtr::*punlock_method_)(); // the address of the method to Unlock
|
| -
|
| - DISALLOW_EVIL_CONSTRUCTORS(LockPtr);
|
| -};
|
| -
|
| -// template functions to define the policy of acquiring and releasing
|
| -// the locks.
|
| -template <class Lock> inline void AcquireLock(Lock& lock) { lock.Lock(); }
|
| -template <class Lock> inline void ReleaseLock(Lock& lock) { lock.Unlock(); }
|
| -
|
| -// specialization of policy for diferent types of locks.
|
| -#include "omaha/base/synchronized.h"
|
| -template <> void inline AcquireLock(CriticalSection& cs) { cs.Enter(); }
|
| -template <> void inline ReleaseLock(CriticalSection& cs) { cs.Exit(); }
|
| -
|
| -// Add more policy specializations below, if needed.
|
| -
|
| -} // namespace omaha
|
| -
|
| -#endif // OMAHA_COMMON_LOCK_PTR_H_
|
| -
|
|
|