Mercurial > projects > dwt-addons
annotate dwtx/core/runtime/Path.d @ 94:dadb23ea55a6
Add version TANGOSVN
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Wed, 09 Jul 2008 23:23:56 +0200 |
parents | 7ffeace6c47f |
children | 1088ca33d3e0 |
rev | line source |
---|---|
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1 /******************************************************************************* |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
2 * Copyright (c) 2000, 2008 IBM Corporation and others. |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 * All rights reserved. This program and the accompanying materials |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
4 * are made available under the terms of the Eclipse Public License v1.0 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
5 * which accompanies this distribution, and is available at |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
6 * http://www.eclipse.org/legal/epl-v10.html |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
7 * |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 * Contributors: |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 * IBM Corporation - initial API and implementation |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
10 * Port to the D programming language: |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
11 * Frank Benoit <benoit@tionex.de> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 *******************************************************************************/ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 module dwtx.core.runtime.Path; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
14 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
15 import tango.io.FilePath; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
16 import dwtx.core.runtime.IPath; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
17 import dwtx.core.runtime.Assert; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
18 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
19 import dwt.dwthelper.utils; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
20 |
94 | 21 version(TANGOSVN) { |
22 import tango.io.model.IFile; | |
23 } | |
24 else{ | |
25 import tango.io.FileConst; | |
26 } | |
27 | |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
28 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 static import tango.text.Text; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 alias tango.text.Text.Text!(char) StringBuffer; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
31 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 * The standard implementation of the <code>IPath</code> interface. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 * Paths are always maintained in canonicalized form. That is, parent |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 * references (i.e., <code>../../</code>) and duplicate separators are |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 * resolved. For example, |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 * <pre> new Path("/a/b").append("../foo/bar")</pre> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 * will yield the path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 * <pre> /a/foo/bar</pre> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 * <p> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 * This class can be used without OSGi running. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
42 * </p><p> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
43 * This class is not intended to be subclassed by clients but |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
44 * may be instantiated. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 * </p> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 * @see IPath |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
47 * @noextend This class is not intended to be subclassed by clients. |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
48 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 public class Path : IPath, Cloneable { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
50 /** masks for separator values */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
51 private static const int HAS_LEADING = 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
52 private static const int IS_UNC = 2; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 private static const int HAS_TRAILING = 4; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
54 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
55 private static const int ALL_SEPARATORS = HAS_LEADING | IS_UNC | HAS_TRAILING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
56 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
57 /** Constant empty string value. */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
58 private static const String EMPTY_STRING = ""; //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
59 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
60 /** Constant value indicating no segments */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
61 private static const String[] NO_SEGMENTS = null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
62 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
63 /** Constant value containing the empty path with no device. */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
64 public static const Path EMPTY; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
65 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
66 /** Mask for all bits that are involved in the hash code */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
67 private static const int HASH_MASK = ~HAS_TRAILING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
68 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
69 /** Constant root path string (<code>"/"</code>). */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
70 private static const String ROOT_STRING = "/"; //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
71 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
72 /** Constant value containing the root path with no device. */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
73 public static const Path ROOT; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
74 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
75 /** Constant value indicating if the current platform is Windows */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
76 version(Windows){ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
77 private static const bool WINDOWS = true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
78 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
79 else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
80 private static const bool WINDOWS = false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
81 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
82 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
83 static this(){ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
84 EMPTY = new Path(EMPTY_STRING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
85 ROOT = new Path(ROOT_STRING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
86 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
87 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
88 /** The device id string. May be null if there is no device. */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
89 private String device = null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
90 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
91 //Private implementation note: the segments and separators |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
92 //arrays are never modified, so that they can be shared between |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
93 //path instances |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
94 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
95 /** The path segments */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
96 private String[] segments_; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
97 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
98 /** flags indicating separators (has leading, is UNC, has trailing) */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
99 private int separators; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
100 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
101 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
102 * Constructs a new path from the given string path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
103 * The string path must represent a valid file system path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
104 * on the local file system. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
105 * The path is canonicalized and double slashes are removed |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
106 * except at the beginning. (to handle UNC paths). All forward |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
107 * slashes ('/') are treated as segment delimiters, and any |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
108 * segment and device delimiters for the local file system are |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
109 * also respected. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
110 * |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
111 * @param pathString the portable string path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
112 * @see IPath#toPortableString() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
113 * @since 3.1 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
114 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
115 public static IPath fromOSString(String pathString) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
116 return new Path(pathString); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
117 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
118 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
119 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
120 * Constructs a new path from the given path string. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
121 * The path string must have been produced by a previous |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
122 * call to <code>IPath.toPortableString</code>. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
123 * |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
124 * @param pathString the portable path string |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
125 * @see IPath#toPortableString() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
126 * @since 3.1 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
127 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
128 public static IPath fromPortableString(String pathString) { |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
129 int firstMatch = pathString.indexOf(DEVICE_SEPARATOR) + 1; |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
130 //no extra work required if no device characters |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
131 if (firstMatch <= 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
132 return (new Path()).initialize(null, pathString); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
133 //if we find a single colon, then the path has a device |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
134 String devicePart = null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
135 int pathLength = pathString.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
136 if (firstMatch is pathLength || pathString.charAt(firstMatch) !is DEVICE_SEPARATOR) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
137 devicePart = pathString.substring(0, firstMatch); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
138 pathString = pathString.substring(firstMatch, pathLength); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
139 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
140 //optimize for no colon literals |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
141 if (pathString.indexOf(DEVICE_SEPARATOR) is -1) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
142 return (new Path()).initialize(devicePart, pathString); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
143 //contract colon literals |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
144 char[] chars = pathString/+.toCharArray()+/; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
145 int readOffset = 0, writeOffset = 0, length = chars.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
146 while (readOffset < length) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
147 if (chars[readOffset] is DEVICE_SEPARATOR) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
148 if (++readOffset >= length) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
149 break; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
150 chars[writeOffset++] = chars[readOffset++]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
151 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
152 return (new Path()).initialize(devicePart, chars[ 0 .. writeOffset] ); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
153 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
154 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
155 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
156 * Private constructor. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
157 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
158 private this() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
159 // not allowed |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
160 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
161 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
162 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
163 * Constructs a new path from the given string path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
164 * The string path must represent a valid file system path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
165 * on the local file system. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
166 * The path is canonicalized and double slashes are removed |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
167 * except at the beginning. (to handle UNC paths). All forward |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
168 * slashes ('/') are treated as segment delimiters, and any |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
169 * segment and device delimiters for the local file system are |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
170 * also respected (such as colon (':') and backslash ('\') on some file systems). |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
171 * |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
172 * @param fullPath the string path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
173 * @see #isValidPath(String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
174 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
175 public this(String fullPath) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
176 String devicePart = null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
177 if (WINDOWS) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
178 //convert backslash to forward slash |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
179 fullPath = fullPath.indexOf('\\') is -1 ? fullPath : fullPath.replace('\\', SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
180 //extract device |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
181 int i = fullPath.indexOf(DEVICE_SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
182 if (i !is -1) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
183 //remove leading slash from device part to handle output of URL.getFile() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
184 int start = fullPath.charAt(0) is SEPARATOR ? 1 : 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
185 devicePart = fullPath.substring(start, i + 1); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
186 fullPath = fullPath.substring(i + 1, fullPath.length); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
187 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
188 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
189 initialize(devicePart, fullPath); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
190 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
191 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
192 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
193 * Constructs a new path from the given device id and string path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
194 * The given string path must be valid. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
195 * The path is canonicalized and double slashes are removed except |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
196 * at the beginning (to handle UNC paths). All forward |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
197 * slashes ('/') are treated as segment delimiters, and any |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
198 * segment delimiters for the local file system are |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
199 * also respected (such as backslash ('\') on some file systems). |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
200 * |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
201 * @param device the device id |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
202 * @param path the string path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
203 * @see #isValidPath(String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
204 * @see #setDevice(String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
205 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
206 public this(String device, String path) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
207 if (WINDOWS) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
208 //convert backslash to forward slash |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
209 path = path.indexOf('\\') is -1 ? path : path.replace('\\', SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
210 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
211 initialize(device, path); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
212 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
213 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
214 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
215 * Private constructor. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
216 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
217 private this(String device, String[] segments_, int _separators) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
218 // no segment validations are done for performance reasons |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
219 this.segments_ = segments_; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
220 this.device = device; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
221 //hash code is cached in all but the bottom three bits of the separators field |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
222 this.separators = (computeHashCode() << 3) | (_separators & ALL_SEPARATORS); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
223 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
224 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
225 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
226 * @see IPath#addFileExtension |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
227 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
228 public IPath addFileExtension(String extension) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
229 if (isRoot() || isEmpty() || hasTrailingSeparator()) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
230 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
231 int len = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
232 String[] newSegments = new String[len]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
233 System.arraycopy(segments_, 0, newSegments, 0, len - 1); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
234 newSegments[len - 1] = segments_[len - 1] ~ '.' ~ extension; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
235 return new Path(device, newSegments, separators); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
236 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
237 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
238 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
239 * @see IPath#addTrailingSeparator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
240 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
241 public IPath addTrailingSeparator() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
242 if (hasTrailingSeparator() || isRoot()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
243 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
244 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
245 //XXX workaround, see 1GIGQ9V |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
246 if (isEmpty()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
247 return new Path(device, segments_, HAS_LEADING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
248 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
249 return new Path(device, segments_, separators | HAS_TRAILING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
250 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
251 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
252 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
253 * @see IPath#append(IPath) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
254 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
255 public IPath append(IPath tail) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
256 //optimize some easy cases |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
257 if (tail is null || tail.segmentCount() is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
258 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
259 //these call chains look expensive, but in most cases they are no-ops |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
260 if (this.isEmpty()) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
261 return tail.setDevice(device).makeRelative().makeUNC(isUNC()); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
262 if (this.isRoot()) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
263 return tail.setDevice(device).makeAbsolute().makeUNC(isUNC()); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
264 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
265 //concatenate the two segment arrays |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
266 int myLen = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
267 int tailLen = tail.segmentCount(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
268 String[] newSegments = new String[myLen + tailLen]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
269 System.arraycopy(segments_, 0, newSegments, 0, myLen); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
270 for (int i = 0; i < tailLen; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
271 newSegments[myLen + i] = tail.segment(i); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
272 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
273 //use my leading separators and the tail's trailing separator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
274 Path result = new Path(device, newSegments, (separators & (HAS_LEADING | IS_UNC)) | (tail.hasTrailingSeparator() ? HAS_TRAILING : 0)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
275 String tailFirstSegment = newSegments[myLen]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
276 if (tailFirstSegment.equals("..") || tailFirstSegment.equals(".")) { //$NON-NLS-1$ //$NON-NLS-2$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
277 result.canonicalize(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
278 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
279 return result; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
280 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
281 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
282 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
283 * @see IPath#append(java.lang.String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
284 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
285 public IPath append(String tail) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
286 //optimize addition of a single segment |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
287 if (tail.indexOf(SEPARATOR) is -1 && tail.indexOf("\\") is -1 && tail.indexOf(DEVICE_SEPARATOR) is -1) { //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
288 int tailLength = tail.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
289 if (tailLength < 3) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
290 //some special cases |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
291 if (tailLength is 0 || ".".equals(tail)) { //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
292 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
293 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
294 if ("..".equals(tail)) //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
295 return removeLastSegments(1); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
296 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
297 //just add the segment |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
298 int myLen = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
299 String[] newSegments = new String[myLen + 1]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
300 System.arraycopy(segments_, 0, newSegments, 0, myLen); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
301 newSegments[myLen] = tail; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
302 return new Path(device, newSegments, separators & ~HAS_TRAILING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
303 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
304 //go with easy implementation |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
305 return append(new Path(tail)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
306 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
307 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
308 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
309 * Destructively converts this path to its canonical form. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
310 * <p> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
311 * In its canonical form, a path does not have any |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
312 * "." segments, and parent references ("..") are collapsed |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
313 * where possible. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
314 * </p> |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
315 * @return true if the path was modified, and false otherwise. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
316 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
317 private bool canonicalize() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
318 //look for segments that need canonicalizing |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
319 for (int i = 0, max = segments_.length; i < max; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
320 String segment = segments_[i]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
321 if (segment.charAt(0) is '.' && (segment.equals("..") || segment.equals("."))) { //$NON-NLS-1$ //$NON-NLS-2$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
322 //path needs to be canonicalized |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
323 collapseParentReferences(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
324 //paths of length 0 have no trailing separator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
325 if (segments_.length is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
326 separators &= (HAS_LEADING | IS_UNC); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
327 //recompute hash because canonicalize affects hash |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
328 separators = (separators & ALL_SEPARATORS) | (computeHashCode() << 3); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
329 return true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
330 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
331 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
332 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
333 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
334 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
335 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
336 * Clones this object. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
337 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
338 public Path clone() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
339 return new Path(device, segments_, separators); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
340 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
341 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
342 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
343 * Destructively removes all occurrences of ".." segments from this path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
344 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
345 private void collapseParentReferences() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
346 int segmentCount = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
347 String[] stack = new String[segmentCount]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
348 int stackPointer = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
349 for (int i = 0; i < segmentCount; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
350 String segment = segments_[i]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
351 if (segment.equals("..")) { //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
352 if (stackPointer is 0) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
353 // if the stack is empty we are going out of our scope |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
354 // so we need to accumulate segments. But only if the original |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
355 // path is relative. If it is absolute then we can't go any higher than |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
356 // root so simply toss the .. references. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
357 if (!isAbsolute()) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
358 stack[stackPointer++] = segment; //stack push |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
359 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
360 // if the top is '..' then we are accumulating segments so don't pop |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
361 if ("..".equals(stack[stackPointer - 1])) //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
362 stack[stackPointer++] = ".."; //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
363 else |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
364 stackPointer--; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
365 //stack pop |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
366 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
367 //collapse current references |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
368 } else if (!segment.equals(".") || segmentCount is 1) //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
369 stack[stackPointer++] = segment; //stack push |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
370 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
371 //if the number of segments hasn't changed, then no modification needed |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
372 if (stackPointer is segmentCount) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
373 return; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
374 //build the new segment array backwards by popping the stack |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
375 String[] newSegments = new String[stackPointer]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
376 System.arraycopy(stack, 0, newSegments, 0, stackPointer); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
377 this.segments_ = newSegments; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
378 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
379 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
380 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
381 * Removes duplicate slashes from the given path, with the exception |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
382 * of leading double slash which represents a UNC path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
383 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
384 private String collapseSlashes(String path) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
385 int length = path.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
386 // if the path is only 0, 1 or 2 chars long then it could not possibly have illegal |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
387 // duplicate slashes. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
388 if (length < 3) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
389 return path; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
390 // check for an occurrence of // in the path. Start at index 1 to ensure we skip leading UNC // |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
391 // If there are no // then there is nothing to collapse so just return. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
392 if (path.indexOf("//", 1) is -1) //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
393 return path; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
394 // We found an occurrence of // in the path so do the slow collapse. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
395 char[] result = new char[path.length]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
396 int count = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
397 bool hasPrevious = false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
398 char[] characters = path/+.toCharArray()+/; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
399 for (int index = 0; index < characters.length; index++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
400 char c = characters[index]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
401 if (c is SEPARATOR) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
402 if (hasPrevious) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
403 // skip double slashes, except for beginning of UNC. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
404 // note that a UNC path can't have a device. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
405 if (device is null && index is 1) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
406 result[count] = c; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
407 count++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
408 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
409 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
410 hasPrevious = true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
411 result[count] = c; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
412 count++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
413 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
414 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
415 hasPrevious = false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
416 result[count] = c; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
417 count++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
418 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
419 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
420 return result[ 0 .. count]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
421 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
422 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
423 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
424 * Computes the hash code for this object. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
425 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
426 private int computeHashCode() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
427 int hash = device.length is 0 ? 17 : dwt.dwthelper.utils.toHash(device); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
428 int segmentCount = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
429 for (int i = 0; i < segmentCount; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
430 //this function tends to given a fairly even distribution |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
431 hash = hash * 37 + dwt.dwthelper.utils.toHash(segments_[i]); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
432 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
433 return hash; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
434 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
435 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
436 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
437 * Returns the size of the string that will be created by toString or toOSString. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
438 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
439 private int computeLength() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
440 int length = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
441 if (device !is null) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
442 length += device.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
443 if ((separators & HAS_LEADING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
444 length++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
445 if ((separators & IS_UNC) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
446 length++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
447 //add the segment lengths |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
448 int max = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
449 if (max > 0) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
450 for (int i = 0; i < max; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
451 length += segments_[i].length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
452 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
453 //add the separator lengths |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
454 length += max - 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
455 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
456 if ((separators & HAS_TRAILING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
457 length++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
458 return length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
459 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
460 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
461 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
462 * Returns the number of segments in the given path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
463 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
464 private int computeSegmentCount(String path) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
465 int len = path.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
466 if (len is 0 || (len is 1 && path.charAt(0) is SEPARATOR)) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
467 return 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
468 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
469 int count = 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
470 int prev = -1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
471 int i; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
472 while ((i = path.indexOf(SEPARATOR, prev + 1)) !is -1) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
473 if (i !is prev + 1 && i !is len) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
474 ++count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
475 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
476 prev = i; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
477 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
478 if (path.charAt(len - 1) is SEPARATOR) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
479 --count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
480 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
481 return count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
482 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
483 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
484 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
485 * Computes the segment array for the given canonicalized path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
486 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
487 private String[] computeSegments(String path) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
488 // performance sensitive --- avoid creating garbage |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
489 int segmentCount = computeSegmentCount(path); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
490 if (segmentCount is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
491 return NO_SEGMENTS; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
492 String[] newSegments = new String[segmentCount]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
493 int len = path.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
494 // check for initial slash |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
495 int firstPosition = (path.charAt(0) is SEPARATOR) ? 1 : 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
496 // check for UNC |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
497 if (firstPosition is 1 && len > 1 && (path.charAt(1) is SEPARATOR)) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
498 firstPosition = 2; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
499 int lastPosition = (path.charAt(len - 1) !is SEPARATOR) ? len - 1 : len - 2; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
500 // for non-empty paths, the number of segments is |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
501 // the number of slashes plus 1, ignoring any leading |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
502 // and trailing slashes |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
503 int next = firstPosition; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
504 for (int i = 0; i < segmentCount; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
505 int start = next; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
506 int end = path.indexOf(SEPARATOR, next); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
507 if (end is -1) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
508 newSegments[i] = path.substring(start, lastPosition + 1); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
509 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
510 newSegments[i] = path.substring(start, end); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
511 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
512 next = end + 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
513 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
514 return newSegments; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
515 } |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
516 |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
517 /** |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
518 * Returns the platform-neutral encoding of the given segment onto |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
519 * the given string buffer. This escapes literal colon characters with double colons. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
520 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
521 private void encodeSegment(String string, StringBuffer buf) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
522 int len = string.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
523 for (int i = 0; i < len; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
524 char c = string.charAt(i); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
525 buf.append(c); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
526 if (c is DEVICE_SEPARATOR) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
527 buf.append(DEVICE_SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
528 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
529 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
530 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
531 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
532 * Compares objects for equality. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
533 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
534 public override int opEquals(Object obj) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
535 if (this is obj) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
536 return true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
537 if (!(cast(Path)obj)) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
538 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
539 Path target = cast(Path) obj; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
540 //check leading separators and hash code |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
541 if ((separators & HASH_MASK) !is (target.separators & HASH_MASK)) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
542 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
543 String[] targetSegments = target.segments_; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
544 int i = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
545 //check segment count |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
546 if (i !is targetSegments.length) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
547 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
548 //check segments in reverse order - later segments more likely to differ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
549 while (--i >= 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
550 if (!segments_[i].equals(targetSegments[i])) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
551 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
552 //check device last (least likely to differ) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
553 return device is target.device || (device !is null && device.equals(target.device)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
554 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
555 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
556 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
557 * @see IPath#getDevice |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
558 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
559 public String getDevice() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
560 return device; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
561 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
562 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
563 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
564 * @see IPath#getFileExtension |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
565 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
566 public String getFileExtension() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
567 if (hasTrailingSeparator()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
568 return null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
569 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
570 String lastSegment = lastSegment(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
571 if (lastSegment is null) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
572 return null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
573 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
574 int index = lastSegment.lastIndexOf('.'); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
575 if (index is -1) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
576 return null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
577 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
578 return lastSegment.substring(index + 1); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
579 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
580 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
581 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
582 * Computes the hash code for this object. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
583 */ |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
3
diff
changeset
|
584 public override hash_t toHash() { |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
585 return separators & HASH_MASK; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
586 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
587 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
588 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
589 * @see IPath#hasTrailingSeparator2 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
590 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
591 public bool hasTrailingSeparator() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
592 return (separators & HAS_TRAILING) !is 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
593 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
594 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
595 /* |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
596 * Initialize the current path with the given string. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
597 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
598 private IPath initialize(String deviceString, String path) { |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
599 //Assert.isNotNull(path); // allow for DWT |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
600 this.device = deviceString; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
601 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
602 path = collapseSlashes(path); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
603 int len = path.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
604 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
605 //compute the separators array |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
606 if (len < 2) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
607 if (len is 1 && path.charAt(0) is SEPARATOR) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
608 this.separators = HAS_LEADING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
609 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
610 this.separators = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
611 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
612 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
613 bool hasLeading = path.charAt(0) is SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
614 bool isUNC = hasLeading && path.charAt(1) is SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
615 //UNC path of length two has no trailing separator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
616 bool hasTrailing = !(isUNC && len is 2) && path.charAt(len - 1) is SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
617 separators = hasLeading ? HAS_LEADING : 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
618 if (isUNC) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
619 separators |= IS_UNC; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
620 if (hasTrailing) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
621 separators |= HAS_TRAILING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
622 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
623 //compute segments and ensure canonical form |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
624 segments_ = computeSegments(path); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
625 if (!canonicalize()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
626 //compute hash now because canonicalize didn't need to do it |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
627 separators = (separators & ALL_SEPARATORS) | (computeHashCode() << 3); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
628 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
629 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
630 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
631 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
632 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
633 * @see IPath#isAbsolute |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
634 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
635 public bool isAbsolute() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
636 //it's absolute if it has a leading separator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
637 return (separators & HAS_LEADING) !is 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
638 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
639 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
640 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
641 * @see IPath#isEmpty |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
642 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
643 public bool isEmpty() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
644 //true if no segments and no leading prefix |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
645 return segments_.length is 0 && ((separators & ALL_SEPARATORS) !is HAS_LEADING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
646 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
647 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
648 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
649 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
650 * @see IPath#isPrefixOf |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
651 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
652 public bool isPrefixOf(IPath anotherPath) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
653 if (device is null) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
654 if (anotherPath.getDevice() !is null) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
655 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
656 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
657 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
658 if (!device.equalsIgnoreCase(anotherPath.getDevice())) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
659 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
660 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
661 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
662 if (isEmpty() || (isRoot() && anotherPath.isAbsolute())) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
663 return true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
664 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
665 int len = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
666 if (len > anotherPath.segmentCount()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
667 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
668 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
669 for (int i = 0; i < len; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
670 if (!segments_[i].equals(anotherPath.segment(i))) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
671 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
672 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
673 return true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
674 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
675 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
676 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
677 * @see IPath#isRoot |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
678 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
679 public bool isRoot() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
680 //must have no segments, a leading separator, and not be a UNC path. |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
681 return this is ROOT || (segments_.length is 0 && ((separators & ALL_SEPARATORS) is HAS_LEADING)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
682 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
683 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
684 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
685 * @see IPath#isUNC |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
686 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
687 public bool isUNC() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
688 if (device !is null) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
689 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
690 return (separators & IS_UNC) !is 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
691 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
692 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
693 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
694 * @see IPath#isValidPath(String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
695 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
696 public bool isValidPath(String path) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
697 Path test = new Path(path); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
698 for (int i = 0, max = test.segmentCount(); i < max; i++) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
699 if (!isValidSegment(test.segment(i))) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
700 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
701 return true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
702 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
703 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
704 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
705 * @see IPath#isValidSegment(String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
706 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
707 public bool isValidSegment(String segment) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
708 int size = segment.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
709 if (size is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
710 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
711 for (int i = 0; i < size; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
712 char c = segment.charAt(i); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
713 if (c is '/') |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
714 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
715 if (WINDOWS && (c is '\\' || c is ':')) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
716 return false; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
717 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
718 return true; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
719 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
720 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
721 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
722 * @see IPath#lastSegment() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
723 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
724 public String lastSegment() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
725 int len = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
726 return len is 0 ? null : segments_[len - 1]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
727 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
728 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
729 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
730 * @see IPath#makeAbsolute() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
731 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
732 public IPath makeAbsolute() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
733 if (isAbsolute()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
734 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
735 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
736 Path result = new Path(device, segments_, separators | HAS_LEADING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
737 //may need canonicalizing if it has leading ".." or "." segments |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
738 if (result.segmentCount() > 0) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
739 String first = result.segment(0); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
740 if (first.equals("..") || first.equals(".")) { //$NON-NLS-1$ //$NON-NLS-2$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
741 result.canonicalize(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
742 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
743 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
744 return result; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
745 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
746 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
747 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
748 * @see IPath#makeRelative() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
749 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
750 public IPath makeRelative() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
751 if (!isAbsolute()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
752 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
753 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
754 return new Path(device, segments_, separators & HAS_TRAILING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
755 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
756 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
757 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
758 * @see IPath#makeUNC(bool) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
759 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
760 public IPath makeUNC(bool toUNC) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
761 // if we are already in the right form then just return |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
762 if (!(toUNC ^ isUNC())) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
763 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
764 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
765 int newSeparators = this.separators; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
766 if (toUNC) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
767 newSeparators |= HAS_LEADING | IS_UNC; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
768 } else { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
769 //mask out the UNC bit |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
770 newSeparators &= HAS_LEADING | HAS_TRAILING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
771 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
772 return new Path(toUNC ? null : device, segments_, newSeparators); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
773 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
774 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
775 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
776 * @see IPath#matchingFirstSegments(IPath) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
777 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
778 public int matchingFirstSegments(IPath anotherPath) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
779 Assert.isNotNull( cast(Object) anotherPath); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
780 int anotherPathLen = anotherPath.segmentCount(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
781 int max = Math.min(segments_.length, anotherPathLen); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
782 int count = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
783 for (int i = 0; i < max; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
784 if (!segments_[i].equals(anotherPath.segment(i))) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
785 return count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
786 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
787 count++; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
788 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
789 return count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
790 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
791 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
792 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
793 * @see IPath#removeFileExtension() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
794 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
795 public IPath removeFileExtension() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
796 String extension = getFileExtension(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
797 if (extension is null || extension.equals("")) { //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
798 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
799 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
800 String lastSegment = lastSegment(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
801 int index = lastSegment.lastIndexOf(extension) - 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
802 return removeLastSegments(1).append(lastSegment.substring(0, index)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
803 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
804 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
805 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
806 * @see IPath#removeFirstSegments(int) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
807 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
808 public IPath removeFirstSegments(int count) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
809 if (count is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
810 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
811 if (count >= segments_.length) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
812 return new Path(device, NO_SEGMENTS, 0); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
813 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
814 Assert.isLegal(count > 0); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
815 int newSize = segments_.length - count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
816 String[] newSegments = new String[newSize]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
817 System.arraycopy(this.segments_, count, newSegments, 0, newSize); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
818 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
819 //result is always a relative path |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
820 return new Path(device, newSegments, separators & HAS_TRAILING); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
821 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
822 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
823 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
824 * @see IPath#removeLastSegments(int) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
825 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
826 public IPath removeLastSegments(int count) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
827 if (count is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
828 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
829 if (count >= segments_.length) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
830 //result will have no trailing separator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
831 return new Path(device, NO_SEGMENTS, separators & (HAS_LEADING | IS_UNC)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
832 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
833 Assert.isLegal(count > 0); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
834 int newSize = segments_.length - count; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
835 String[] newSegments = new String[newSize]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
836 System.arraycopy(this.segments_, 0, newSegments, 0, newSize); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
837 return new Path(device, newSegments, separators); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
838 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
839 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
840 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
841 * @see IPath#removeTrailingSeparator() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
842 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
843 public IPath removeTrailingSeparator() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
844 if (!hasTrailingSeparator()) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
845 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
846 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
847 return new Path(device, segments_, separators & (HAS_LEADING | IS_UNC)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
848 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
849 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
850 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
851 * @see IPath#segment(int) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
852 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
853 public String segment(int index) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
854 if (index >= segments_.length) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
855 return null; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
856 return segments_[index]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
857 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
858 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
859 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
860 * @see IPath#segmentCount() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
861 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
862 public int segmentCount() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
863 return segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
864 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
865 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
866 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
867 * @see IPath#segments() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
868 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
869 public String[] segments() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
870 String[] segmentCopy = new String[](segments_.length); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
871 System.arraycopy(segments_, 0, segmentCopy, 0, segments_.length); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
872 return segmentCopy; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
873 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
874 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
875 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
876 * @see IPath#setDevice(String) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
877 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
878 public IPath setDevice(String value) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
879 if (value !is null) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
880 Assert.isTrue(value.indexOf(IPath.DEVICE_SEPARATOR) is (value.length - 1), "Last character should be the device separator"); //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
881 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
882 //return the receiver if the device is the same |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
883 if (value is device || (value !is null && value.equals(device))) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
884 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
885 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
886 return new Path(value, segments_, separators); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
887 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
888 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
889 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
890 * @see IPath#toFile() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
891 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
892 public FilePath toFile() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
893 return new FilePath(toOSString()); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
894 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
895 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
896 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
897 * @see IPath#toOSString() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
898 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
899 public String toOSString() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
900 //Note that this method is identical to toString except |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
901 //it uses the OS file separator instead of the path separator |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
902 int resultSize = computeLength(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
903 if (resultSize <= 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
904 return EMPTY_STRING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
905 char FILE_SEPARATOR = FileConst.PathSeparatorChar; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
906 char[] result = new char[resultSize]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
907 int offset = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
908 if (device !is null) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
909 int size = device.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
910 device.getChars(0, size, result, offset); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
911 offset += size; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
912 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
913 if ((separators & HAS_LEADING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
914 result[offset++] = FILE_SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
915 if ((separators & IS_UNC) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
916 result[offset++] = FILE_SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
917 int len = segments_.length - 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
918 if (len >= 0) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
919 //append all but the last segment, with separators |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
920 for (int i = 0; i < len; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
921 int size = segments_[i].length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
922 segments_[i].getChars(0, size, result, offset); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
923 offset += size; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
924 result[offset++] = FILE_SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
925 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
926 //append the last segment |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
927 int size = segments_[len].length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
928 segments_[len].getChars(0, size, result, offset); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
929 offset += size; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
930 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
931 if ((separators & HAS_TRAILING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
932 result[offset++] = FILE_SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
933 return result; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
934 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
935 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
936 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
937 * @see IPath#toPortableString() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
938 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
939 public String toPortableString() { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
940 int resultSize = computeLength(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
941 if (resultSize <= 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
942 return EMPTY_STRING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
943 StringBuffer result = new StringBuffer(resultSize); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
944 if (device !is null) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
945 result.append(device); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
946 if ((separators & HAS_LEADING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
947 result.append(SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
948 if ((separators & IS_UNC) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
949 result.append(SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
950 int len = segments_.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
951 //append all segments with separators |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
952 for (int i = 0; i < len; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
953 if (segments_[i].indexOf(DEVICE_SEPARATOR) >= 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
954 encodeSegment(segments_[i], result); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
955 else |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
956 result.append(segments_[i]); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
957 if (i < len - 1 || (separators & HAS_TRAILING) !is 0) |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
958 result.append(SEPARATOR); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
959 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
960 return result.toString(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
961 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
962 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
963 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
964 * @see IPath#toString() |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
965 */ |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
3
diff
changeset
|
966 public override String toString() { |
3
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
967 int resultSize = computeLength(); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
968 if (resultSize <= 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
969 return EMPTY_STRING; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
970 char[] result = new char[resultSize]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
971 int offset = 0; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
972 if (device !is null) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
973 int size = device.length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
974 device.getChars(0, size, result, offset); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
975 offset += size; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
976 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
977 if ((separators & HAS_LEADING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
978 result[offset++] = SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
979 if ((separators & IS_UNC) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
980 result[offset++] = SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
981 int len = segments_.length - 1; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
982 if (len >= 0) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
983 //append all but the last segment, with separators |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
984 for (int i = 0; i < len; i++) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
985 int size = segments_[i].length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
986 segments_[i].getChars(0, size, result, offset); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
987 offset += size; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
988 result[offset++] = SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
989 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
990 //append the last segment |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
991 int size = segments_[len].length; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
992 segments_[len].getChars(0, size, result, offset); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
993 offset += size; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
994 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
995 if ((separators & HAS_TRAILING) !is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
996 result[offset++] = SEPARATOR; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
997 return result; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
998 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
999 |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1000 /* (Intentionally not included in javadoc) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1001 * @see IPath#uptoSegment(int) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1002 */ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1003 public IPath uptoSegment(int count) { |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1004 if (count is 0) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1005 return new Path(device, NO_SEGMENTS, separators & (HAS_LEADING | IS_UNC)); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1006 if (count >= segments_.length) |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1007 return this; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1008 Assert.isTrue(count > 0, "Invalid parameter to Path.uptoSegment"); //$NON-NLS-1$ |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1009 String[] newSegments = new String[count]; |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1010 System.arraycopy(segments_, 0, newSegments, 0, count); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1011 return new Path(device, newSegments, separators); |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1012 } |
6518c18a01f7
eclipse.core package without osgi dependencies
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1013 } |