Lazy line caching for Notepad (#1042)

* easier 'now', start adding text editor

* Adding scrolling to notepad

* Better scrolling

* Better scrolling, off-by-1 bugs

* MVP fit and finish

* Add tiny font and use in Notepad

* Font tweaking, tiny font cursor

* Fix warning

* Format changed files

* WIP No file limit

* WIP - adding CircularBuffer type

* WIP Caching

* add  unit test for circular_buffer

* WIP still have a bug when moving cache forward

* Finish lazy line caching

---------

Co-authored-by: kallanreed <kallanreed@outlook.com>
This commit is contained in:
Kyle Reed 2023-05-22 13:08:59 -07:00 committed by GitHub
parent 802a4e243b
commit 98f3bf151f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 741 additions and 175 deletions

View file

@ -28,14 +28,27 @@ template <typename T>
class Optional {
public:
constexpr Optional()
: value_{}, valid_{false} {};
: value_{}, valid_{false} {}
constexpr Optional(const T& value)
: value_{value}, valid_{true} {};
: value_{value}, valid_{true} {}
constexpr Optional(T&& value)
: value_{std::move(value)}, valid_{true} {};
: value_{std::move(value)}, valid_{true} {}
bool is_valid() const { return valid_; };
const T& value() const { return value_; };
bool is_valid() const { return valid_; }
// TODO: Throw if not valid?
T& value() & { return value_; }
T& operator*() & { return value_; }
const T& value() const& { return value_; }
const T& operator*() const& { return value_; }
T&& value() && { return value_; }
T&& operator*() && { return value_; }
const T&& value() const&& { return value_; }
const T&& operator*() const&& { return value_; }
T* operator->() { return &value_; }
const T* operator->() const { return &value_; }
private:
T value_;