Skip to content

Commit b87f1d5

Browse files
committed
Enumeration for Separators
1 parent fcb78fd commit b87f1d5

4 files changed

Lines changed: 244 additions & 9 deletions

File tree

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
using System;
2+
3+
namespace Abstract.FileSystem.Internals
4+
{
5+
/// <summary>
6+
/// Base for enumerations
7+
/// </summary>
8+
public abstract class Enumeration : IComparable
9+
{
10+
/// <summary>
11+
/// Gets the Id
12+
/// </summary>
13+
public int Id { get; }
14+
15+
/// <summary>
16+
/// Gets the Name
17+
/// </summary>
18+
public string Name { get; }
19+
20+
protected Enumeration(string name)
21+
{
22+
Id = 0;
23+
Name = name;
24+
}
25+
26+
protected Enumeration(int id, string name)
27+
{
28+
Id = id;
29+
Name = name;
30+
}
31+
32+
/// <summary>
33+
/// The string value
34+
/// </summary>
35+
/// <returns></returns>
36+
public override string ToString()
37+
{
38+
return Name;
39+
}
40+
41+
/// <summary>
42+
/// Gets the lower string value
43+
/// </summary>
44+
/// <returns></returns>
45+
public string ToLower()
46+
{
47+
return Name.ToLower();
48+
}
49+
50+
/// <summary>
51+
///
52+
/// </summary>
53+
/// <param name="obj"></param>
54+
/// <returns></returns>
55+
public int CompareTo(object obj)
56+
{
57+
if (Id.CompareTo(((Enumeration)obj).Id) > 0 || string.Compare(Name, ((Enumeration)obj).Name, StringComparison.Ordinal) > 0)
58+
{
59+
return 1;
60+
}
61+
62+
if (Id.CompareTo(((Enumeration)obj).Id) == 0 && string.Compare(Name, ((Enumeration)obj).Name, StringComparison.Ordinal) == 0)
63+
{
64+
return 0;
65+
}
66+
67+
return -1;
68+
}
69+
70+
/// <summary>
71+
///
72+
/// </summary>
73+
/// <param name="left"></param>
74+
/// <param name="right"></param>
75+
/// <returns></returns>
76+
public static int Compare(Enumeration left, Enumeration right)
77+
{
78+
if (ReferenceEquals(left, right))
79+
{
80+
return 0;
81+
}
82+
83+
if (left is null)
84+
{
85+
return -1;
86+
}
87+
88+
return left.CompareTo(right);
89+
}
90+
91+
/// <summary>
92+
///
93+
/// </summary>
94+
/// <param name="obj"></param>
95+
/// <returns></returns>
96+
public override bool Equals(object obj)
97+
{
98+
if (obj is string v)
99+
{
100+
return ToString() == v;
101+
}
102+
103+
return obj is Enumeration en && en.Id == Id && en.ToLower() == ToLower();
104+
}
105+
106+
/// <summary>
107+
///
108+
/// </summary>
109+
/// <returns></returns>
110+
public override int GetHashCode()
111+
{
112+
return new { Id, Name }.GetHashCode();
113+
}
114+
115+
/// <summary>
116+
///
117+
/// </summary>
118+
/// <param name="en"></param>
119+
public static implicit operator string(Enumeration en)
120+
{
121+
return en.ToString();
122+
}
123+
124+
/// <summary>
125+
///
126+
/// </summary>
127+
/// <param name="left"></param>
128+
/// <param name="right"></param>
129+
/// <returns></returns>
130+
public static bool operator ==(Enumeration left, Enumeration right)
131+
{
132+
if (left is null)
133+
{
134+
return right is null;
135+
}
136+
137+
return left.Equals(right);
138+
}
139+
140+
/// <summary>
141+
///
142+
/// </summary>
143+
/// <param name="left"></param>
144+
/// <param name="right"></param>
145+
/// <returns></returns>
146+
public static bool operator !=(Enumeration left, Enumeration right)
147+
{
148+
return !(left == right);
149+
}
150+
151+
/// <summary>
152+
///
153+
/// </summary>
154+
/// <param name="left"></param>
155+
/// <param name="right"></param>
156+
/// <returns></returns>
157+
public static bool operator <(Enumeration left, Enumeration right)
158+
{
159+
return Compare(left, right) < 0;
160+
}
161+
162+
/// <summary>
163+
///
164+
/// </summary>
165+
/// <param name="left"></param>
166+
/// <param name="right"></param>
167+
/// <returns></returns>
168+
public static bool operator <=(Enumeration left, Enumeration right)
169+
{
170+
return Compare(left, right) <= 0;
171+
}
172+
173+
/// <summary>
174+
///
175+
/// </summary>
176+
/// <param name="left"></param>
177+
/// <param name="right"></param>
178+
/// <returns></returns>
179+
public static bool operator >(Enumeration left, Enumeration right)
180+
{
181+
return Compare(left, right) > 0;
182+
}
183+
184+
/// <summary>
185+
///
186+
/// </summary>
187+
/// <param name="left"></param>
188+
/// <param name="right"></param>
189+
/// <returns></returns>
190+
public static bool operator >=(Enumeration left, Enumeration right)
191+
{
192+
return Compare(left, right) >= 0;
193+
}
194+
}
195+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using Abstract.FileSystem.Internals;
2+
3+
namespace Abstract.FileSystem
4+
{
5+
/// <summary>
6+
/// Enumeration for separators
7+
/// </summary>
8+
public class Separator : Enumeration
9+
{
10+
/// <summary>
11+
/// Define the separator
12+
/// </summary>
13+
/// <param name="name"></param>
14+
public Separator(string name) : base(name)
15+
{
16+
}
17+
18+
/// <summary>
19+
/// Slash separator /
20+
/// </summary>
21+
public static readonly Separator Slash = new Separator("/");
22+
23+
/// <summary>
24+
/// Backsalsh separator \
25+
/// </summary>
26+
public static readonly Separator Backslash = new Separator("\\");
27+
28+
/// <summary>
29+
/// Separator for Windows systems \
30+
/// </summary>
31+
public static readonly Separator WinSeparator = new Separator("\\");
32+
33+
/// <summary>
34+
/// Separator for Unix systems /
35+
/// </summary>
36+
public static readonly Separator UnixSeparator = new Separator("/");
37+
38+
/// <summary>
39+
/// Separator for UNC Path \\
40+
/// </summary>
41+
42+
public static readonly Separator UncSeparator = new Separator("\\\\");
43+
}
44+
}

src/Abstract.FileSystem/StringExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public static class StringExtensions
1616
/// <returns></returns>
1717
public static string RemoveLeadingSlash(this string value)
1818
{
19-
if (value.StartsWith("/") || value.StartsWith("\\"))
19+
if (value.StartsWith(Separator.Slash) || value.StartsWith(Separator.Backslash))
2020
{
2121
return value.Substring(1);
2222
}
@@ -31,7 +31,7 @@ public static string RemoveLeadingSlash(this string value)
3131
/// <returns></returns>
3232
public static string RemoveTrailingSlash(this string value)
3333
{
34-
if (value.EndsWith("/") || value.EndsWith("\\"))
34+
if (value.EndsWith(Separator.Slash) || value.EndsWith(Separator.Backslash))
3535
{
3636
return value.Substring(0, value.Length - 1);
3737
}

src/Abstract.FileSystem/SystemPath.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@ namespace Abstract.FileSystem
1212
[DebuggerDisplay("{" + nameof(_path) + "}")]
1313
public class SystemPath
1414
{
15-
internal const char WinSeparator = '\\';
16-
internal const char UncSeparator = '\\';
17-
internal const char UnixSeparator = '/';
18-
1915
static SystemPath()
2016
{
2117
OsType = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? OsType.Windows : OsType.Unix;
@@ -163,10 +159,10 @@ public static string FormatPath(string path)
163159
{
164160
if (OsType == OsType.Unix)
165161
{
166-
return path.Replace(WinSeparator, UnixSeparator);
162+
return path.Replace(Separator.WinSeparator, Separator.UnixSeparator);
167163
}
168164

169-
return path.Replace(UnixSeparator, WinSeparator);
165+
return path.Replace(Separator.UnixSeparator, Separator.WinSeparator);
170166
}
171167

172168
/// <summary>
@@ -177,7 +173,7 @@ public static string FormatPath(string path)
177173
/// <returns></returns>
178174
public static string Combine(SystemPath path, params string[] segments)
179175
{
180-
var separator = OsType == OsType.Unix ? UnixSeparator : WinSeparator;
176+
var separator = OsType == OsType.Unix ? Separator.UnixSeparator : Separator.WinSeparator;
181177

182178
var left = path._path;
183179
foreach(var right in segments)

0 commit comments

Comments
 (0)