diff options
Diffstat (limited to 'lldb/source/Utility/SharingPtr.cpp')
-rw-r--r-- | lldb/source/Utility/SharingPtr.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/lldb/source/Utility/SharingPtr.cpp b/lldb/source/Utility/SharingPtr.cpp new file mode 100644 index 00000000000..431fdc1b900 --- /dev/null +++ b/lldb/source/Utility/SharingPtr.cpp @@ -0,0 +1,53 @@ +//===---------------------SharingPtr.cpp ------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "SharingPtr.h" + +namespace lldb { + +namespace imp +{ + +template <class T> +inline T +increment(T& t) +{ + return __sync_add_and_fetch(&t, 1); +} + +template <class T> +inline T +decrement(T& t) +{ + return __sync_add_and_fetch(&t, -1); +} + +shared_count::~shared_count() +{ +} + +void +shared_count::add_shared() +{ + increment(shared_owners_); +} + +void +shared_count::release_shared() +{ + if (decrement(shared_owners_) == -1) + { + on_zero_shared(); + delete this; + } +} + +} // imp + +} // namespace lldb |