[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] scratch/mheerdegen-preview f23fe5e 17/35: WIP: Optimize caching
From: |
Michael Heerdegen |
Subject: |
[elpa] scratch/mheerdegen-preview f23fe5e 17/35: WIP: Optimize caching |
Date: |
Mon, 29 Oct 2018 22:24:06 -0400 (EDT) |
branch: scratch/mheerdegen-preview
commit f23fe5e312ca4368efae7ba78b08c3ea266187c9
Author: Michael Heerdegen <address@hidden>
Commit: Michael Heerdegen <address@hidden>
WIP: Optimize caching
---
packages/el-search/el-search.el | 48 +++++++++++++++++++++++++----------------
1 file changed, 29 insertions(+), 19 deletions(-)
diff --git a/packages/el-search/el-search.el b/packages/el-search/el-search.el
index 79de021..d9791d0 100644
--- a/packages/el-search/el-search.el
+++ b/packages/el-search/el-search.el
@@ -1649,8 +1649,8 @@ PATTERN and combining the heuristic matchers of the
subpatterns."
(walker tree)
elements)))
-(defun el-search-heuristic-buffer-matcher (pattern)
- (let ((heuristic-matcher (el-search-heuristic-matcher pattern)))
+(defun el-search-heuristic-buffer-matcher (pattern &optional hm)
+ (let ((heuristic-matcher (or hm (el-search-heuristic-matcher pattern))))
(lambda (file-name-or-buffer)
(el-search--message-no-log "%s"
(if (stringp file-name-or-buffer)
@@ -1790,7 +1790,7 @@ With ALLOW-LEADING-WHITESPACE non-nil, the match may
be preceded by whitespace."
(el-search--looking-at-1 (el-search-make-matcher pattern)
allow-leading-whitespace))
-(defun el-search--all-matches (search)
+(defun el-search--all-matches (search &optional dont-copy)
"Return a stream of all matches of SEARCH.
The returned stream will always start searching from the
beginning anew even when SEARCH has been used interactively or
@@ -1804,7 +1804,7 @@ The elements of the returned stream will have the form
where BUFFER or FILE is the buffer or file where a match has been
found (exactly one of the two will be nil), and MATCH-BEG is the
position of the beginning of the match."
- (let* ((search (el-search-reset-search (copy-el-search-object search)))
+ (let* ((search (if dont-copy search (el-search-reset-search
(copy-el-search-object search))))
(head (el-search-object-head search)))
(seq-filter
#'identity ;we use `nil' as a "skip" tag
@@ -1849,7 +1849,9 @@ position of the beginning of the match."
(setf (el-search-head-heuristic-matcher head)
(el-search-heuristic-matcher pattern))
(setf (el-search-head-heuristic-buffer-matcher head)
- (el-search-heuristic-buffer-matcher pattern))
+ (el-search-heuristic-buffer-matcher
+ pattern
+ (el-search-head-heuristic-matcher head)))
head)
(defun el-search-compile-pattern-in-search (search)
@@ -2513,18 +2515,26 @@ created.")
(_
;; (message "Refreshing match count data") (sit-for 1)
(redisplay) ;don't delay highlighting
- (setq-local el-search--buffer-match-count-data
- (let ((stream-of-buffer-matches
- (seq-map #'cadr
- (el-search--all-matches
- (el-search-make-search
-
(el-search--current-pattern)
- (let ((current-buffer
(current-buffer)))
- (lambda () (stream (list
current-buffer)))))))))
- (list
- el-search--current-search
- (buffer-chars-modified-tick)
- stream-of-buffer-matches)))
+ (let ((new-search (el-search-make-search
+ (el-search--current-pattern)
+ (let ((current-buffer
(current-buffer)))
+ (lambda () (stream (list
current-buffer)))))))
+ (let ((head (el-search-object-head new-search)))
+ ;; reuse already existing heuristic matchers
+ (setf (el-search-head-heuristic-matcher head)
+ (el-search-head-heuristic-matcher
+ (el-search-object-head
el-search--current-search)))
+ (setf (el-search-head-heuristic-buffer-matcher head)
+ (el-search-head-heuristic-buffer-matcher
+ (el-search-object-head
el-search--current-search))))
+ (setq-local el-search--buffer-match-count-data
+ (let ((stream-of-buffer-matches
+ (seq-map #'cadr
+ (el-search--all-matches
new-search 'dont-copy))))
+ (list
+ el-search--current-search
+ (buffer-chars-modified-tick)
+ stream-of-buffer-matches))))
(setq el-search--this-session-match-count-data
el-search--buffer-match-count-data)))
@@ -2803,8 +2813,8 @@ continued."
(interactive "P")
(el-search--set-this-command-refresh-message-maybe)
(unless (eq last-command this-command)
- (el-search--set-search-origin-maybe))
- (el-search-compile-pattern-in-search el-search--current-search)
+ (el-search--set-search-origin-maybe)
+ (el-search-compile-pattern-in-search el-search--current-search))
(el-search-protect-search-head
(el-search-when-unwind
(unwind-protect
- [elpa] branch scratch/mheerdegen-preview created (now cdfaec4), Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview 76163ac 01/35: WIP: [el-search] Fix an infloop, Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview ee441a0 03/35: WIP: Add diverse "sloppy" pattern types, Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview 9805060 02/35: WIP: [el-search] Fix nested match issues in *El Occur*, Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview 220f349 04/35: WIP: Add package "sscell", Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview bef717d 06/35: WIP: New :key arg for "filename" and new pattern types "file" and "dir", Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview d2faca2 09/35: WIP: New command 'el-search-repository', Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview 2f72331 08/35: WIP: New file el-search/el-search-pp.el, Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview f2ec15d 13/35: WIP [el-search] Fix more "redundant _ pattern" cases, Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview f025458 12/35: WIP [el-search] Add quick help command, Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview f23fe5e 17/35: WIP: Optimize caching,
Michael Heerdegen <=
- [elpa] scratch/mheerdegen-preview b4b94b0 11/35: WIP [el-search] Implement 'el-search-keyboard-quit', Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview 44715aa 05/35: WIP: New package "gnus-article-notes", Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview 5057b57 14/35: WIP [el-search] Discourage using symbols as LPATS in `append' and `l', Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview 5e2aea1 20/35: WIP [el-search] Adjust prev/next match commands for search and occur, Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview 38def8b 25/35: WIP: Test: Make mouse clicks not abort the search, Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview feede7d 23/35: WIP: [el-search] Fine tune separator for splicing replace, Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview 82abecf 16/35: WIP: Additions to "Mb hints", Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview df2132a 21/35: WIP: Improvements for change and changed, Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview 2ec7a9e 22/35: WIP: More colorful match count, Michael Heerdegen, 2018/10/29
- [elpa] scratch/mheerdegen-preview 91f5bd3 18/35: WIP [el-search] Fix C-j with numeric arg in error case, Michael Heerdegen, 2018/10/29