The Lambda Lab
/
projects
/
elpher.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
5ce47dc
)
Child node caches now retained after reload.
author
Tim Vaughan
<tgvaughan@gmail.com>
Wed, 29 May 2019 20:11:19 +0000
(22:11 +0200)
committer
Tim Vaughan
<tgvaughan@gmail.com>
Wed, 29 May 2019 20:11:19 +0000
(22:11 +0200)
elpher.el
patch
|
blob
|
history
diff --git
a/elpher.el
b/elpher.el
index
a8f8edd
..
449bef4
100644
(file)
--- a/
elpher.el
+++ b/
elpher.el
@@
-201,6
+201,9
@@
use as the start page."
;; Node
;; Node
+(defvar elpher-seen-nodes (make-hash-table :test 'equal)
+ "Table mapping addresses to existing (seen) node objects.")
+
(defun elpher-make-node (parent address getter &optional content pos)
"Create a node in the gopher page hierarchy.
(defun elpher-make-node (parent address getter &optional content pos)
"Create a node in the gopher page hierarchy.
@@
-209,8
+212,16
@@
the gopher page, GETTER provides the getter function used to obtain this
page.
The optional arguments CONTENT and POS can be used to fill the cached
page.
The optional arguments CONTENT and POS can be used to fill the cached
-content and cursor position fields of the node."
- (list parent address getter content pos))
+content and cursor position fields of the node.
+
+If the hash table `elpher-seen-nodes' contains a key equal to ADDRESS,
+the node contained as its value will be returned instead."
+ (let ((existing-node (gethash address elpher-seen-nodes)))
+ (if existing-node
+ existing-node
+ (let ((new-node (list parent address getter content pos)))
+ (puthash address new-node elpher-seen-nodes)
+ new-node))))
(defun elpher-node-parent (node)
"Retrieve the parent node of NODE."
(defun elpher-node-parent (node)
"Retrieve the parent node of NODE."