1 //===- llvm/ADT/NullablePtr.h - A pointer that allows null ------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file defines and implements the NullablePtr class. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_ADT_NULLABLE_PTR_H 15 #define LLVM_ADT_NULLABLE_PTR_H 16 17 #include <cassert> 18 #include <cstddef> 19 20 namespace llvm { 21 /// NullablePtr pointer wrapper - NullablePtr is used for APIs where a 22 /// potentially-null pointer gets passed around that must be explicitly handled 23 /// in lots of places. By putting a wrapper around the null pointer, it makes 24 /// it more likely that the null pointer case will be handled correctly. 25 template<class T> 26 class NullablePtr { 27 T *Ptr; 28 public: 29 NullablePtr(T *P = 0) : Ptr(P) {} 30 31 bool isNull() const { return Ptr == 0; } 32 bool isNonNull() const { return Ptr != 0; } 33 34 /// get - Return the pointer if it is non-null. 35 const T *get() const { 36 assert(Ptr && "Pointer wasn't checked for null!"); 37 return Ptr; 38 } 39 40 /// get - Return the pointer if it is non-null. 41 T *get() { 42 assert(Ptr && "Pointer wasn't checked for null!"); 43 return Ptr; 44 } 45 46 T *getPtrOrNull() { return Ptr; } 47 const T *getPtrOrNull() const { return Ptr; } 48 }; 49 50 } // end namespace llvm 51 52 #endif 53