aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-07-24 18:47:46 +0000
committerChris Lattner <sabre@nondot.org>2010-07-24 18:47:46 +0000
commit1ec9e6a5dccbc6042d25f03f224d351f15812aec (patch)
tree8e0f7e5c97d3016716f7e4568f0b9186105598e6 /include
parent0cb24daeeaaf5e6104b04195b5f09bcf99904364 (diff)
downloadexternal_llvm-1ec9e6a5dccbc6042d25f03f224d351f15812aec.zip
external_llvm-1ec9e6a5dccbc6042d25f03f224d351f15812aec.tar.gz
external_llvm-1ec9e6a5dccbc6042d25f03f224d351f15812aec.tar.bz2
add a new NullablePtr class which makes it more obvious in API
that a pointer can be null, forcing clients to think about it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109348 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/ADT/NullablePtr.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/include/llvm/ADT/NullablePtr.h b/include/llvm/ADT/NullablePtr.h
new file mode 100644
index 0000000..a9c47a1
--- /dev/null
+++ b/include/llvm/ADT/NullablePtr.h
@@ -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