Andreas Kling
a00419ed77
AK: Optional::operator bool() should consume the Optional
...
We use consumable annotations to catch bugs where you get the .value()
of an Optional before verifying that it's okay.
The bug here was that only has_value() would set the consumed state,
even though operator bool() does the same job.
2019-08-25 06:45:09 +02:00
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