diff options
author | bptato <nincsnevem662@gmail.com> | 2025-01-13 18:03:03 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-01-13 18:13:25 +0100 |
commit | dd0efa1e4ce4b73ba2997692f1e28f891b163ef3 (patch) | |
tree | 9e06180c2c905609fd8a3d968277a15301deea84 /src/local | |
parent | 9a0a1f87df008bdbe8abbc796744c6e68fc51769 (diff) | |
download | chawan-dd0efa1e4ce4b73ba2997692f1e28f891b163ef3.tar.gz |
container: use linked list instead of deque
Diffstat (limited to 'src/local')
-rw-r--r-- | src/local/container.nim | 21 | ||||
-rw-r--r-- | src/local/pager.nim | 4 |
2 files changed, 19 insertions, 6 deletions
diff --git a/src/local/container.nim b/src/local/container.nim index 4ac14854..d563af4f 100644 --- a/src/local/container.nim +++ b/src/local/container.nim @@ -1,4 +1,3 @@ -import std/deques import std/options import std/os import std/posix @@ -68,6 +67,7 @@ type refreshIn*: int refreshURL*: URL else: discard + next: ContainerEvent HighlightType = enum hltSearch, hltSelect @@ -172,7 +172,8 @@ type sourcepair*: Container # pointer to buffer with a source view (may be nil) needslines*: bool loadState*: LoadState - events*: Deque[ContainerEvent] + event: ContainerEvent + lastEvent: ContainerEvent startpos: Option[CursorPosition] redirectDepth*: int select* {.jsget.}: Select @@ -474,11 +475,25 @@ proc isHoverURL*(container: Container; url: URL): bool = return hoverurl.isSome and url.host == hoverurl.get.host proc triggerEvent(container: Container; event: ContainerEvent) = - container.events.addLast(event) + if container.lastEvent == nil: + container.event = event + container.lastEvent = event + else: + container.lastEvent.next = event + container.lastEvent = event proc triggerEvent(container: Container; t: ContainerEventType) = container.triggerEvent(ContainerEvent(t: t)) +proc popEvent*(container: Container): ContainerEvent = + if container.event == nil: + return nil + let res = container.event + container.event = res.next + if res.next == nil: + container.lastEvent = nil + return res + proc queueDraw*(container: Container) = container.redraw = true diff --git a/src/local/pager.nim b/src/local/pager.nim index 712da896..397d9c71 100644 --- a/src/local/pager.nim +++ b/src/local/pager.nim @@ -1,4 +1,3 @@ -import std/deques import std/exitprocs import std/options import std/os @@ -3066,8 +3065,7 @@ proc handleEvent0(pager: Pager; container: Container; event: ContainerEvent): return true proc handleEvents(pager: Pager; container: Container) = - while container.events.len > 0: - let event = container.events.popFirst() + while (let event = container.popEvent(); event != nil): if not pager.handleEvent0(container, event): break |