//
// System.Diagnostics.Switch.cs
//
+// Comments from John R. Hicks <angryjohn69@nc.rr.com> original implementation
+// can be found at: /mcs/docs/apidocs/xml/en/System.Diagnostics
+//
// Author:
// John R. Hicks (angryjohn69@nc.rr.com)
+// Jonathan Pryor (jonpryor@vt.edu)
//
-// (C) 2001
+// (C) 2001-2002
//
-namespace System.Diagnostics
-{
- /// <summary>
- /// Abstract base class to create new debugging and tracing switches
- /// </summary>
- public abstract class Switch
- {
- private string desc = "";
- private string display_name = "";
- private int iSwitch;
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
- // ================= Constructors ===================
- /// <summary>
- /// Initialize a new instance
- /// </summary>
- protected Switch(string displayName, string description)
- {
- display_name = displayName;
- desc = description;
- }
+using System.Collections;
- /// <summary>
- /// Allows an Object to attempt to free resources and
- /// perform cleanup before the Object is reclaimed
- /// by the Garbage Collector
- /// </summary>
- ~Switch()
- {
- }
+namespace System.Diagnostics
+{
+ public abstract class Switch
+ {
+ private string name = "";
+ private string description = "";
+ private int switchSetting = 0;
- // ================ Instance Methods ================
+ // MS Behavior is that (quoting from MSDN for OnSwitchSettingChanged()):
+ // "...It is invoked the first time a switch reads its value from the
+ // configuration file..."
+ // The docs + testing implies two things:
+ // 1. The value of the switch is not read in from the constructor
+ // 2. The value is instead read in on the first time get_SwitchSetting is
+ // invoked
+ // Assuming that OnSwitchSettingChanged() is invoked on a .config file
+ // read and on all changes
+ //
+ // Thus, we need to keep track of whether or not switchSetting has been
+ // initialized. Using `switchSetting=-1' seems logical, but if someone
+ // actually wants to use -1 as a switch value that would cause problems.
+ private bool initialized = false;
- // ==================== Properties ==================
+ protected Switch(string displayName, string description)
+ {
+ this.name = displayName;
+ this.description = description;
+ }
- /// <summary>
- /// Returns a description of the switch
- /// </summary>
- public string Description
- {
- get
- {
- return desc;
- }
- }
+ public string Description {
+ get {return description;}
+ }
- /// <summary>
- /// Returns a name used to identify the switch
- /// </summary>
- public string DisplayName
- {
- get
- {
- return display_name;
- }
- }
+ public string DisplayName {
+ get {return name;}
+ }
- /// <summary>
- /// Gets or sets the current setting for this switch
- /// </summary>
- protected int SwitchSetting
- {
- get
- {
- return iSwitch;
- }
- set
- {
- if(iSwitch != value)
- {
- iSwitch = value;
- OnSwitchSettingChanged();
- }
- }
+ protected int SwitchSetting {
+ get {
+ if (!initialized) {
+ initialized = true;
+ GetConfigFileSetting ();
+ OnSwitchSettingChanged ();
}
+ return switchSetting;
+ }
+ set {
+ if(switchSetting != value) {
+ switchSetting = value;
+ OnSwitchSettingChanged();
+ }
+ initialized = true;
+ }
+ }
+
+ private void GetConfigFileSetting ()
+ {
+ try {
+ IDictionary d = (IDictionary) DiagnosticsConfiguration.Settings ["switches"];
+
+ // Load up the specified switch
+ if (d != null)
+ switchSetting = int.Parse (d [name].ToString());
+ } catch {
+ switchSetting = 0;
+ }
+ }
- /// <summary>
- /// Raises the SwitchSettingChanged event
- /// </summary>
- [MonoTODO]
protected virtual void OnSwitchSettingChanged()
{
- // TODO: implement me
+ // Do nothing. This is merely provided for derived classes to know when
+ // the value of SwitchSetting has changed.
}
- }
+ }
}
+