Home | History | Annotate | Download | only in ADT

Lines Matching defs:Optional

1 //===- Optional.h - Simple variant for passing optional values --*- C++ -*-===//
10 // This file provides Optional, a template class modeled in the spirit of
12 // a value can be optional.
31 class Optional {
38 Optional(NoneType) {}
39 explicit Optional() {}
41 Optional(const T &y) : hasVal(true) {
45 Optional(const Optional &O) : hasVal(O.hasVal) {
50 Optional(T &&y) : hasVal(true) {
54 Optional(Optional<T> &&O) : hasVal(O) {
61 ~Optional() {
65 Optional &operator=(T &&y) {
75 Optional &operator=(Optional &&O) {
93 static inline Optional create(const T* y) {
94 return y ? Optional(*y) : Optional();
97 // FIXME: these assignments (& the equivalent const T&/const Optional& ctors)
102 Optional &operator=(const T &y) {
112 Optional &operator=(const Optional &O) {
155 template <typename T> struct isPodLike<Optional<T>> {
156 // An Optional<T> is pod-like if T is.
161 bool operator==(const Optional<T> &X, const Optional<U> &Y) {
168 bool operator!=(const Optional<T> &X, const Optional<U> &Y) {
173 bool operator<(const Optional<T> &X, const Optional<U> &Y) {
180 bool operator<=(const Optional<T> &X, const Optional<U> &Y) {
185 bool operator>(const Optional<T> &X, const Optional<U> &Y) {
190 bool operator>=(const Optional<T> &X, const Optional<U> &Y) {
195 bool operator==(const Optional<T> &X, NoneType) {
200 bool operator==(NoneType, const Optional<T> &X) {
205 bool operator!=(const Optional<T> &X, NoneType) {
210 bool operator!=(NoneType, const Optional<T> &X) {
214 template <typename T> bool operator<(const Optional<T> &X, NoneType) {
218 template <typename T> bool operator<(NoneType, const Optional<T> &X) {
222 template <typename T> bool operator<=(const Optional<T> &X, NoneType) {
226 template <typename T> bool operator<=(NoneType, const Optional<T> &X) {
230 template <typename T> bool operator>(const Optional<T> &X, NoneType) {
234 template <typename T> bool operator>(NoneType, const Optional<T> &X) {
238 template <typename T> bool operator>=(const Optional<T> &X, NoneType) {
242 template <typename T> bool operator>=(NoneType, const Optional<T> &X) {
246 template <typename T> bool operator==(const Optional<T> &X, const T &Y) {
250 template <typename T> bool operator==(const T &X, const Optional<T> &Y) {
254 template <typename T> bool operator!=(const Optional<T> &X, const T &Y) {
258 template <typename T> bool operator!=(const T &X, const Optional<T> &Y) {
262 template <typename T> bool operator<(const Optional<T> &X, const T &Y) {
266 template <typename T> bool operator<(const T &X, const Optional<T> &Y) {
270 template <typename T> bool operator<=(const Optional<T> &X, const T &Y) {
274 template <typename T> bool operator<=(const T &X, const Optional<T> &Y) {
278 template <typename T> bool operator>(const Optional<T> &X, const T &Y) {
282 template <typename T> bool operator>(const T &X, const Optional<T> &Y) {
286 template <typename T> bool operator>=(const Optional<T> &X, const T &Y) {
290 template <typename T> bool operator>=(const T &X, const Optional<T> &Y) {