summaryrefslogtreecommitdiffstats
path: root/lldb/source/Utility/SharingPtr.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2010-06-12 17:45:57 +0000
committerGreg Clayton <gclayton@apple.com>2010-06-12 17:45:57 +0000
commitef59f829e4501db5f2215f8654f879c03fedd0e6 (patch)
tree78bc77475c6f591ed9e75c9893fcd452fb2978cb /lldb/source/Utility/SharingPtr.cpp
parent250a21b79b14ad2757d665bef623fa11faa1c128 (diff)
downloadbcm5719-llvm-ef59f829e4501db5f2215f8654f879c03fedd0e6.tar.gz
bcm5719-llvm-ef59f829e4501db5f2215f8654f879c03fedd0e6.zip
Switched over to using the new lldb::SharingPtr from Howard Hinnant.
We need to put this in LLDB since we need to vend this in our API because our public API uses shared pointers to our private objects. Removed a deprecated file: include/lldb/Host/Types.h Added the new SharingPtr.cpp/.h files into source/Utility. Added a shell script build phase that fixes up all headers in the LLDB.framework. llvm-svn: 105895
Diffstat (limited to 'lldb/source/Utility/SharingPtr.cpp')
-rw-r--r--lldb/source/Utility/SharingPtr.cpp53
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
OpenPOWER on IntegriCloud