F´ Flight Software - C/C++ Documentation  devel
A framework for building embedded system applications to NASA flight quality standards.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Option.hpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title Option.hpp
3 // \author Rob Bocchino
4 // \brief An option type for unit testing
5 //
6 // \copyright
7 // Copyright (C) 2023 California Institute of Technology.
8 // ALL RIGHTS RESERVED. United States Government Sponsorship
9 // acknowledged. Any commercial use must be negotiated with the Office
10 // of Technology Transfer at the California Institute of Technology.
11 // ======================================================================
12 
13 #ifndef TestUtils_Option_HPP
14 #define TestUtils_Option_HPP
15 
16 namespace TestUtils {
17 
19 template <typename T, T noValue = T()>
20 class Option {
21  private:
22  enum class State { VALUE, NO_VALUE };
23 
24  public:
25  explicit Option(T value) : state(State::VALUE), value(value) {}
26  Option() : state(State::NO_VALUE), value(noValue) {}
27 
28  public:
29  static Option<T> some(T value) { return Option(value); }
30  static constexpr Option<T> none() { return Option(); }
31 
32  public:
33  bool hasValue() const { return this->state == State::VALUE; }
34  void set(T value) {
35  this->state = State::VALUE;
36  this->value = value;
37  }
38  void clear() { this->state = State::NO_VALUE; }
39  T get() const {
40  FW_ASSERT(this->hasValue());
41  return this->value;
42  }
43  T getOrElse(T value) const {
44  T result = value;
45  if (this->hasValue()) {
46  result = this->value;
47  }
48  return result;
49  }
50 
51  private:
52  State state;
53  T value;
54 };
55 
56 } // namespace TestUtils
57 
58 #endif
#define FW_ASSERT(...)
Definition: Assert.hpp:14
An optional value.
Definition: Option.hpp:20
T getOrElse(T value) const
Definition: Option.hpp:43
Option(T value)
Definition: Option.hpp:25
static Option< T > some(T value)
Definition: Option.hpp:29
T get() const
Definition: Option.hpp:39
static constexpr Option< T > none()
Definition: Option.hpp:30
bool hasValue() const
Definition: Option.hpp:33
void set(T value)
Definition: Option.hpp:34