diff options
author | Chris Lattner <sabre@nondot.org> | 2010-07-24 18:47:46 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-07-24 18:47:46 +0000 |
commit | 1ec9e6a5dccbc6042d25f03f224d351f15812aec (patch) | |
tree | 8e0f7e5c97d3016716f7e4568f0b9186105598e6 /include | |
parent | 0cb24daeeaaf5e6104b04195b5f09bcf99904364 (diff) | |
download | external_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.h | 52 |
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 |