1 //
2 // IMemberDefinition.cs
3 //
4 // Author:
5 //   Jb Evain (jbevain@gmail.com)
6 //
7 // Copyright (c) 2008 - 2011 Jb Evain
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 
29 namespace Mono.Cecil {
30 
31 	public interface IMemberDefinition : ICustomAttributeProvider {
32 
33 		string Name { get; set; }
34 		string FullName { get; }
35 
36 		bool IsSpecialName { get; set; }
37 		bool IsRuntimeSpecialName { get; set; }
38 
39 		TypeDefinition DeclaringType { get; set; }
40 	}
41 
42 	static partial class Mixin {
43 
GetAttributes(this uint self, uint attributes)44 		public static bool GetAttributes (this uint self, uint attributes)
45 		{
46 			return (self & attributes) != 0;
47 		}
48 
SetAttributes(this uint self, uint attributes, bool value)49 		public static uint SetAttributes (this uint self, uint attributes, bool value)
50 		{
51 			if (value)
52 				return self | attributes;
53 
54 			return self & ~attributes;
55 		}
56 
GetMaskedAttributes(this uint self, uint mask, uint attributes)57 		public static bool GetMaskedAttributes (this uint self, uint mask, uint attributes)
58 		{
59 			return (self & mask) == attributes;
60 		}
61 
SetMaskedAttributes(this uint self, uint mask, uint attributes, bool value)62 		public static uint SetMaskedAttributes (this uint self, uint mask, uint attributes, bool value)
63 		{
64 			if (value) {
65 				self &= ~mask;
66 				return self | attributes;
67 			}
68 
69 			return self & ~(mask & attributes);
70 		}
71 
GetAttributes(this ushort self, ushort attributes)72 		public static bool GetAttributes (this ushort self, ushort attributes)
73 		{
74 			return (self & attributes) != 0;
75 		}
76 
SetAttributes(this ushort self, ushort attributes, bool value)77 		public static ushort SetAttributes (this ushort self, ushort attributes, bool value)
78 		{
79 			if (value)
80 				return (ushort) (self | attributes);
81 
82 			return (ushort) (self & ~attributes);
83 		}
84 
GetMaskedAttributes(this ushort self, ushort mask, uint attributes)85 		public static bool GetMaskedAttributes (this ushort self, ushort mask, uint attributes)
86 		{
87 			return (self & mask) == attributes;
88 		}
89 
SetMaskedAttributes(this ushort self, ushort mask, uint attributes, bool value)90 		public static ushort SetMaskedAttributes (this ushort self, ushort mask, uint attributes, bool value)
91 		{
92 			if (value) {
93 				self = (ushort) (self & ~mask);
94 				return (ushort) (self | attributes);
95 			}
96 
97 			return (ushort) (self & ~(mask & attributes));
98 		}
99 	}
100 }
101