change model_path logic

This commit is contained in:
David Rose 2002-09-16 17:32:41 +00:00
parent 39e03a8d0e
commit a4f7ec2980
2 changed files with 42 additions and 22 deletions

View File

@ -85,12 +85,22 @@ get_num_files() const {
// Access: Public // Access: Public
// Description: Returns the nth file on the result list. // Description: Returns the nth file on the result list.
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
Filename DSearchPath::Results:: const Filename &DSearchPath::Results::
get_file(int n) const { get_file(int n) const {
assert(n >= 0 && n < (int)_files.size()); assert(n >= 0 && n < (int)_files.size());
return _files[n]; return _files[n];
} }
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::add_file
// Access: Public
// Description: Adds a new file to the result list.
////////////////////////////////////////////////////////////////////
void DSearchPath::Results::
add_file(const Filename &file) {
_files.push_back(file);
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Default Constructor // Function: DSearchPath::Default Constructor
// Access: Public // Access: Public
@ -246,7 +256,7 @@ get_num_directories() const {
// Access: Public // Access: Public
// Description: Returns the nth directory on the search list. // Description: Returns the nth directory on the search list.
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
Filename DSearchPath:: const Filename &DSearchPath::
get_directory(int n) const { get_directory(int n) const {
assert(n >= 0 && n < (int)_directories.size()); assert(n >= 0 && n < (int)_directories.size());
return _directories[n]; return _directories[n];
@ -262,11 +272,13 @@ get_directory(int n) const {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
Filename DSearchPath:: Filename DSearchPath::
find_file(const Filename &filename) const { find_file(const Filename &filename) const {
Directories::const_iterator di; if (filename.is_local()) {
for (di = _directories.begin(); di != _directories.end(); ++di) { Directories::const_iterator di;
Filename match((*di), filename); for (di = _directories.begin(); di != _directories.end(); ++di) {
if (match.exists()) { Filename match((*di), filename);
return match; if (match.exists()) {
return match;
}
} }
} }
@ -280,21 +292,28 @@ find_file(const Filename &filename) const {
// the indicated file, in order. Fills up the results // the indicated file, in order. Fills up the results
// list with *all* of the matching filenames found, if // list with *all* of the matching filenames found, if
// any. Returns the number of matches found. // any. Returns the number of matches found.
//
// It is the responsibility of the the caller to clear
// the results list first; otherwise, the newly-found
// files will be appended to the list.
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
int DSearchPath:: int DSearchPath::
find_all_files(const Filename &filename, find_all_files(const Filename &filename,
DSearchPath::Results &results) const { DSearchPath::Results &results) const {
results._files.clear(); int num_added = 0;
Directories::const_iterator di; if (filename.is_local()) {
for (di = _directories.begin(); di != _directories.end(); ++di) { Directories::const_iterator di;
Filename match((*di), filename); for (di = _directories.begin(); di != _directories.end(); ++di) {
if (match.exists()) { Filename match((*di), filename);
results._files.push_back(match); if (match.exists()) {
results.add_file(match);
num_added++;
}
} }
} }
return results._files.size(); return num_added;
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////

View File

@ -19,11 +19,10 @@
#ifndef PANDASEARCHPATH_H #ifndef PANDASEARCHPATH_H
#define PANDASEARCHPATH_H #define PANDASEARCHPATH_H
#include <dtoolbase.h> #include "dtoolbase.h"
#include "filename.h" #include "filename.h"
#include "pvector.h"
#include <vector>
/////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////
// Class : DSearchPath // Class : DSearchPath
@ -45,12 +44,14 @@ public:
void clear(); void clear();
int get_num_files() const; int get_num_files() const;
Filename get_file(int n) const; const Filename &get_file(int n) const;
public:
void add_file(const Filename &file);
private: private:
typedef vector<Filename> Files; typedef pvector<Filename> Files;
Files _files; Files _files;
friend class DSearchPath;
}; };
PUBLISHED: PUBLISHED:
@ -70,7 +71,7 @@ PUBLISHED:
bool is_empty() const; bool is_empty() const;
int get_num_directories() const; int get_num_directories() const;
Filename get_directory(int n) const; const Filename &get_directory(int n) const;
Filename find_file(const Filename &filename) const; Filename find_file(const Filename &filename) const;
int find_all_files(const Filename &filename, Results &results) const; int find_all_files(const Filename &filename, Results &results) const;
@ -83,7 +84,7 @@ PUBLISHED:
void write(ostream &out, int indent_level = 0) const; void write(ostream &out, int indent_level = 0) const;
private: private:
typedef vector<Filename> Directories; typedef pvector<Filename> Directories;
Directories _directories; Directories _directories;
}; };