From 041541e466610fe16989d7b845abc3c3e894a344 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Sat, 26 Sep 2015 15:45:17 -1000 Subject: [PATCH] lib: memoised versions of regexReplace[CI] (#244) --- hledger-lib/Hledger/Utils/Regex.hs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/hledger-lib/Hledger/Utils/Regex.hs b/hledger-lib/Hledger/Utils/Regex.hs index 3b377e28d..dd12d4ba7 100644 --- a/hledger-lib/Hledger/Utils/Regex.hs +++ b/hledger-lib/Hledger/Utils/Regex.hs @@ -22,7 +22,8 @@ Easy regular expression helpers, currently based on regex-tdfa. These should: Regex strings are automatically compiled into regular expressions the first time they are seen, and these are cached. If you use a huge number of unique regular expressions this might lead to increased -memory usage. +memory usage. Several functions have memoised variants (*Memo), which +also trade space for time. Current limitations: @@ -39,6 +40,8 @@ module Hledger.Utils.Regex ( ,regexMatchesCI ,regexReplace ,regexReplaceCI + ,regexReplaceMemo + ,regexReplaceCIMemo ,regexReplaceBy ,regexReplaceByCI ) @@ -102,6 +105,14 @@ regexReplace re = replaceRegex (toRegex re) regexReplaceCI :: Regexp -> Replacement -> String -> String regexReplaceCI re = replaceRegex (toRegexCI re) +-- | A memoising version of regexReplace. Caches the result for each +-- search pattern, replacement pattern, target string tuple. +regexReplaceMemo :: Regexp -> Replacement -> String -> String +regexReplaceMemo re repl = memo (regexReplace re repl) + +regexReplaceCIMemo :: Regexp -> Replacement -> String -> String +regexReplaceCIMemo re repl = memo (regexReplaceCI re repl) + -- replaceRegex :: Regex -> Replacement -> String -> String