emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 99539e8 340/433: Rewrite mmm-regions-alist for performance


From: Dmitry Gutov
Subject: [elpa] master 99539e8 340/433: Rewrite mmm-regions-alist for performance
Date: Thu, 15 Mar 2018 19:44:32 -0400 (EDT)

branch: master
commit 99539e8450a6aef29e32de39df85a69104d49e37
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>

    Rewrite mmm-regions-alist for performance
    
    Not much improvement here, but at least we don't iterate multiple times 
over the
    same list now.
---
 mmm-region.el | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/mmm-region.el b/mmm-region.el
index 5a14839..04ba779 100644
--- a/mmm-region.el
+++ b/mmm-region.el
@@ -716,20 +716,23 @@ union covers the region from START to STOP, including 
delimiters."
     (setcdr (last regions 2) nil)
     regions))
 
-
 (defun mmm-regions-alist (start stop)
   "Return a list of lists of the form \(MODE . REGIONS) where REGIONS
 is a list of elements of the form \(BEG END). The disjoint union all
 of the REGIONS covers START to STOP."
-  (let ((regions (mmm-regions-in start stop)))
-    (mapcar #'(lambda (mode)
-                (cons mode
-                      (mapcan #'(lambda (region)
-                                  (if (eq mode (car region))
-                                      (list (cdr region))))
-                              regions)))
-            ;; All the modes
-            (remove-duplicates (mapcar #'car regions)))))
+  (let ((regions (mmm-regions-in start stop))
+        alist)
+    (mapc (lambda (region)
+            (let* ((mode (car region))
+                   (elem (cdr region))
+                   (kv (assoc mode alist)))
+              (if kv
+                  (push elem (cdr kv))
+                (push (cons mode (list elem)) alist))))
+          regions)
+    (mapcar (lambda (kv)
+              (cons (car kv) (nreverse (cdr kv))))
+            alist)))
 
 ;;}}}
 ;;{{{ Fontify Regions



reply via email to

[Prev in Thread] Current Thread [Next in Thread]