LogSwitch.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Diagnostics / LogSwitch.cs / 1 / LogSwitch.cs

                            // ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 
namespace System.Diagnostics {
    using System; 
    using System.IO; 
    using System.Collections;
 
 	[Serializable()]
    internal class LogSwitch
    {
    	// ! WARNING ! 
    	// If any fields are added/deleted/modified, perform the
    	// same in the EE code (debugdebugger.cpp) 
    	internal String strName; 
    	internal String strDescription;
    	private LogSwitch ParentSwitch;	 
    	private LogSwitch[] ChildSwitch;
    	internal LoggingLevels iLevel;
    	internal LoggingLevels iOldLevel;
    	private int iNumChildren; 
    	private int iChildArraySize;
 
    	// ! END WARNING ! 

 
    	private LogSwitch ()
    	{
    	}
 
    	// Constructs a LogSwitch.  A LogSwitch is used to categorize log messages.
    	// 
    	// All switches (except for the global LogSwitch) have a parent LogSwitch. 
    	//
    	public LogSwitch(String name, String description, LogSwitch parent) 
    	{
    		if ((name != null) && (parent != null) )
    		{
    			if (name.Length == 0) 
    				throw new ArgumentOutOfRangeException ("Name", Environment.GetResourceString("Argument_StringZeroLength"));
    				 
    			strName = name; 
    			strDescription = description;
    			iLevel = LoggingLevels.ErrorLevel; 
    			iOldLevel = iLevel;

    			// update the parent switch to reflect this child switch
    			parent.AddChildSwitch (this); 

    			ParentSwitch = parent; 
 
    			ChildSwitch  = null;
    			iNumChildren = 0; 
    			iChildArraySize = 0;

    			Log.m_Hashtable.Add (strName, this);			
 
    			// Call into the EE to let it know about the creation of
    			// this switch 
    			Log.AddLogSwitch (this); 

    			// update switch count 
    			Log.iNumOfSwitches++;
    		}
    		else
    			throw new ArgumentNullException ((name==null ? "name" : "parent")); 
    	}
 
    	internal LogSwitch(String name, String description) 
    	{
    		strName = name; 
    		strDescription = description;
    		iLevel = LoggingLevels.ErrorLevel;
    		iOldLevel = iLevel;
    		ParentSwitch = null; 
    		ChildSwitch  = null;
    		iNumChildren = 0; 
    		iChildArraySize = 0; 

    		Log.m_Hashtable.Add (strName, this); 

    		// Call into the EE to let it know about the creation of
    		// this switch
    		Log.AddLogSwitch (this); 

    		// update switch count 
    		Log.iNumOfSwitches++; 
    	}
 

    	// Get property returns the name of the switch
    	public virtual String Name
    	{ 
    		get { return strName;}
    	} 
 
    	// Get property returns the description of the switch
    	public virtual String Description 
    	{
    		get {return strDescription;}
    	}
 

    	// Get property returns the parent of the switch 
    	public virtual LogSwitch Parent 
    	{
    		get { return ParentSwitch; } 
    	}


    	// Property to Get/Set the level of log messages which are "on" for the switch. 
    	//
    	public  virtual LoggingLevels  MinimumLevel 
    	{ 
    		get { return iLevel; }
    		set 
    		{
    			iLevel = value;
    			iOldLevel = value;
    			String strParentName = ParentSwitch!=null ? ParentSwitch.Name : ""; 
    			if (Debugger.IsAttached)
    				Log.ModifyLogSwitch ((int)iLevel, strName, strParentName); 
    	 
    			Log.InvokeLogSwitchLevelHandlers (this, iLevel);
    		} 
    	}


    	// Checks if the given level is "on" for this switch or one of its parents. 
    	//
    	public virtual bool CheckLevel(LoggingLevels level) 
    	{ 
    		if (iLevel > level)
    		{ 
    			// recurse through the list till parent is hit.
    			if (this.ParentSwitch == null)
    				return false;
    			else 
    				return this.ParentSwitch.CheckLevel (level);
    		} 
    		else 
    			return true;
    	} 


    	// Returns a switch with the particular name, if any.  Returns null if no
    	// such switch exists. 
    	public static LogSwitch GetSwitch(String name)
    	{ 
    		return (LogSwitch) Log.m_Hashtable[name]; 
    	}
 
    	private  void AddChildSwitch (LogSwitch child)
    	{
    		if (iChildArraySize <= iNumChildren)
    		{ 
    				int iIncreasedSize;
 
    				if (iChildArraySize == 0) 
    					iIncreasedSize = 10;
    				else 
    					iIncreasedSize = (iChildArraySize * 3) / 2;

    				// increase child array size in chunks of 4
    				LogSwitch[] newChildSwitchArray = new LogSwitch [iIncreasedSize]; 

    				// copy the old array objects into the new one. 
    	            if (iNumChildren > 0) 
    					Array.Copy(ChildSwitch, newChildSwitchArray, iNumChildren);
 
    				iChildArraySize = iIncreasedSize;

    		        ChildSwitch = newChildSwitchArray;
    		} 

    		ChildSwitch [iNumChildren++] = child;			 
    	} 

 
    }
}
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK