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 20namespace 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. 25template<class T> 26class NullablePtr { 27 T *Ptr; 28public: 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