|  | //===- 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 |