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 #include <string>
     13 
     14 namespace mcld {
     15 namespace sys  {
     16 namespace fs   {
     17 
     18 /** \class RealPath
     19  *  \brief The canonicalized absolute pathname.
     20  *
     21  */
     22 class RealPath : public Path
     23 {
     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 of fs
     43 } // namespace of sys
     44 } // namespace of mcld
     45 
     46 //-------------------------------------------------------------------------//
     47 //                              STL compatible functions                   //
     48 //-------------------------------------------------------------------------//
     49 namespace std {
     50 
     51 template<>
     52 struct less<mcld::sys::fs::RealPath> : public binary_function<
     53                                                      mcld::sys::fs::RealPath,
     54                                                      mcld::sys::fs::RealPath,
     55                                                      bool>
     56 {
     57   bool operator() (const mcld::sys::fs::RealPath& pX,
     58                    const mcld::sys::fs::RealPath& pY) const {
     59     if (pX.native().size() < pY.native().size())
     60       return true;
     61     return (pX.native() < pY.native());
     62   }
     63 };
     64 
     65 } // namespace of std
     66 
     67 
     68 #endif
     69 
     70