mirror of https://github.com/axmolengine/axmol.git
Merge pull request #7600 from pandamicro/FileUtils_FILE_API
Refactor #5580: Improve searchFullPathForFilename and comments
This commit is contained in:
commit
9efbd6e4ef
|
@ -888,39 +888,19 @@ std::string FileUtils::getFullPathForDirectoryAndFilename(const std::string& dir
|
||||||
|
|
||||||
std::string FileUtils::searchFullPathForFilename(const std::string& filename) const
|
std::string FileUtils::searchFullPathForFilename(const std::string& filename) const
|
||||||
{
|
{
|
||||||
// If filename is absolute path, we don't need to consider 'search paths' and 'resolution orders'.
|
|
||||||
if (isAbsolutePath(filename))
|
if (isAbsolutePath(filename))
|
||||||
{
|
{
|
||||||
return filename;
|
return filename;
|
||||||
}
|
}
|
||||||
|
std::string path = const_cast<FileUtils*>(this)->fullPathForFilename(filename);
|
||||||
// Already Cached ?
|
if (0 == path.compare(filename))
|
||||||
auto cacheIter = _fullPathCache.find(filename);
|
|
||||||
if( cacheIter != _fullPathCache.end() )
|
|
||||||
{
|
{
|
||||||
return cacheIter->second;
|
return "";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
// Get the new file name.
|
|
||||||
const std::string newFilename( getNewFilename(filename) );
|
|
||||||
|
|
||||||
std::string fullpath;
|
|
||||||
|
|
||||||
for (auto searchIt = _searchPathArray.cbegin(); searchIt != _searchPathArray.cend(); ++searchIt)
|
|
||||||
{
|
{
|
||||||
for (auto resolutionIt = _searchResolutionsOrderArray.cbegin(); resolutionIt != _searchResolutionsOrderArray.cend(); ++resolutionIt)
|
return path;
|
||||||
{
|
|
||||||
fullpath = const_cast<FileUtils*>(this)->getPathForFilename(newFilename, *resolutionIt, *searchIt);
|
|
||||||
|
|
||||||
if (!fullpath.empty())
|
|
||||||
{
|
|
||||||
// Using the filename passed in as key.
|
|
||||||
const_cast<FileUtils*>(this)->_fullPathCache.insert(std::make_pair(filename, fullpath));
|
|
||||||
return fullpath;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileUtils::isFileExist(const std::string& filename) const
|
bool FileUtils::isFileExist(const std::string& filename) const
|
||||||
|
|
|
@ -407,12 +407,16 @@ protected:
|
||||||
virtual std::string getNewFilename(const std::string &filename) const;
|
virtual std::string getNewFilename(const std::string &filename) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether file exists without considering search paths and resolution orders.
|
* Checks whether a file exists without considering search paths and resolution orders.
|
||||||
|
* @param The file (with absolute path) to look up for
|
||||||
|
* @return Returns true if the file found at the given absolute path, otherwise returns false
|
||||||
*/
|
*/
|
||||||
virtual bool isFileExistInternal(const std::string& filename) const = 0;
|
virtual bool isFileExistInternal(const std::string& filename) const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether file exists without considering search paths and resolution orders.
|
* Checks whether a directory exists without considering search paths and resolution orders.
|
||||||
|
* @param The directory (with absolute path) to look up for
|
||||||
|
* @return Returns true if the directory found at the given absolute path, otherwise returns false
|
||||||
*/
|
*/
|
||||||
virtual bool isDirectoryExistInternal(const std::string& dirPath) const;
|
virtual bool isDirectoryExistInternal(const std::string& dirPath) const;
|
||||||
|
|
||||||
|
@ -438,7 +442,14 @@ protected:
|
||||||
*/
|
*/
|
||||||
virtual std::string getFullPathForDirectoryAndFilename(const std::string& directory, const std::string& filename);
|
virtual std::string getFullPathForDirectoryAndFilename(const std::string& directory, const std::string& filename);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the fullpath for a given filename.
|
||||||
|
* This is an alternative for fullPathForFilename, there are two main differences:
|
||||||
|
* First, it returns empty string instead of the original filename when no file found for the given name.
|
||||||
|
* Secondly, it's a const function.
|
||||||
|
* @param filename The file name to look up for
|
||||||
|
* @return The full path for the file, if not found, the return value will be an empty string
|
||||||
|
*/
|
||||||
virtual std::string searchFullPathForFilename(const std::string& filename) const;
|
virtual std::string searchFullPathForFilename(const std::string& filename) const;
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue