Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / clr / src / BCL / System / Diagnostics / Assert.cs / 1 / Assert.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
namespace System.Diagnostics {
using System;
using System.Security.Permissions;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
// Class which handles code asserts. Asserts are used to explicitly protect
// assumptions made in the code. In general if an assert fails, it indicates
// a program bug so is immediately called to the attention of the user.
// Only static data members, does not need to be marked with the serializable attribute
internal static class Assert
{
private static AssertFilter[] ListOfFilters;
private static int iNumOfFilters;
private static int iFilterArraySize;
static Assert()
{
Assert.AddFilter(new DefaultFilter());
}
// AddFilter adds a new assert filter. This replaces the current
// filter, unless the filter returns FailContinue.
//
public static void AddFilter(AssertFilter filter)
{
if (iFilterArraySize <= iNumOfFilters)
{
AssertFilter[] newFilterArray = new AssertFilter [iFilterArraySize+2];
if (iNumOfFilters > 0)
Array.Copy(ListOfFilters, newFilterArray, iNumOfFilters);
iFilterArraySize += 2;
ListOfFilters = newFilterArray;
}
ListOfFilters [iNumOfFilters++] = filter;
}
// Called when an assertion is being made.
//
public static void Check(bool condition, String conditionString, String message)
{
if (!condition)
{
Fail (conditionString, message);
}
}
public static void Fail(String conditionString, String message)
{
// get the stacktrace
StackTrace st = new StackTrace();
// Run through the list of filters backwards (the last filter in the list
// is the default filter. So we're guaranteed that there will be atleast
// one filter to handle the assert.
int iTemp = iNumOfFilters;
while (iTemp > 0)
{
AssertFilters iResult = ListOfFilters [--iTemp].AssertFailure (conditionString, message, st);
if (iResult == AssertFilters.FailDebug)
{
if (Debugger.IsAttached == true)
Debugger.Break();
else
{
if (Debugger.Launch() == false)
{
throw new InvalidOperationException(
Environment.GetResourceString("InvalidOperation_DebuggerLaunchFailed"));
}
}
break;
}
else if (iResult == AssertFilters.FailTerminate)
Environment.Exit(-1);
else if (iResult == AssertFilters.FailIgnore)
break;
// If none of the above, it means that the Filter returned FailContinue.
// So invoke the next filter.
}
}
// Called when an assert happens.
//
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern static int ShowDefaultAssertDialog(String conditionString, String message);
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
namespace System.Diagnostics {
using System;
using System.Security.Permissions;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
// Class which handles code asserts. Asserts are used to explicitly protect
// assumptions made in the code. In general if an assert fails, it indicates
// a program bug so is immediately called to the attention of the user.
// Only static data members, does not need to be marked with the serializable attribute
internal static class Assert
{
private static AssertFilter[] ListOfFilters;
private static int iNumOfFilters;
private static int iFilterArraySize;
static Assert()
{
Assert.AddFilter(new DefaultFilter());
}
// AddFilter adds a new assert filter. This replaces the current
// filter, unless the filter returns FailContinue.
//
public static void AddFilter(AssertFilter filter)
{
if (iFilterArraySize <= iNumOfFilters)
{
AssertFilter[] newFilterArray = new AssertFilter [iFilterArraySize+2];
if (iNumOfFilters > 0)
Array.Copy(ListOfFilters, newFilterArray, iNumOfFilters);
iFilterArraySize += 2;
ListOfFilters = newFilterArray;
}
ListOfFilters [iNumOfFilters++] = filter;
}
// Called when an assertion is being made.
//
public static void Check(bool condition, String conditionString, String message)
{
if (!condition)
{
Fail (conditionString, message);
}
}
public static void Fail(String conditionString, String message)
{
// get the stacktrace
StackTrace st = new StackTrace();
// Run through the list of filters backwards (the last filter in the list
// is the default filter. So we're guaranteed that there will be atleast
// one filter to handle the assert.
int iTemp = iNumOfFilters;
while (iTemp > 0)
{
AssertFilters iResult = ListOfFilters [--iTemp].AssertFailure (conditionString, message, st);
if (iResult == AssertFilters.FailDebug)
{
if (Debugger.IsAttached == true)
Debugger.Break();
else
{
if (Debugger.Launch() == false)
{
throw new InvalidOperationException(
Environment.GetResourceString("InvalidOperation_DebuggerLaunchFailed"));
}
}
break;
}
else if (iResult == AssertFilters.FailTerminate)
Environment.Exit(-1);
else if (iResult == AssertFilters.FailIgnore)
break;
// If none of the above, it means that the Filter returned FailContinue.
// So invoke the next filter.
}
}
// Called when an assert happens.
//
[MethodImplAttribute(MethodImplOptions.InternalCall)]
public extern static int ShowDefaultAssertDialog(String conditionString, String message);
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- _UriSyntax.cs
- Zone.cs
- DecimalMinMaxAggregationOperator.cs
- DataColumnMapping.cs
- ToolBarButtonDesigner.cs
- SerialReceived.cs
- Types.cs
- NavigatorOutput.cs
- configsystem.cs
- ModuleConfigurationInfo.cs
- GridViewUpdatedEventArgs.cs
- _NestedSingleAsyncResult.cs
- DbgCompiler.cs
- UIElementIsland.cs
- SafeRightsManagementHandle.cs
- NotSupportedException.cs
- System.Data_BID.cs
- UrlPath.cs
- HtmlTitle.cs
- ZipIOExtraFieldPaddingElement.cs
- SchemaContext.cs
- TypeForwardedFromAttribute.cs
- MetadataException.cs
- DetailsViewUpdatedEventArgs.cs
- TimeoutStream.cs
- Literal.cs
- XmlDataSource.cs
- Validator.cs
- ContainerVisual.cs
- MessageQueueException.cs
- ObjectToIdCache.cs
- HttpHostedTransportConfiguration.cs
- XmlSchemaExporter.cs
- CounterCreationData.cs
- mansign.cs
- DataList.cs
- BaseAppDomainProtocolHandler.cs
- CssClassPropertyAttribute.cs
- DeobfuscatingStream.cs
- CodeIdentifiers.cs
- BStrWrapper.cs
- QilTernary.cs
- OptimisticConcurrencyException.cs
- ButtonPopupAdapter.cs
- XmlSchemaComplexContentRestriction.cs
- Byte.cs
- PageThemeCodeDomTreeGenerator.cs
- DifferencingCollection.cs
- CreatingCookieEventArgs.cs
- ValidationService.cs
- OleDbMetaDataFactory.cs
- DataGridViewCellMouseEventArgs.cs
- ValueUnavailableException.cs
- CheckBoxFlatAdapter.cs
- Rule.cs
- Annotation.cs
- TextAction.cs
- XAMLParseException.cs
- IdentityHolder.cs
- EventlogProvider.cs
- ErrorProvider.cs
- ButtonChrome.cs
- QilPatternVisitor.cs
- BatchServiceHost.cs
- ChtmlSelectionListAdapter.cs
- OleDbEnumerator.cs
- ConnectionStringsExpressionBuilder.cs
- ResourceCategoryAttribute.cs
- FaultFormatter.cs
- NavigateEvent.cs
- EndpointAddressMessageFilterTable.cs
- _NTAuthentication.cs
- FlowDocumentScrollViewer.cs
- XPathScanner.cs
- SqlParameter.cs
- DeferredTextReference.cs
- ContentDisposition.cs
- AccessorTable.cs
- CollectionTraceRecord.cs
- TrueReadOnlyCollection.cs
- DefaultPrintController.cs
- ScriptingSectionGroup.cs
- wmiutil.cs
- TypeConverterAttribute.cs
- DeflateEmulationStream.cs
- HealthMonitoringSection.cs
- PropertyMappingExceptionEventArgs.cs
- DynamicObject.cs
- InkPresenterAutomationPeer.cs
- ToolStripItemRenderEventArgs.cs
- DropDownButton.cs
- ObjectListDesigner.cs
- Scheduler.cs
- ListBase.cs
- TypeGeneratedEventArgs.cs
- NestPullup.cs
- JsonCollectionDataContract.cs
- Int64AnimationBase.cs
- HttpRuntime.cs
- BitmapEffectDrawing.cs