Index: native_client_sdk/src/libraries/sdk_util/ref_object.h |
=================================================================== |
--- native_client_sdk/src/libraries/sdk_util/ref_object.h (revision 0) |
+++ native_client_sdk/src/libraries/sdk_util/ref_object.h (revision 0) |
@@ -0,0 +1,49 @@ |
+/* Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#ifndef LIBRARIES_SDK_UTIL_REF_OBJECT |
+#define LIBRARIES_SDK_UTIL_REF_OBJECT |
+ |
+#include <stdlib.h> |
+#include "pthread.h" |
+ |
+class RefObject { |
+ public: |
+ RefObject() { |
+ ref_count_ = 1; |
+ pthread_mutex_init(&lock_, NULL); |
+ } |
+ |
+ int RefCount() const { return ref_count_; } |
+ |
+ void Acquire() { |
+ ref_count_++; |
+ } |
+ |
+ bool Release() { |
+ if (--ref_count_ == 0) { |
+ Destroy(); |
+ delete this; |
+ return false; |
+ } |
+ return true; |
+ } |
+ |
+ protected: |
+ virtual ~RefObject() { |
+ pthread_mutex_destroy(&lock_); |
+ } |
+ |
+ // Override to clean up object when last reference is released. |
+ virtual void Destroy() {} |
+ |
+ pthread_mutex_t lock_; |
+ |
+ private: |
+ int ref_count_; |
+}; |
+ |
+#endif // LIBRARIES_SDK_UTIL_REF_OBJECT |
+ |
Property changes on: native_client_sdk/src/libraries/sdk_util/ref_object.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |