mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-10-31 23:45:22 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (C) 2002-2012 Nikolaus Gebhardt
 | |
| // This file is part of the "Irrlicht Engine" and the "irrXML" project.
 | |
| // For conditions of distribution and use, see copyright notice in irrlicht.h
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include "irrString.h"
 | |
| 
 | |
| namespace irr
 | |
| {
 | |
| namespace io
 | |
| {
 | |
| 
 | |
| //! Type used for all file system related strings.
 | |
| /** This type will transparently handle different file system encodings.
 | |
| 	NOTE: For historical reasons the tool-functions using io::path are all in coreutil.h
 | |
| */
 | |
| typedef core::string<fschar_t> path;
 | |
| 
 | |
| // Type only exists for historcal reasons, paths are always char now.
 | |
| static_assert(sizeof(fschar_t) == sizeof(char));
 | |
| 
 | |
| //! Used in places where we identify objects by a filename, but don't actually work with the real filename
 | |
| /** Irrlicht is internally not case-sensitive when it comes to names.
 | |
| 	Also this class is a first step towards support for correctly serializing renamed objects.
 | |
| */
 | |
| struct SNamedPath
 | |
| {
 | |
| 	//! Constructor
 | |
| 	SNamedPath() {}
 | |
| 
 | |
| 	//! Constructor
 | |
| 	SNamedPath(const path &p) :
 | |
| 			Path(p), InternalName(PathToName(p))
 | |
| 	{
 | |
| 	}
 | |
| 
 | |
| 	//! Is smaller comparator
 | |
| 	bool operator<(const SNamedPath &other) const
 | |
| 	{
 | |
| 		return InternalName < other.InternalName;
 | |
| 	}
 | |
| 
 | |
| 	//! Set the path.
 | |
| 	void setPath(const path &p)
 | |
| 	{
 | |
| 		Path = p;
 | |
| 		InternalName = PathToName(p);
 | |
| 	}
 | |
| 
 | |
| 	//! Get the path.
 | |
| 	const path &getPath() const
 | |
| 	{
 | |
| 		return Path;
 | |
| 	};
 | |
| 
 | |
| 	//! Get the name which is used to identify the file.
 | |
| 	//! This string is similar to the names and filenames used before Irrlicht 1.7
 | |
| 	const path &getInternalName() const
 | |
| 	{
 | |
| 		return InternalName;
 | |
| 	}
 | |
| 
 | |
| 	//! Implicit cast to io::path
 | |
| 	operator core::stringc() const
 | |
| 	{
 | |
| 		return core::stringc(getPath());
 | |
| 	}
 | |
| 
 | |
| protected:
 | |
| 	// convert the given path string to a name string.
 | |
| 	path PathToName(const path &p) const
 | |
| 	{
 | |
| 		path name(p);
 | |
| 		name.replace('\\', '/');
 | |
| 		name.make_lower();
 | |
| 		return name;
 | |
| 	}
 | |
| 
 | |
| private:
 | |
| 	path Path;
 | |
| 	path InternalName;
 | |
| };
 | |
| 
 | |
| } // io
 | |
| } // irr
 |