chr
2026-04-05 fe750b791d5b517cc4e9bc8e99a9a75139a0cfba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//            Copyright Keysight Technologies 2012-2019
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, you can obtain one at http://mozilla.org/MPL/2.0/.
using System;
 
namespace OpenTap
{
    /// <summary>
    /// Interface for types that can be enabled.
    /// </summary>
    public interface IEnabled
    {
        /// <summary>
        /// Gets whether a type is enabled.
        /// </summary>
        bool IsEnabled { get; }
    }
 
    interface IEnabledValue
    {
        bool IsEnabled { get; set; }
        object Value { get; set; }
    }
    
    /// <summary>
    /// A value that can be enabled or disabled.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class Enabled<T> : IEnabled, ICloneable, IEnabledValue
    {
        /// <summary>
        /// Value of the member.
        /// </summary>
        public virtual T Value { get; set; }
 
        object IEnabledValue.Value
        {
            get => Value;
            set => Value = (T) value;
        }
        
        /// <summary>
        /// Gets or sets if the member is enabled. 
        /// </summary>
        public virtual bool IsEnabled { get; set; }
 
        /// <summary>
        /// Writes a special string if the value is not enabled. Otherwise just returns Value.ToString.
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            string valueString = null;
            if (Value == null)
                valueString = "NULL";
            else
                valueString = StringConvertProvider.GetString(Value);
 
            if (!IsEnabled)
                valueString += " (disabled)";
 
            return valueString;
        }
 
        /// <summary>
        /// Creates a clone of this object.
        /// </summary>
        /// <returns></returns>
        public object Clone()
        {
            T value = Value;
            if(Value is ICloneable)
                value = (T)((ICloneable)Value).Clone();
 
            return new Enabled<T> { Value = value, IsEnabled = IsEnabled };
        }
    }
}