Andreas Kling
865a1b913c
AK: Add Optional<T>(const U&)
...
This replaces Optional<T>(U&&) which clang-tidy complained may hide the
regular copy and move constructors. That's a good point, clang-tidy,
and I appreciate you pointing that out!
2019-08-08 18:34:59 +02:00
Andreas Kling
60c25228ee
AK: Fix -Wconsumed warnings in Optional move-ctor and move-assign
...
Our protocol says we have to call has_value() before release_value().
The code was already safe, but the compiler had no way of knowing that.
2019-08-07 07:17:52 +02:00
Andreas Kling
151e6a1818
AK: Fix leak in Optional(Optional&&)
...
We were *copying* the other Optional's value and then marking it as not
having a value. This prevented us from ever destroying the original.
2019-08-05 22:27:47 +02:00
Andreas Kling
9553ecfe01
AK: Optional::operator=(Optional&&) should clear movee's has_value bit
...
We were forgetting to clear m_has_value in the Optional being moved
from when using operator=(Optional&&).
2019-08-05 21:47:36 +02:00
Robin Burchell
28362fcc57
Optional: Add consumable checks
...
These will, when building with clang, prevent using Optional::value
without first checking Optional::has_value() - at compile time.
2019-07-31 09:06:39 +02:00
Andreas Kling
1d0b464618
AK: Make HashMap::get(Key) return an Optional<Value>.
...
This allows HashMap::get() to be used for value types that cannot be default
constructed (e.g NonnullOwnPtr.)
2019-07-24 10:25:43 +02:00
Andreas Kling
adb7b1bc4c
AK: Add Optional::value_or(T).
...
This is like value() but with a fallback in case there's no value set.
2019-07-24 07:26:02 +02:00
Andreas Kling
7b2a4c02e7
AK: Add a simple Optional<T> template.
...
This can be used to store any type, with a flag that says if any value
is present or not.
2019-07-08 11:29:38 +02:00