wasSharp – Blame information for rev 3
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
2 | zed | 1 | /////////////////////////////////////////////////////////////////////////// |
2 | // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 // |
||
3 | // Please see: http://www.gnu.org/licenses/gpl.html for legal details, // |
||
4 | // rights of fair usage, the disclaimer and warranty conditions. // |
||
5 | /////////////////////////////////////////////////////////////////////////// |
||
6 | |||
7 | using System; |
||
8 | using System.Collections.Generic; |
||
9 | using System.Linq; |
||
10 | using System.Reflection; |
||
11 | |||
12 | namespace wasSharp |
||
13 | { |
||
14 | public class Reflection |
||
15 | { |
||
16 | /////////////////////////////////////////////////////////////////////////// |
||
17 | // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 // |
||
18 | /////////////////////////////////////////////////////////////////////////// |
||
19 | /// <summary> |
||
20 | /// Retrieves an attribute of type T from an enumeration. |
||
21 | /// </summary> |
||
22 | /// <returns>an attribute of type T</returns> |
||
23 | public static T wasGetAttributeFromEnumValue<T>(Enum value) where T : Attribute |
||
24 | { |
||
3 | eva | 25 | return (T) value.GetType() |
2 | zed | 26 | .GetRuntimeField(value.ToString()) |
3 | eva | 27 | .GetCustomAttributes(typeof (T), false) |
2 | zed | 28 | .SingleOrDefault(); |
29 | } |
||
30 | |||
31 | /////////////////////////////////////////////////////////////////////////// |
||
32 | // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 // |
||
33 | /////////////////////////////////////////////////////////////////////////// |
||
34 | /// <summary> |
||
35 | /// Returns all the attributes of type T of an enumeration. |
||
36 | /// </summary> |
||
37 | /// <typeparam name="T">the attribute to retrieve</typeparam> |
||
38 | /// <returns>a list of attributes</returns> |
||
39 | public static IEnumerable<T> wasGetEnumAttributes<T>(Enum e) where T : Attribute |
||
40 | { |
||
41 | return e.GetType().GetRuntimeFields() |
||
3 | eva | 42 | .AsParallel() |
43 | .Select(o => wasGetAttributeFromEnumValue<T>((Enum) o.GetValue(Activator.CreateInstance<T>()))); |
||
2 | zed | 44 | } |
45 | |||
46 | /////////////////////////////////////////////////////////////////////////// |
||
47 | // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 // |
||
48 | /////////////////////////////////////////////////////////////////////////// |
||
49 | /// <summary> |
||
50 | /// Returns all the field names of an enumeration. |
||
51 | /// </summary> |
||
52 | /// <returns>the field names</returns> |
||
53 | public static IEnumerable<string> wasGetEnumNames<T>() |
||
54 | { |
||
55 | return |
||
56 | typeof (T).GetRuntimeFields() |
||
57 | .AsParallel() |
||
58 | .Select(o => o.GetCustomAttribute(typeof (NameAttribute), false)) |
||
59 | .Select(o => (o as NameAttribute)?.Name) |
||
60 | .Where(o => !string.IsNullOrEmpty(o)) |
||
61 | .Select(o => o); |
||
62 | } |
||
63 | |||
64 | /////////////////////////////////////////////////////////////////////////// |
||
65 | // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 // |
||
66 | /////////////////////////////////////////////////////////////////////////// |
||
67 | /// <summary> |
||
68 | /// Returns all the values of an enumeration. |
||
69 | /// </summary> |
||
70 | /// <returns>the values of the enumeration</returns> |
||
71 | public static IEnumerable<T> wasGetEnumValues<T>() |
||
72 | { |
||
73 | return Enum.GetValues(typeof (T)).Cast<object>().Select(value => (T) value); |
||
74 | } |
||
75 | |||
76 | /////////////////////////////////////////////////////////////////////////// |
||
77 | // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 // |
||
78 | /////////////////////////////////////////////////////////////////////////// |
||
79 | /// <summary> |
||
80 | /// Get the description from an enumeration value. |
||
81 | /// </summary> |
||
82 | /// <param name="value">an enumeration value</param> |
||
83 | /// <returns>the description or the empty string</returns> |
||
84 | public static string wasGetNameFromEnumValue(Enum value) |
||
85 | { |
||
86 | NameAttribute attribute = value.GetType() |
||
87 | .GetRuntimeField(value.ToString()) |
||
3 | eva | 88 | .GetCustomAttributes(typeof (NameAttribute), false) |
2 | zed | 89 | .SingleOrDefault() as NameAttribute; |
90 | return attribute?.Name; |
||
91 | } |
||
92 | |||
93 | /////////////////////////////////////////////////////////////////////////// |
||
94 | // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 // |
||
95 | /////////////////////////////////////////////////////////////////////////// |
||
96 | /// <summary> |
||
97 | /// Get the description from an enumeration value. |
||
98 | /// </summary> |
||
99 | /// <param name="value">an enumeration value</param> |
||
100 | /// <returns>the description or the empty string</returns> |
||
101 | public static string wasGetDescriptionFromEnumValue(Enum value) |
||
102 | { |
||
103 | DescriptionAttribute attribute = value.GetType() |
||
104 | .GetRuntimeField(value.ToString()) |
||
3 | eva | 105 | .GetCustomAttributes(typeof (DescriptionAttribute), false) |
2 | zed | 106 | .SingleOrDefault() as DescriptionAttribute; |
107 | return attribute?.Description; |
||
108 | } |
||
109 | |||
110 | /////////////////////////////////////////////////////////////////////////// |
||
111 | // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 // |
||
112 | /////////////////////////////////////////////////////////////////////////// |
||
113 | /// <summary> |
||
114 | /// Get enumeration value from its name attribute. |
||
115 | /// </summary> |
||
116 | /// <typeparam name="T">the enumeration type</typeparam> |
||
117 | /// <param name="name">the description of a member</param> |
||
118 | /// <returns>the value or the default of T if case no name attribute found</returns> |
||
119 | public static T wasGetEnumValueFromName<T>(string name) |
||
120 | { |
||
3 | eva | 121 | var field = typeof (T).GetRuntimeFields() |
2 | zed | 122 | .AsParallel().SelectMany(f => f.GetCustomAttributes( |
3 | eva | 123 | typeof (NameAttribute), false), ( |
124 | f, a) => new {Field = f, Att = a}).SingleOrDefault(a => ((NameAttribute) a.Att) |
||
125 | .Name.Equals(name)); |
||
126 | return field != null ? (T) field.Field.GetValue(Activator.CreateInstance<T>()) : default(T); |
||
2 | zed | 127 | } |
128 | |||
129 | /////////////////////////////////////////////////////////////////////////// |
||
130 | // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 // |
||
131 | /////////////////////////////////////////////////////////////////////////// |
||
132 | /// <summary> |
||
133 | /// Get the description of structure member. |
||
134 | /// </summary> |
||
135 | /// <typeparam name="T">the type of the structure to search</typeparam> |
||
136 | /// <param name="structure">the structure to search</param> |
||
137 | /// <param name="item">the value of the item to search</param> |
||
138 | /// <returns>the description or the empty string</returns> |
||
139 | public static string wasGetStructureMemberName<T>(T structure, object item) where T : struct |
||
140 | { |
||
3 | eva | 141 | var field = typeof (T).GetRuntimeFields() |
142 | .AsParallel().SelectMany(f => f.GetCustomAttributes(typeof (NameAttribute), false), |
||
143 | (f, a) => new {Field = f, Att = a}).SingleOrDefault(f => f.Field.GetValue(structure).Equals(item)); |
||
144 | return field != null ? ((NameAttribute) field.Att).Name : string.Empty; |
||
2 | zed | 145 | } |
3 | eva | 146 | |
147 | /// <summary> |
||
148 | /// A generic name attribute. |
||
149 | /// </summary> |
||
150 | public class NameAttribute : Attribute |
||
151 | { |
||
152 | protected readonly string name; |
||
153 | |||
154 | public NameAttribute(string name) |
||
155 | { |
||
156 | this.name = name; |
||
157 | } |
||
158 | |||
159 | public string Name => name; |
||
160 | } |
||
161 | |||
162 | /// <summary> |
||
163 | /// A generic description attribute. |
||
164 | /// </summary> |
||
165 | public class DescriptionAttribute : Attribute |
||
166 | { |
||
167 | protected readonly string description; |
||
168 | |||
169 | public DescriptionAttribute(string description) |
||
170 | { |
||
171 | this.description = description; |
||
172 | } |
||
173 | |||
174 | public string Description => description; |
||
175 | } |
||
2 | zed | 176 | } |
3 | eva | 177 | } |