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
- CacheMemory.cs
- IssuedTokenClientCredential.cs
- If.cs
- PersonalizationAdministration.cs
- ClientApiGenerator.cs
- SchemaCollectionCompiler.cs
- DataGridCellsPanel.cs
- TableCellAutomationPeer.cs
- BigInt.cs
- SqlEnums.cs
- CollectionViewGroup.cs
- SyntaxCheck.cs
- DataPagerFieldItem.cs
- ButtonPopupAdapter.cs
- DisplayNameAttribute.cs
- TrustManagerPromptUI.cs
- CustomExpression.cs
- ListenerElementsCollection.cs
- ObjectListCommandCollection.cs
- GPRECT.cs
- TextServicesDisplayAttribute.cs
- PropertyInfo.cs
- PointLightBase.cs
- BaseCollection.cs
- DateTimeHelper.cs
- WebPartConnectionsCancelVerb.cs
- FixedPosition.cs
- MenuItemAutomationPeer.cs
- UnauthorizedAccessException.cs
- XmlSchemaResource.cs
- CmsUtils.cs
- SystemBrushes.cs
- Missing.cs
- ExpressionBuilder.cs
- DataServiceRequestException.cs
- XmlDocumentType.cs
- DbConnectionInternal.cs
- ExpressionBuilder.cs
- ExpressionReplacer.cs
- RegexWorker.cs
- HTTP_SERVICE_CONFIG_URLACL_PARAM.cs
- DynamicResourceExtension.cs
- MgmtConfigurationRecord.cs
- ListMarkerSourceInfo.cs
- XmlSchemaSubstitutionGroup.cs
- DebugViewWriter.cs
- ModuleConfigurationInfo.cs
- DataGridViewRow.cs
- SqlParameterCollection.cs
- ChooseAction.cs
- EntityStoreSchemaFilterEntry.cs
- Parameter.cs
- UnSafeCharBuffer.cs
- PagerSettings.cs
- QueuePropertyVariants.cs
- CommandTreeTypeHelper.cs
- ScrollEventArgs.cs
- ToolBarButton.cs
- DataGridViewCellStyle.cs
- PropertyToken.cs
- XmlSchemaIdentityConstraint.cs
- CategoriesDocumentFormatter.cs
- ToolStripPanelRow.cs
- ToolStripDropTargetManager.cs
- ThumbButtonInfoCollection.cs
- ResXResourceSet.cs
- ProxyAttribute.cs
- RegistrationServices.cs
- ProxyElement.cs
- PageParser.cs
- Win32Exception.cs
- XmlDataSourceNodeDescriptor.cs
- TraceFilter.cs
- TextElement.cs
- CellParagraph.cs
- Permission.cs
- MDIClient.cs
- SizeAnimation.cs
- ParameterElement.cs
- ButtonChrome.cs
- ListViewItemMouseHoverEvent.cs
- StringComparer.cs
- SqlBuffer.cs
- LayoutSettings.cs
- DirectoryObjectSecurity.cs
- Sql8ConformanceChecker.cs
- UnmanagedHandle.cs
- ComplusTypeValidator.cs
- DBSqlParserColumn.cs
- XmlSerializableServices.cs
- DynamicValidatorEventArgs.cs
- IsolationInterop.cs
- StreamSecurityUpgradeAcceptorAsyncResult.cs
- HtmlTextArea.cs
- precedingquery.cs
- ListenerConnectionDemuxer.cs
- EventHandlerList.cs
- IgnorePropertiesAttribute.cs
- ProtocolsSection.cs
- NavigatorInput.cs