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