add Python-friendly DSearchPath::find_all_files()

This commit is contained in:
David Rose 2009-10-10 09:05:35 +00:00
parent 13cb3d0ef0
commit 49688d89c9
5 changed files with 125 additions and 30 deletions

View File

@ -13,9 +13,48 @@
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::operator []
// Access: Published
// Description: Returns the nth filename in the set. This method is
// defined to make the Results object appear to be a
// list in Python.
////////////////////////////////////////////////////////////////////
INLINE Filename DSearchPath::Results::
operator [] (int n) const {
return get_file(n);
}
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::size
// Access: Published
// Description: Returns the num of filenames in the set. This method
// is defined to make the Results object appear to be a
// list in Python.
////////////////////////////////////////////////////////////////////
INLINE int DSearchPath::Results::
size() const {
return get_num_files();
}
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::find_all_files
// Access: Published
// Description: This variant of find_all_files() returns the new
// Results object, instead of filling on in on the
// parameter list. This is a little more convenient to
// call from Python.
////////////////////////////////////////////////////////////////////
INLINE DSearchPath::Results DSearchPath::
find_all_files(const Filename &filename) const {
Results results;
find_all_files(filename, results);
return results;
}
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::search_path
// Access: Public, Static
// Access: Published, Static
// Description: A quick-and-easy way to search a searchpath for a
// file when you don't feel like building or keeping
// around a DSearchPath object. This simply

View File

@ -19,7 +19,7 @@
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::Constructor
// Access: Public
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
DSearchPath::Results::
@ -28,7 +28,7 @@ Results() {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::Copy Constructor
// Access: Public
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
DSearchPath::Results::
@ -39,7 +39,7 @@ Results(const DSearchPath::Results &copy) :
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::Copy Assignment Operator
// Access: Public
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
void DSearchPath::Results::
@ -49,7 +49,7 @@ operator = (const DSearchPath::Results &copy) {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::Destructor
// Access: Public
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
DSearchPath::Results::
@ -58,7 +58,7 @@ DSearchPath::Results::
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::clear
// Access: Public
// Access: Published
// Description: Removes all the files from the list.
////////////////////////////////////////////////////////////////////
void DSearchPath::Results::
@ -68,7 +68,7 @@ clear() {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::get_num_files
// Access: Public
// Access: Published
// Description: Returns the number of files on the result list.
////////////////////////////////////////////////////////////////////
int DSearchPath::Results::
@ -78,7 +78,7 @@ get_num_files() const {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::get_file
// Access: Public
// Access: Published
// Description: Returns the nth file on the result list.
////////////////////////////////////////////////////////////////////
const Filename &DSearchPath::Results::
@ -89,7 +89,7 @@ get_file(int n) const {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::add_file
// Access: Public
// Access: Published
// Description: Adds a new file to the result list.
////////////////////////////////////////////////////////////////////
void DSearchPath::Results::
@ -97,9 +97,45 @@ add_file(const Filename &file) {
_files.push_back(file);
}
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::output
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
void DSearchPath::Results::
output(ostream &out) const {
out << "[ ";
if (!_files.empty()) {
Files::const_iterator fi = _files.begin();
out << (*fi);
++fi;
while (fi != _files.end()) {
out << ", " << (*fi);
++fi;
}
}
out << " ]";
}
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Results::write
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
void DSearchPath::Results::
write(ostream &out, int indent_level) const {
Files::const_iterator fi;
for (fi = _files.begin(); fi != _files.end(); ++fi) {
for (int i = 0; i < indent_level; ++i) {
out << ' ';
}
out << (*fi) << "\n";
}
}
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Default Constructor
// Access: Public
// Access: Published
// Description: Creates an empty search path.
////////////////////////////////////////////////////////////////////
DSearchPath::
@ -108,7 +144,7 @@ DSearchPath() {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Constructor
// Access: Public
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
DSearchPath::
@ -118,7 +154,7 @@ DSearchPath(const string &path, const string &separator) {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Constructor
// Access: Public
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
DSearchPath::
@ -128,7 +164,7 @@ DSearchPath(const Filename &directory) {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Copy Constructor
// Access: Public
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
DSearchPath::
@ -139,7 +175,7 @@ DSearchPath(const DSearchPath &copy) :
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Copy Assignment Operator
// Access: Public
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
void DSearchPath::
@ -149,7 +185,7 @@ operator = (const DSearchPath &copy) {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::Destructor
// Access: Public
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
DSearchPath::
@ -158,7 +194,7 @@ DSearchPath::
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::clear
// Access: Public
// Access: Published
// Description: Removes all the directories from the search list.
////////////////////////////////////////////////////////////////////
void DSearchPath::
@ -168,7 +204,7 @@ clear() {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::append_directory
// Access: Public
// Access: Published
// Description: Adds a new directory to the end of the search list.
////////////////////////////////////////////////////////////////////
void DSearchPath::
@ -178,7 +214,7 @@ append_directory(const Filename &directory) {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::prepend_directory
// Access: Public
// Access: Published
// Description: Adds a new directory to the front of the search list.
////////////////////////////////////////////////////////////////////
void DSearchPath::
@ -188,7 +224,7 @@ prepend_directory(const Filename &directory) {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::append_path
// Access: Public
// Access: Published
// Description: Adds all of the directories listed in the search path
// to the end of the search list.
////////////////////////////////////////////////////////////////////
@ -220,7 +256,7 @@ append_path(const string &path, const string &separator) {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::append_path
// Access: Public
// Access: Published
// Description: Adds all of the directories listed in the search path
// to the end of the search list.
////////////////////////////////////////////////////////////////////
@ -232,7 +268,7 @@ append_path(const DSearchPath &path) {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::prepend_path
// Access: Public
// Access: Published
// Description: Adds all of the directories listed in the search path
// to the beginning of the search list.
////////////////////////////////////////////////////////////////////
@ -248,7 +284,7 @@ prepend_path(const DSearchPath &path) {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::is_empty
// Access: Public
// Access: Published
// Description: Returns true if the search list is empty, false
// otherwise.
////////////////////////////////////////////////////////////////////
@ -259,7 +295,7 @@ is_empty() const {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::get_num_directories
// Access: Public
// Access: Published
// Description: Returns the number of directories on the search list.
////////////////////////////////////////////////////////////////////
int DSearchPath::
@ -269,7 +305,7 @@ get_num_directories() const {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::get_directory
// Access: Public
// Access: Published
// Description: Returns the nth directory on the search list.
////////////////////////////////////////////////////////////////////
const Filename &DSearchPath::
@ -280,7 +316,7 @@ get_directory(int n) const {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::find_file
// Access: Public
// Access: Published
// Description: Searches all the directories in the search list for
// the indicated file, in order. Returns the full
// matching pathname of the first match if found, or the
@ -321,7 +357,7 @@ find_file(const Filename &filename) const {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::find_all_files
// Access: Public
// Access: Published
// Description: Searches all the directories in the search list for
// the indicated file, in order. Fills up the results
// list with *all* of the matching filenames found, if
@ -370,7 +406,7 @@ find_all_files(const Filename &filename,
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::output
// Access: Public
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
void DSearchPath::
@ -396,7 +432,7 @@ output(ostream &out, const string &separator) const {
////////////////////////////////////////////////////////////////////
// Function: DSearchPath::write
// Access: Public
// Access: Published
// Description:
////////////////////////////////////////////////////////////////////
void DSearchPath::

View File

@ -30,7 +30,7 @@
// be built up explicitly.
////////////////////////////////////////////////////////////////////
class EXPCL_DTOOL DSearchPath {
public:
PUBLISHED:
class EXPCL_DTOOL Results {
PUBLISHED:
Results();
@ -42,6 +42,12 @@ public:
int get_num_files() const;
const Filename &get_file(int n) const;
INLINE Filename operator [] (int n) const;
INLINE int size() const;
void output(ostream &out) const;
void write(ostream &out, int indent_level = 0) const;
public:
void add_file(const Filename &file);
@ -50,7 +56,6 @@ public:
Files _files;
};
PUBLISHED:
DSearchPath();
DSearchPath(const string &path, const string &separator = string());
DSearchPath(const Filename &directory);
@ -73,6 +78,7 @@ PUBLISHED:
Filename find_file(const Filename &filename) const;
int find_all_files(const Filename &filename, Results &results) const;
INLINE Results find_all_files(const Filename &filename) const;
INLINE static Filename
search_path(const Filename &filename, const string &path,

View File

@ -286,6 +286,19 @@ find_all_files(const Filename &filename,
return get_value().find_all_files(filename, results);
}
////////////////////////////////////////////////////////////////////
// Function: ConfigVariableSearchPath::find_all_files
// Access: Published
// Description: This variant of find_all_files() returns the new
// Results object, instead of filling on in on the
// parameter list. This is a little more convenient to
// call from Python.
////////////////////////////////////////////////////////////////////
INLINE DSearchPath::Results ConfigVariableSearchPath::
find_all_files(const Filename &filename) const {
return get_value().find_all_files(filename);
}
////////////////////////////////////////////////////////////////////
// Function: ConfigVariableSearchPath::output
// Access: Published

View File

@ -76,6 +76,7 @@ PUBLISHED:
INLINE Filename find_file(const Filename &filename) const;
INLINE int find_all_files(const Filename &filename,
DSearchPath::Results &results) const;
INLINE DSearchPath::Results find_all_files(const Filename &filename) const;
INLINE void output(ostream &out) const;
INLINE void write(ostream &out) const;