1+ // Copyright (c) Six Labors and contributors. 
2+ // Licensed under the Apache License, Version 2.0. 
3+ 
4+ using  System ; 
5+ using  System . Diagnostics ; 
6+ 
7+ namespace  SixLabors 
8+ { 
9+     /// <summary> 
10+     /// Provides methods to protect against invalid parameters for a DEBUG build. 
11+     /// </summary> 
12+     [ DebuggerStepThrough ] 
13+     internal  static class  DebugGuard 
14+     { 
15+         /// <summary> 
16+         /// Verifies, that the method parameter with specified object value is not null 
17+         /// and throws an exception if it is found to be so. 
18+         /// </summary> 
19+         /// <param name="target">The target object, which cannot be null.</param> 
20+         /// <param name="parameterName">The name of the parameter that is to be checked.</param> 
21+         /// <exception cref="ArgumentNullException"><paramref name="target"/> is null</exception> 
22+         [ Conditional ( "DEBUG" ) ] 
23+         public  static void  NotNull ( object  target ,  string  parameterName ) 
24+         { 
25+             if  ( target  ==  null ) 
26+             { 
27+                 throw  new  ArgumentNullException ( parameterName ) ; 
28+             } 
29+         } 
30+ 
31+         /// <summary> 
32+         /// Verifies that the specified value is less than a maximum value 
33+         /// and throws an exception if it is not. 
34+         /// </summary> 
35+         /// <param name="value">The target value, which should be validated.</param> 
36+         /// <param name="max">The maximum value.</param> 
37+         /// <param name="parameterName">The name of the parameter that is to be checked.</param> 
38+         /// <typeparam name="TValue">The type of the value.</typeparam> 
39+         /// <exception cref="ArgumentException"> 
40+         /// <paramref name="value"/> is greater than the maximum value. 
41+         /// </exception> 
42+         [ Conditional ( "DEBUG" ) ] 
43+         public  static void  MustBeLessThan < TValue > ( TValue  value ,  TValue  max ,  string  parameterName ) 
44+                     where  TValue  :  IComparable < TValue > 
45+         { 
46+             if  ( value . CompareTo ( max )  >=  0 ) 
47+             { 
48+                 throw  new  ArgumentOutOfRangeException ( parameterName ,  $ "Value must be less than { max } .") ; 
49+             } 
50+         } 
51+ 
52+         /// <summary> 
53+         /// Verifies that the specified value is less than or equal to a maximum value 
54+         /// and throws an exception if it is not. 
55+         /// </summary> 
56+         /// <param name="value">The target value, which should be validated.</param> 
57+         /// <param name="max">The maximum value.</param> 
58+         /// <param name="parameterName">The name of the parameter that is to be checked.</param> 
59+         /// <typeparam name="TValue">The type of the value.</typeparam> 
60+         /// <exception cref="ArgumentException"> 
61+         /// <paramref name="value"/> is greater than the maximum value. 
62+         /// </exception> 
63+         [ Conditional ( "DEBUG" ) ] 
64+         public  static void  MustBeLessThanOrEqualTo < TValue > ( TValue  value ,  TValue  max ,  string  parameterName ) 
65+                     where  TValue  :  IComparable < TValue > 
66+         { 
67+             if  ( value . CompareTo ( max )  >  0 ) 
68+             { 
69+                 throw  new  ArgumentOutOfRangeException ( parameterName ,  $ "Value must be less than or equal to { max } .") ; 
70+             } 
71+         } 
72+ 
73+         /// <summary> 
74+         /// Verifies that the specified value is greater than a minimum value 
75+         /// and throws an exception if it is not. 
76+         /// </summary> 
77+         /// <param name="value">The target value, which should be validated.</param> 
78+         /// <param name="min">The minimum value.</param> 
79+         /// <param name="parameterName">The name of the parameter that is to be checked.</param> 
80+         /// <typeparam name="TValue">The type of the value.</typeparam> 
81+         /// <exception cref="ArgumentException"> 
82+         /// <paramref name="value"/> is less than the minimum value. 
83+         /// </exception> 
84+         [ Conditional ( "DEBUG" ) ] 
85+         public  static void  MustBeGreaterThan < TValue > ( TValue  value ,  TValue  min ,  string  parameterName ) 
86+             where  TValue  :  IComparable < TValue > 
87+         { 
88+             if  ( value . CompareTo ( min )  <=  0 ) 
89+             { 
90+                 throw  new  ArgumentOutOfRangeException ( 
91+                     parameterName , 
92+                     $ "Value must be greater than { min } .") ; 
93+             } 
94+         } 
95+ 
96+         /// <summary> 
97+         /// Verifies that the specified value is greater than or equal to a minimum value 
98+         /// and throws an exception if it is not. 
99+         /// </summary> 
100+         /// <param name="value">The target value, which should be validated.</param> 
101+         /// <param name="min">The minimum value.</param> 
102+         /// <param name="parameterName">The name of the parameter that is to be checked.</param> 
103+         /// <typeparam name="TValue">The type of the value.</typeparam> 
104+         /// <exception cref="ArgumentException"> 
105+         /// <paramref name="value"/> is less than the minimum value. 
106+         /// </exception> 
107+         [ Conditional ( "DEBUG" ) ] 
108+         public  static void  MustBeGreaterThanOrEqualTo < TValue > ( TValue  value ,  TValue  min ,  string  parameterName ) 
109+             where  TValue  :  IComparable < TValue > 
110+         { 
111+             if  ( value . CompareTo ( min )  <  0 ) 
112+             { 
113+                 throw  new  ArgumentOutOfRangeException ( parameterName ,  $ "Value must be greater than or equal to { min } .") ; 
114+             } 
115+         } 
116+ 
117+         /// <summary> 
118+         /// Verifies, that the method parameter with specified target value is true 
119+         /// and throws an exception if it is found to be so. 
120+         /// </summary> 
121+         /// <param name="target"> 
122+         /// The target value, which cannot be false. 
123+         /// </param> 
124+         /// <param name="parameterName"> 
125+         /// The name of the parameter that is to be checked. 
126+         /// </param> 
127+         /// <param name="message"> 
128+         /// The error message, if any to add to the exception. 
129+         /// </param> 
130+         /// <exception cref="ArgumentException"> 
131+         /// <paramref name="target"/> is false 
132+         /// </exception> 
133+         [ Conditional ( "DEBUG" ) ] 
134+         public  static void  IsTrue ( bool  target ,  string  parameterName ,  string  message ) 
135+         { 
136+             if  ( ! target ) 
137+             { 
138+                 throw  new  ArgumentException ( message ,  parameterName ) ; 
139+             } 
140+         } 
141+ 
142+         /// <summary> 
143+         /// Verifies, that the method parameter with specified target value is false 
144+         /// and throws an exception if it is found to be so. 
145+         /// </summary> 
146+         /// <param name="target">The target value, which cannot be true.</param> 
147+         /// <param name="parameterName">The name of the parameter that is to be checked.</param> 
148+         /// <param name="message">The error message, if any to add to the exception.</param> 
149+         /// <exception cref="ArgumentException"> 
150+         /// <paramref name="target"/> is true 
151+         /// </exception> 
152+         [ Conditional ( "DEBUG" ) ] 
153+         public  static void  IsFalse ( bool  target ,  string  parameterName ,  string  message ) 
154+         { 
155+             if  ( target ) 
156+             { 
157+                 throw  new  ArgumentException ( message ,  parameterName ) ; 
158+             } 
159+         } 
160+ 
161+         /// <summary> 
162+         /// Verifies, that the target span is of same size than the 'other' span. 
163+         /// </summary> 
164+         /// <typeparam name="T">The element type of the spans</typeparam> 
165+         /// <param name="target">The target span.</param> 
166+         /// <param name="other">The 'other' span to compare 'target' to.</param> 
167+         /// <param name="parameterName">The name of the parameter that is to be checked.</param> 
168+         /// <exception cref="ArgumentException"> 
169+         /// <paramref name="target"/> is true 
170+         /// </exception> 
171+         [ Conditional ( "DEBUG" ) ] 
172+         public  static void  MustBeSameSized < T > ( ReadOnlySpan < T >  target ,  ReadOnlySpan < T >  other ,  string  parameterName ) 
173+             where  T  :  struct 
174+         { 
175+             if  ( target . Length  !=  other . Length ) 
176+             { 
177+                 throw  new  ArgumentException ( "Span-s must be the same size!" ,  parameterName ) ; 
178+             } 
179+         } 
180+ 
181+         /// <summary> 
182+         /// Verifies, that the `target` span has the length of 'minSpan', or longer. 
183+         /// </summary> 
184+         /// <typeparam name="T">The element type of the spans</typeparam> 
185+         /// <param name="target">The target span.</param> 
186+         /// <param name="minSpan">The 'minSpan' span to compare 'target' to.</param> 
187+         /// <param name="parameterName">The name of the parameter that is to be checked.</param> 
188+         /// <exception cref="ArgumentException"> 
189+         /// <paramref name="target"/> is true 
190+         /// </exception> 
191+         [ Conditional ( "DEBUG" ) ] 
192+         public  static void  MustBeSizedAtLeast < T > ( ReadOnlySpan < T >  target ,  ReadOnlySpan < T >  minSpan ,  string  parameterName ) 
193+             where  T  :  struct 
194+         { 
195+             if  ( target . Length  <  minSpan . Length ) 
196+             { 
197+                 throw  new  ArgumentException ( $ "Span-s must be at least of length { minSpan . Length } !",  parameterName ) ; 
198+             } 
199+         } 
200+     } 
201+ } 
0 commit comments