/[svn]/linuxsampler/trunk/src/common/Path.h
ViewVC logotype

Annotation of /linuxsampler/trunk/src/common/Path.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1471 - (hide annotations) (download) (as text)
Mon Nov 5 13:56:26 2007 UTC (16 years, 5 months ago) by schoenebeck
File MIME type: text/x-c++hdr
File size: 4429 byte(s)
* LSCP server: added support for Windows style path / filenames, however
  with forward slash path separators instead of backslash
  (i.e. "C:/foo/bar.gig")

1 schoenebeck 1332 /***************************************************************************
2     * *
3     * Copyright (C) 2007 Christian Schoenebeck *
4     * *
5     * This library is free software; you can redistribute it and/or modify *
6     * it under the terms of the GNU General Public License as published by *
7     * the Free Software Foundation; either version 2 of the License, or *
8     * (at your option) any later version. *
9     * *
10     * This library is distributed in the hope that it will be useful, *
11     * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13     * GNU General Public License for more details. *
14     * *
15     * You should have received a copy of the GNU General Public License *
16     * along with this library; if not, write to the Free Software *
17     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
18     * MA 02111-1307 USA *
19     ***************************************************************************/
20    
21     #ifndef LS_PATH_H
22     #define LS_PATH_H
23    
24     #include <vector>
25     #include <string>
26    
27     namespace LinuxSampler {
28    
29     /** @brief Portable Path Abstraction
30     *
31     * Correct path and file names are dependent to the underlying OS and FS.
32     * Especially the set of forbidden characters (and their encodings / escape
33     * sequences) in path and file names differ on the various systems. This
34     * class is meant as a portable wrapper to circumvent these problems by
35     * storing the file names in its raw, human readable (intended) form and
36     * provides OS specific methods like @c toPosix() for converting the path into
37     * the correct encoding, as expected by the respective system.
38     *
39     * This class is currently only used internally by the LSCP parser. A lot
40     * generalization work would have to be done to use this class as a overall
41     * replacement for all @c char* / @c std::string file name arguments in the
42     * sampler or even its C++ API. Probably we'll use something like
43     * @c boost::filesystem::path instead of this class in future.
44     */
45     class Path {
46     public:
47 schoenebeck 1471 Path();
48    
49 schoenebeck 1332 /**
50     * Concatenate exactly one path node or filename to the end of this Path
51     * object. This can be used to build up a full qualified path, directory
52     * by directory.
53     *
54     * @param Name - name of the path node's name or filename in it's raw,
55     * human readable/expected form
56     */
57     void appendNode(std::string Name);
58    
59     /**
60 schoenebeck 1471 * Sets the hardware drive of the path, for systems that use the concept
61     * of drives in absolute pathes (i.e. Windows).
62     */
63     void setDrive(const char& Drive);
64    
65     /**
66 schoenebeck 1332 * Convert this Path into the correct encoding as expected by POSIX
67     * compliant system calls.
68     */
69 schoenebeck 1471 std::string toPosix() const;
70 schoenebeck 1332
71     /**
72 iliev 1345 * Convert this Path into the correct encoding as expected
73     * by the instruments database implementation.
74     */
75 schoenebeck 1471 std::string toDbPath() const;
76 iliev 1345
77     /**
78 schoenebeck 1399 * Convert this Path into the correct encoding as expected and needed
79     * for LSCP responses.
80     */
81 schoenebeck 1471 std::string toLscp() const;
82 schoenebeck 1399
83     /**
84 schoenebeck 1471 * Convert this Path into the correct encoding as expected by Windows
85     * operating systems.
86     */
87     std::string toWindows() const;
88    
89     /**
90 schoenebeck 1332 * Concatenate two paths.
91     */
92     Path operator+(const Path& p);
93    
94     /**
95     * Concatenate two paths.
96     */
97     Path operator+(const Path* p);
98    
99 schoenebeck 1399 /**
100     * Create a Path object from a POSIX path / filename string.
101     */
102     static Path fromPosix(std::string path);
103    
104 iliev 1403 /**
105     * Create a Path object from a DB path.
106     */
107     static Path fromDbPath(std::string path);
108    
109 schoenebeck 1471 /**
110     * Create a Path object from a Windows path / filename string.
111     */
112     static Path fromWindowsPath(std::string path);
113    
114 schoenebeck 1332 private:
115     std::vector<std::string> elements; ///< stores the path names raw = unencoded, each element is one node of the path
116 schoenebeck 1471 char drive;
117 schoenebeck 1332 };
118    
119     } // namespace LinuxSampler
120    
121     #endif // LS_PATH_H

  ViewVC Help
Powered by ViewVC