Mercurial > hg > octave-lyh
changeset 11886:53e846af744d release-3-0-x
dir-ops.cc (dir_entry::read): use std::list<std::string> to cache names before converting to string_vector
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 20 Nov 2008 08:41:35 +0100 |
parents | 3342d1a7c4c9 |
children | 84fb5019fb38 |
files | liboctave/ChangeLog liboctave/dir-ops.cc |
diffstat | 2 files changed, 13 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,8 @@ +2008-11-17 John W. Eaton <jwe@octave.org> + + * dir-ops.cc (dir_entry::read): Use std::list<std::string> to + cache names before converting to string_vector. + 2008-10-09 Jaroslav Hajek <highegg@gmail.com> * oct-sort.cc (octave_sort<T>::merge_getmem,
--- a/liboctave/dir-ops.cc +++ b/liboctave/dir-ops.cc @@ -28,6 +28,9 @@ #include <cstdlib> #include <cstring> +#include <list> +#include <string> + #include "sysdir.h" #include "dir-ops.h" @@ -69,40 +72,26 @@ string_vector dir_entry::read (void) { - static octave_idx_type grow_size = 100; - - octave_idx_type len = 0; - - string_vector dirlist; + string_vector retval; if (ok ()) { - int count = 0; + std::list<std::string> dirlist; struct dirent *dir_ent; while ((dir_ent = readdir (static_cast<DIR *> (dir)))) { if (dir_ent) - { - if (count >= len) - { - len += grow_size; - dirlist.resize (len); - } - - dirlist[count] = dir_ent->d_name; - - count++; - } + dirlist.push_back (dir_ent->d_name); else break; } - dirlist.resize (count); + retval = string_vector (dirlist); } - return dirlist; + return retval; } void