File: System\IO\Log\PolicyUnit.cs
Project: ndp\cdf\src\NetFx35\System.IO.Log\System.IO.Log.csproj (System.IO.Log)
//-----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------------------------
namespace System.IO.Log
{
    using System;
    using System.Globalization;
    
    public struct PolicyUnit
    {
        PolicyUnitType type;
        long value;
        
        public PolicyUnit(long value, PolicyUnitType type)
        {
            if (type == PolicyUnitType.Percentage)
            {
                if ((value < 0) || (value > 100))
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("value"));
            }
            else if (type == PolicyUnitType.Extents)
            {
                if (value < 0)
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("value"));                
            }
            else
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("type"));
            }
 
            this.type = type;
            this.value = value;
        }
 
        public PolicyUnitType Type
        {
            get
            {
                return this.type;
            }
        }
 
        public long Value
        {
            get
            {
                return this.value;
            }
        }
 
        public override int GetHashCode()
        {
            return (this.type.GetHashCode() ^
                    this.value.GetHashCode());
        }
 
        public override bool Equals(object obj)
        {
            if (!(obj is PolicyUnit)) return false;
 
            PolicyUnit other = (PolicyUnit)(obj);
 
            return this == other;
        }
 
        public static bool operator ==(PolicyUnit left, PolicyUnit right)
        {
            return ((left.type == right.type) &&
                    (left.value == right.value));
        }
 
        public static bool operator !=(PolicyUnit left, PolicyUnit right)
        {
            return !(left == right);
        }
 
        public static PolicyUnit Percentage(long value)
        {
            return new PolicyUnit(value, PolicyUnitType.Percentage);
        }
 
        public static PolicyUnit Extents(long value)
        {
            return new PolicyUnit(value, PolicyUnitType.Extents);
        }
        
        public override string ToString()
        {
            if (this.type == PolicyUnitType.Percentage)
            {
                return SR.GetString(SR.PolicyUnit_Percent, this.value);
            }
            else
            {
                return SR.GetString(SR.PolicyUnit_Extents, this.value);
            }
        }
    }
}