RealPath.h revision 37b74a387bb3993387029859c2d9d051c41c724e
1//===- RealPath.h ---------------------------------------------------------===// 2// 3// The MCLinker Project 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9#ifndef MCLD_SUPPORT_REALPATH_H_ 10#define MCLD_SUPPORT_REALPATH_H_ 11#include "mcld/Support/Path.h" 12 13#include <string> 14 15namespace mcld { 16namespace sys { 17namespace fs { 18 19/** \class RealPath 20 * \brief The canonicalized absolute pathname. 21 * 22 */ 23class RealPath : public Path { 24 public: 25 typedef Path::ValueType ValueType; 26 typedef Path::StringType StringType; 27 28 public: 29 RealPath(); 30 explicit RealPath(const ValueType* s); 31 explicit RealPath(const StringType& s); 32 explicit RealPath(const Path& pPath); 33 34 ~RealPath(); 35 36 RealPath& assign(const Path& pPath); 37 38 protected: 39 void initialize(); 40}; 41 42} // namespace fs 43} // namespace sys 44} // namespace mcld 45 46//----------------------------------------------------------------------------// 47// STL compatible functions // 48//----------------------------------------------------------------------------// 49namespace std { 50 51template <> 52struct less<mcld::sys::fs::RealPath> 53 : public binary_function<mcld::sys::fs::RealPath, 54 mcld::sys::fs::RealPath, 55 bool> { 56 bool operator()(const mcld::sys::fs::RealPath& pX, 57 const mcld::sys::fs::RealPath& pY) const { 58 if (pX.native().size() < pY.native().size()) 59 return true; 60 return (pX.native() < pY.native()); 61 } 62}; 63 64} // namespace std 65 66#endif // MCLD_SUPPORT_REALPATH_H_ 67