about summary refs log tree commit diff stats
path: root/src/local
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2025-01-13 18:03:03 +0100
committerbptato <nincsnevem662@gmail.com>2025-01-13 18:13:25 +0100
commitdd0efa1e4ce4b73ba2997692f1e28f891b163ef3 (patch)
tree9e06180c2c905609fd8a3d968277a15301deea84 /src/local
parent9a0a1f87df008bdbe8abbc796744c6e68fc51769 (diff)
downloadchawan-dd0efa1e4ce4b73ba2997692f1e28f891b163ef3.tar.gz
container: use linked list instead of deque
Diffstat (limited to 'src/local')
-rw-r--r--src/local/container.nim21
-rw-r--r--src/local/pager.nim4
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