[llvm-commits] [llvm] r109348 - /llvm/trunk/include/llvm/ADT/NullablePtr.h

Chris Lattner sabre at nondot.org
Sat Jul 24 11:47:46 PDT 2010


Author: lattner
Date: Sat Jul 24 13:47:46 2010
New Revision: 109348

URL: http://llvm.org/viewvc/llvm-project?rev=109348&view=rev
Log:
add a new NullablePtr class which makes it more obvious in API
that a pointer can be null, forcing clients to think about it.

Added:
    llvm/trunk/include/llvm/ADT/NullablePtr.h

Added: llvm/trunk/include/llvm/ADT/NullablePtr.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/NullablePtr.h?rev=109348&view=auto
==============================================================================
--- llvm/trunk/include/llvm/ADT/NullablePtr.h (added)
+++ llvm/trunk/include/llvm/ADT/NullablePtr.h Sat Jul 24 13:47:46 2010
@@ -0,0 +1,52 @@
+//===- llvm/ADT/NullablePtr.h - A pointer that allows null ------*- 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 and implements the NullablePtr class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_ADT_NULLABLE_PTR_H
+#define LLVM_ADT_NULLABLE_PTR_H
+
+#include <cassert>
+#include <cstddef>
+
+namespace llvm {
+/// NullablePtr pointer wrapper - NullablePtr is used for APIs where a
+/// potentially-null pointer gets passed around that must be explicitly handled
+/// in lots of places.  By putting a wrapper around the null pointer, it makes
+/// it more likely that the null pointer case will be handled correctly.
+template<class T>
+class NullablePtr {
+  T *Ptr;
+public:
+  NullablePtr(T *P = 0) : Ptr(P) {}
+  
+  bool isNull() const { return Ptr == 0; }
+  bool isNonNull() const { return Ptr != 0; }
+
+  /// get - Return the pointer if it is non-null.
+  const T *get() const {
+    assert(Ptr && "Pointer wasn't checked for null!");
+    return Ptr;
+  }
+
+  /// get - Return the pointer if it is non-null.
+  T *get() {
+    assert(Ptr && "Pointer wasn't checked for null!");
+    return Ptr;
+  }
+  
+  T *getPtrOrNull() { return Ptr; }
+  const T *getPtrOrNull() const { return Ptr; }
+};
+  
+} // end namespace llvm
+
+#endif





More information about the llvm-commits mailing list