Mercurial > hg > octave-shane
changeset 2924:50edcdd3ec22
[project @ 1997-05-03 20:21:03 by jwe]
author | jwe |
---|---|
date | Sat, 03 May 1997 20:21:15 +0000 |
parents | 76e1331ba933 |
children | f0665dac8e33 |
files | liboctave/glob-match.cc liboctave/glob-match.h liboctave/oct-glob.cc liboctave/oct-glob.h |
diffstat | 4 files changed, 226 insertions(+), 226 deletions(-) [+] |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/liboctave/glob-match.cc @@ -0,0 +1,136 @@ +/* + +Copyright (C) 1996, 1997 John W. Eaton + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <fnmatch.h> +#include <glob.h> + +#include <iostream.h> + +#include <string> + +#include "file-stat.h" +#include "oct-glob.h" +#include "str-vec.h" + +bool +glob_match::match (const string& s) +{ + int npat = pat.length (); + + const char *str = s.c_str (); + + int fnmatch_flags = 0; + + if (flags & pathname) + fnmatch_flags |= FNM_PATHNAME; + + if (flags & noescape) + fnmatch_flags |= FNM_NOESCAPE; + + if (flags & period) + fnmatch_flags |= FNM_PERIOD; + + for (int i = 0; i < npat; i++) + if (fnmatch (pat(i).c_str (), str, fnmatch_flags) != FNM_NOMATCH) + return true; + + return false; +} + +Array<bool> +glob_match::match (const string_vector& s) +{ + int n = s.length (); + + Array<bool> retval (n); + + for (int i = 0; i < n; i++) + retval(i) = match (s[i]); + + return retval; +} + +static bool +single_match_exists (const string& file) +{ + file_stat s (file); + + return s.exists (); +} + +string_vector +glob_match::glob (void) +{ + string_vector retval; + + int npat = pat.length (); + + int k = 0; + + for (int i = 0; i < npat; i++) + { + string xpat = pat(i); + + if (! xpat.empty ()) + { + glob_t glob_info; + + int err = ::glob (xpat.c_str (), GLOB_NOSORT, 0, &glob_info); + + if (! err) + { + int n = glob_info.gl_pathc; + + char **matches = glob_info.gl_pathv; + + // XXX FIXME XXX -- we shouldn't have to check to see if + // a single match exists, but it seems that glob() won't + // check for us unless the pattern contains globbing + // characters. Hmm. + + if (n > 1 + || (n == 1 && single_match_exists (string (matches[0])))) + { + retval.resize (k+n); + + for (int j = 0; j < n; j++) + retval[k++] = matches[j]; + } + + globfree (&glob_info); + } + } + } + + return retval.qsort (); +} + +/* +;;; Local Variables: *** +;;; mode: C++ *** +;;; End: *** +*/ +
new file mode 100644 --- /dev/null +++ b/liboctave/glob-match.h @@ -0,0 +1,90 @@ +/* + +Copyright (C) 1996, 1997 John W. Eaton + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#if !defined (octave_oct_glob_h) +#define octave_oct_glob_h 1 + +#include <string> + +#include "Array.h" +#include "str-vec.h" + +class +glob_match +{ +public: + + enum opts + { + pathname = 1, // No wildcard can ever match `/'. + noescape = 2, // Backslashes don't quote special chars. + period = 4 // Leading `.' is matched only explicitly. + }; + + glob_match (const string& p = string (), + unsigned int f = pathname|noescape|period) + : pat (p), flags (f) { } + + glob_match (const string_vector& p = string_vector (), + unsigned int f = pathname|noescape|period) + : pat (p), flags (f) { } + + glob_match (const glob_match& gm) : pat (gm.pat), flags (gm.flags) { } + + glob_match& operator = (const glob_match& gm) + { + if (this != &gm) + { + pat = gm.pat; + flags = gm.flags; + } + return *this; + } + + ~glob_match (void) { } + + void set_pattern (const string& p) { pat = p; } + + void set_pattern (const string_vector& p) { pat = p; } + + bool match (const string&); + + Array<bool> match (const string_vector&); + + string_vector glob (void); + +private: + + // Globbing pattern(s). + string_vector pat; + + // Option flags. + unsigned int flags; +}; + +#endif + +/* +;;; Local Variables: *** +;;; mode: C++ *** +;;; End: *** +*/
deleted file mode 100644 --- a/liboctave/oct-glob.cc +++ /dev/null @@ -1,136 +0,0 @@ -/* - -Copyright (C) 1996, 1997 John W. Eaton - -This file is part of Octave. - -Octave is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -Octave is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License -along with Octave; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <fnmatch.h> -#include <glob.h> - -#include <iostream.h> - -#include <string> - -#include "file-ops.h" -#include "oct-glob.h" -#include "str-vec.h" - -bool -glob_match::match (const string& s) -{ - int npat = pat.length (); - - const char *str = s.c_str (); - - int fnmatch_flags = 0; - - if (flags & pathname) - fnmatch_flags |= FNM_PATHNAME; - - if (flags & noescape) - fnmatch_flags |= FNM_NOESCAPE; - - if (flags & period) - fnmatch_flags |= FNM_PERIOD; - - for (int i = 0; i < npat; i++) - if (fnmatch (pat(i).c_str (), str, fnmatch_flags) != FNM_NOMATCH) - return true; - - return false; -} - -Array<bool> -glob_match::match (const string_vector& s) -{ - int n = s.length (); - - Array<bool> retval (n); - - for (int i = 0; i < n; i++) - retval(i) = match (s[i]); - - return retval; -} - -static bool -single_match_exists (const string& file) -{ - file_stat s (file); - - return s.exists (); -} - -string_vector -glob_match::glob (void) -{ - string_vector retval; - - int npat = pat.length (); - - int k = 0; - - for (int i = 0; i < npat; i++) - { - string xpat = pat(i); - - if (! xpat.empty ()) - { - glob_t glob_info; - - int err = ::glob (xpat.c_str (), GLOB_NOSORT, 0, &glob_info); - - if (! err) - { - int n = glob_info.gl_pathc; - - char **matches = glob_info.gl_pathv; - - // XXX FIXME XXX -- we shouldn't have to check to see if - // a single match exists, but it seems that glob() won't - // check for us unless the pattern contains globbing - // characters. Hmm. - - if (n > 1 - || (n == 1 && single_match_exists (string (matches[0])))) - { - retval.resize (k+n); - - for (int j = 0; j < n; j++) - retval[k++] = matches[j]; - } - - globfree (&glob_info); - } - } - } - - return retval.qsort (); -} - -/* -;;; Local Variables: *** -;;; mode: C++ *** -;;; End: *** -*/ -
deleted file mode 100644 --- a/liboctave/oct-glob.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - -Copyright (C) 1996, 1997 John W. Eaton - -This file is part of Octave. - -Octave is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -Octave is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License -along with Octave; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#if !defined (octave_oct_glob_h) -#define octave_oct_glob_h 1 - -#include <string> - -#include "Array.h" -#include "str-vec.h" - -class -glob_match -{ -public: - - enum opts - { - pathname = 1, // No wildcard can ever match `/'. - noescape = 2, // Backslashes don't quote special chars. - period = 4 // Leading `.' is matched only explicitly. - }; - - glob_match (const string& p = string (), - unsigned int f = pathname|noescape|period) - : pat (p), flags (f) { } - - glob_match (const string_vector& p = string_vector (), - unsigned int f = pathname|noescape|period) - : pat (p), flags (f) { } - - glob_match (const glob_match& gm) : pat (gm.pat), flags (gm.flags) { } - - glob_match& operator = (const glob_match& gm) - { - if (this != &gm) - { - pat = gm.pat; - flags = gm.flags; - } - return *this; - } - - ~glob_match (void) { } - - void set_pattern (const string& p) { pat = p; } - - void set_pattern (const string_vector& p) { pat = p; } - - bool match (const string&); - - Array<bool> match (const string_vector&); - - string_vector glob (void); - -private: - - // Globbing pattern(s). - string_vector pat; - - // Option flags. - unsigned int flags; -}; - -#endif - -/* -;;; Local Variables: *** -;;; mode: C++ *** -;;; End: *** -*/