Mercurial > octave
changeset 31096:b6aeea949531
dir.m: Skip unnecessary parts if no output argument is requested.
* scripts/miscellaneous/dir.m: Skip part of code (including possibly slow
canonicalize_file_name) that is not necessary if no output argument is
requested.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Wed, 15 Jun 2022 20:00:35 +0200 |
parents | cb03340f298f |
children | 97918dca79ed |
files | scripts/miscellaneous/dir.m |
diffstat | 1 files changed, 30 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/miscellaneous/dir.m Mon Jun 13 14:10:22 2022 -0400 +++ b/scripts/miscellaneous/dir.m Wed Jun 15 20:00:35 2022 +0200 @@ -150,36 +150,40 @@ endif fn = regexprep (fn, re, '$2$3'); info(++cnt).name = fn; - if (no_dir && ! strcmp (fn, ".")) - tmpdir = "."; + if (nargout > 0) + if (no_dir && ! strcmp (fn, ".")) + tmpdir = "."; + endif + if (! is_same_file (last_dir, tmpdir)) + ## Caching mechanism to speed up function + last_dir = tmpdir; + if (ispc () && strncmp (last_dir, '\\', 2)) + ## Windows UNC network file name is used as is + last_absdir = last_dir; + else + last_absdir = canonicalize_file_name (last_dir); + endif + endif + info(cnt).folder = last_absdir; + lt = localtime (st.mtime); + info(cnt).date = strftime ("%d-%b-%Y %T", lt); + info(cnt).bytes = st.size; + info(cnt).isdir = S_ISDIR (st.mode); + info(cnt).datenum = [lt.year + 1900, lt.mon + 1, lt.mday, ... + lt.hour, lt.min, lt.sec]; + info(cnt).statinfo = st; endif - if (! is_same_file (last_dir, tmpdir)) - ## Caching mechanism to speed up function - last_dir = tmpdir; - if (ispc () && strncmp (last_dir, '\\', 2)) - ## Windows UNC network file name is used as is - last_absdir = last_dir; - else - last_absdir = canonicalize_file_name (last_dir); - endif - endif - info(cnt).folder = last_absdir; - lt = localtime (st.mtime); - info(cnt).date = strftime ("%d-%b-%Y %T", lt); - info(cnt).bytes = st.size; - info(cnt).isdir = S_ISDIR (st.mode); - info(cnt).datenum = [lt.year + 1900, lt.mon + 1, lt.mday, ... - lt.hour, lt.min, lt.sec]; - info(cnt).statinfo = st; endif endfor info((cnt+1):end) = []; # remove any unused entries - ## A lot of gymnastics in order to call datenum just once. 2x speed up. - dvec = [info.datenum]([[1:6:end]', [2:6:end]', [3:6:end]', ... - [4:6:end]', [5:6:end]', [6:6:end]']); - dnum = datenum (dvec); - ctmp = mat2cell (dnum, ones (cnt,1), 1); - [info.datenum] = ctmp{:}; + if (nargout > 0) + ## A lot of gymnastics in order to call datenum just once. 2x speed up. + dvec = [info.datenum]([[1:6:end]', [2:6:end]', [3:6:end]', ... + [4:6:end]', [5:6:end]', [6:6:end]']); + dnum = datenum (dvec); + ctmp = mat2cell (dnum, ones (cnt,1), 1); + [info.datenum] = ctmp{:}; + endif endif ## Return the output arguments.