[llvm-commits] [llvm] r44161 - in /llvm/trunk: LICENSE.TXT docs/BOOST_LICENSE_1_0.txt include/llvm/ADT/scoped_ptr.h
Chris Lattner
sabre at nondot.org
Wed Nov 14 21:57:07 PST 2007
Author: lattner
Date: Wed Nov 14 23:57:06 2007
New Revision: 44161
URL: http://llvm.org/viewvc/llvm-project?rev=44161&view=rev
Log:
Import the boost scoped_ptr class to LLVM. This patch was prepared by
Cédric Venet.
Added:
llvm/trunk/docs/BOOST_LICENSE_1_0.txt
llvm/trunk/include/llvm/ADT/scoped_ptr.h
Modified:
llvm/trunk/LICENSE.TXT
Modified: llvm/trunk/LICENSE.TXT
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/LICENSE.TXT?rev=44161&r1=44160&r2=44161&view=diff
==============================================================================
--- llvm/trunk/LICENSE.TXT (original)
+++ llvm/trunk/LICENSE.TXT Wed Nov 14 23:57:06 2007
@@ -66,3 +66,6 @@
Autoconf llvm/autoconf
llvm/projects/ModuleMaker/autoconf
llvm/projects/sample/autoconf
+Boost C++ Libraries llvm/include : docs/BOOST_LICENSE_1_0.txt
+
+
Added: llvm/trunk/docs/BOOST_LICENSE_1_0.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/BOOST_LICENSE_1_0.txt?rev=44161&view=auto
==============================================================================
--- llvm/trunk/docs/BOOST_LICENSE_1_0.txt (added)
+++ llvm/trunk/docs/BOOST_LICENSE_1_0.txt Wed Nov 14 23:57:06 2007
@@ -0,0 +1,23 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
Added: llvm/trunk/include/llvm/ADT/scoped_ptr.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/scoped_ptr.h?rev=44161&view=auto
==============================================================================
--- llvm/trunk/include/llvm/ADT/scoped_ptr.h (added)
+++ llvm/trunk/include/llvm/ADT/scoped_ptr.h Wed Nov 14 23:57:06 2007
@@ -0,0 +1,129 @@
+//===- llvm/ADT/scoped_ptr.h - basic smart pointer --------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the scoped_ptr smart pointer: scoped_ptr mimics a built-in
+// pointer except that it guarantees deletion of the object pointed to, either
+// on destruction of the scoped_ptr or via an explicit reset(). scoped_ptr is a
+// simple solution for simple needs.
+//
+//===----------------------------------------------------------------------===//
+//
+// (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
+// Copyright (c) 2001, 2002 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file llvm/docs/BOOST_LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt )
+//
+// http://www.boost.org/libs/smart_ptr/scoped_ptr.htm
+//
+
+#ifndef LLVM_SCOPED_PTR_HPP_INCLUDED
+#define LLVM_SCOPED_PTR_HPP_INCLUDED
+
+#include <cassert>
+
+namespace llvm {
+
+// verify that types are complete for increased safety
+template<class T> inline void checked_delete(T * x) {
+ // intentionally complex - simplification causes regressions
+ typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
+ (void) sizeof(type_must_be_complete);
+ delete x;
+}
+
+// scoped_ptr mimics a built-in pointer except that it guarantees deletion
+// of the object pointed to, either on destruction of the scoped_ptr or via
+// an explicit reset(). scoped_ptr is a simple solution for simple needs;
+// use shared_ptr or std::auto_ptr if your needs are more complex.
+
+template<class T> class scoped_ptr // noncopyable
+{
+private:
+
+ T * ptr;
+
+ scoped_ptr(scoped_ptr const &);
+ scoped_ptr & operator=(scoped_ptr const &);
+
+ typedef scoped_ptr<T> this_type;
+
+public:
+
+ typedef T element_type;
+
+ explicit scoped_ptr(T * p = 0): ptr(p) // never throws
+ {
+ }
+
+ ~scoped_ptr() // never throws
+ {
+ llvm::checked_delete(ptr);
+ }
+
+ void reset(T * p = 0) // never throws
+ {
+ assert( (p == 0 || p != ptr) && "scoped_ptr: self-reset error"); // catch self-reset errors
+ this_type(p).swap(*this);
+ }
+
+ T & operator*() const // never throws
+ {
+ assert(ptr != 0 && "scoped_ptr: Trying to dereference a null pointeur");
+ return *ptr;
+ }
+
+ T * operator->() const // never throws
+ {
+ assert(ptr != 0 && "scoped_ptr: Trying to dereference a null pointeur");
+ return ptr;
+ }
+
+ T * get() const // never throws
+ {
+ return ptr;
+ }
+
+ // implicit conversion to "bool"
+ typedef T * this_type::*unspecified_bool_type;
+
+ operator unspecified_bool_type() const // never throws
+ {
+ return ptr == 0? 0: &this_type::ptr;
+ }
+
+ bool operator! () const // never throws
+ {
+ return ptr == 0;
+ }
+
+ void swap(scoped_ptr & b) // never throws
+ {
+ T * tmp = b.ptr;
+ b.ptr = ptr;
+ ptr = tmp;
+ }
+};
+
+template<class T> inline void swap(scoped_ptr<T> & a, scoped_ptr<T> & b) // never throws
+{
+ a.swap(b);
+}
+
+// get_pointer(p) is a generic way to say p.get()
+
+template<class T> inline T * get_pointer(scoped_ptr<T> const & p)
+{
+ return p.get();
+}
+
+} // namespace llvm
+
+#endif // #ifndef LLVM_SCOPED_PTR_HPP_INCLUDED
More information about the llvm-commits
mailing list