Home | History | Annotate | Download | only in Support
      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 
     15 namespace mcld {
     16 namespace sys {
     17 namespace fs {
     18 
     19 /** \class RealPath
     20  *  \brief The canonicalized absolute pathname.
     21  *
     22  */
     23 class 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 //----------------------------------------------------------------------------//
     49 namespace std {
     50 
     51 template <>
     52 struct 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