xref: /netbsd-src/external/gpl3/gcc/dist/gcc/d/dmd/root/optional.h (revision b1e838363e3c6fc78a55519254d99869742dd33c)
1 #pragma once
2 
3 /**
4  * Optional implementation.
5  *
6  * Copyright:   Copyright (C) 1999-2022 by The D Language Foundation, All Rights Reserved
7  * Authors:     $(LINK2 https://www.digitalmars.com, Walter Bright)
8  * License:     $(LINK2 https://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
9  * Source:      $(LINK2 https://github.com/dlang/dmd/blob/master/src/dmd/root/optional.h, root/_optional.h)
10  * Documentation:  https://dlang.org/phobos/dmd_root_optional.html
11  * Coverage:    https://codecov.io/gh/dlang/dmd/src/master/src/dmd/root/optional.h
12  */
13 
14 /// Optional type that is either `empty` or contains a value of type `T`
15 template<typename T>
16 struct Optional final
17 {
18 private:
19     /** the value (if present) **/
20     T value;
21 
22     /** whether `value` is set **/
23     bool present;
24 
25 public:
26     /** Creates an `Optional` with the given value **/
27     Optional(T);
28 
29     /** Creates an `Optional` with the given value **/
30     static Optional<T> create(T);
31 
32     /** Checks whether this `Optional` contains a value **/
33     bool isPresent() const;
34 
35     /** Checks whether this `Optional` does not contain a value **/
36     bool isEmpty() const;
37 
38     /** Returns: The value if present **/
39     T get();
40 
41     bool hasValue(const T) const;
42 };
43