source: filezilla/trunk/fuentes/src/include/serverpath.h @ 130

Last change on this file since 130 was 130, checked in by jrpelegrina, 3 years ago

First release to xenial

File size: 2.6 KB
Line 
1#ifndef __SERVERPATH_H__
2#define __SERVERPATH_H__
3
4#include "optional.h"
5#include "refcount.h"
6
7#include <deque>
8
9class CServerPathData final
10{
11public:
12        std::deque<wxString> m_segments;
13        CSparseOptional<wxString> m_prefix;
14
15        bool operator==(const CServerPathData& cmp) const;
16};
17
18class CServerPath final
19{
20public:
21        CServerPath();
22        explicit CServerPath(wxString const& path, ServerType type = DEFAULT);
23        CServerPath(CServerPath const& path, wxString subdir); // Ignores parent on absolute subdir
24        CServerPath(CServerPath const& path) = default;
25        CServerPath(CServerPath && path) noexcept = default;
26
27        CServerPath& operator=(CServerPath const& op) = default;
28        CServerPath& operator=(CServerPath && op) noexcept = default;
29
30        bool empty() const { return !m_data; }
31        void clear();
32
33        bool SetPath(wxString newPath);
34        bool SetPath(wxString &newPath, bool isFile);
35        bool SetSafePath(const wxString& path);
36
37        // If ChangePath returns false, the object will be left
38        // empty.
39        bool ChangePath(wxString subdir);
40        bool ChangePath(wxString &subdir, bool isFile);
41
42        wxString GetPath() const;
43        wxString GetSafePath() const;
44
45        bool HasParent() const;
46        CServerPath GetParent() const;
47        wxString GetLastSegment() const;
48
49        CServerPath GetCommonParent(const CServerPath& path) const;
50
51        bool SetType(ServerType type);
52        ServerType GetType() const;
53
54        bool IsSubdirOf(const CServerPath &path, bool cmpNoCase) const;
55        bool IsParentOf(const CServerPath &path, bool cmpNoCase) const;
56
57        bool operator==(const CServerPath &op) const;
58        bool operator!=(const CServerPath &op) const;
59        bool operator<(const CServerPath &op) const;
60
61        int CmpNoCase(const CServerPath &op) const;
62
63        // omitPath is just a hint. For example dataset member names on MVS servers
64        // always use absolute filenames including the full path
65        wxString FormatFilename(const wxString &filename, bool omitPath = false) const;
66
67        // Returns identity on all but VMS. On VMS it esscapes dots
68        wxString FormatSubdir(const wxString &subdir) const;
69
70        bool AddSegment(const wxString& segment);
71
72        size_t SegmentCount() const;
73private:
74        bool DoSetSafePath(const wxString& path);
75        bool DoChangePath(wxString &subdir, bool isFile);
76
77        ServerType m_type;
78
79        typedef std::deque<wxString> tSegmentList;
80        typedef tSegmentList::iterator tSegmentIter;
81        typedef tSegmentList::const_iterator tConstSegmentIter;
82
83        bool Segmentize(wxString const& str, tSegmentList& segments);
84        bool SegmentizeAddSegment(wxString & segment, tSegmentList& segments, bool& append);
85        bool ExtractFile(wxString& dir, wxString& file);
86
87        static void EscapeSeparators(ServerType type, wxString& subdir);
88
89        CRefcountObject_Uninitialized<CServerPathData> m_data;
90};
91
92#endif
Note: See TracBrowser for help on using the repository browser.