File: regex\System\Text\RegularExpressions\RegexMatchTimeoutException.cs
Project: ndp\fx\src\System.csproj (System)
///------------------------------------------------------------------------------
/// <copyright file="RegexMatchTimeoutException.cs" company="Microsoft">
///     Copyright (c) Microsoft Corporation.  All rights reserved.
/// </copyright>                               
///
/// <owner>gpaperin</owner>
///------------------------------------------------------------------------------
 
using System;
using System.Runtime.Serialization;
using System.Security;
using System.Security.Permissions;
 
 
namespace System.Text.RegularExpressions {
 
/// <summary>
/// This is the exception that is thrown when a RegEx matching timeout occurs.
/// </summary>
 
#if SILVERLIGHT
#if FEATURE_NETCORE
public
#else
internal 
#endif
class RegexMatchTimeoutException : TimeoutException {
#else
[Serializable]
public class RegexMatchTimeoutException : TimeoutException, ISerializable {
#endif
 
 
    private string regexInput = null;
 
    private string regexPattern = null;
 
    private TimeSpan matchTimeout = TimeSpan.FromTicks(-1);
 
 
    /// <summary>
    /// This is the preferred constructor to use.
    /// The other constructors are provided for compliance to Fx design guidelines.
    /// </summary>
    /// <param name="regexInput">Matching timeout occured during mathing within the specified input.</param>
    /// <param name="regexPattern">Matching timeout occured during mathing to the specified pattern.</param>
    /// <param name="matchTimeout">Matching timeout occured becasue matching took longer than the specified timeout.</param>
    public RegexMatchTimeoutException(string regexInput, string regexPattern, TimeSpan matchTimeout) :
        base(SR.GetString(SR.RegexMatchTimeoutException_Occurred)) {
        Init(regexInput, regexPattern, matchTimeout);
    }
 
 
    /// <summary>
    /// This constructor is provided in compliance with common NetFx design patterns;
    /// developers should prefer using the constructor
    /// <code>public RegexMatchTimeoutException(string input, string pattern, TimeSpan matchTimeout)</code>.
    /// </summary>    
    public RegexMatchTimeoutException()
        : base() {
        Init();
    }
 
 
    /// <summary>
    /// This constructor is provided in compliance with common NetFx design patterns;
    /// developers should prefer using the constructor
    /// <code>public RegexMatchTimeoutException(string input, string pattern, TimeSpan matchTimeout)</code>.
    /// </summary>
    /// <param name="message">The error message that explains the reason for the exception.</param>
    public RegexMatchTimeoutException(string message)
        : base(message) {
        Init();
    }
 
 
    /// <summary>
    /// This constructor is provided in compliance with common NetFx design patterns;
    /// developers should prefer using the constructor
    /// <code>public RegexMatchTimeoutException(string input, string pattern, TimeSpan matchTimeout)</code>.
    /// </summary>
    /// <param name="message">The error message that explains the reason for the exception.</param>
    /// <param name="inner">The exception that is the cause of the current exception, or a <code>null</code>.</param>
    public RegexMatchTimeoutException(string message, Exception inner)
        : base(message, inner) {
        Init();
    }
 
 
    #if !SILVERLIGHT
    /// <summary>
    /// Initializes a new RegexMatchTimeoutException with serialized data.
    /// </summary>
    /// <param name="info">The SerializationInfo  that holds the serialized object data about the exception being thrown.</param>
    /// <param name="context">The StreamingContext  that contains contextual information about the source or destination.</param>
    [SecurityPermission(SecurityAction.LinkDemand, SerializationFormatter=true)]
    protected RegexMatchTimeoutException(SerializationInfo info, StreamingContext context) :
        base(info, context) {
 
        string input = info.GetString("regexInput");
        string pattern = info.GetString("regexPattern");
        TimeSpan timeout = TimeSpan.FromTicks(info.GetInt64("timeoutTicks"));
        Init(input, pattern, timeout);
    }
        
    [SecurityPermission(SecurityAction.LinkDemand, SerializationFormatter=true)]
    void ISerializable.GetObjectData(SerializationInfo si, StreamingContext context) {
        base.GetObjectData(si, context);
        si.AddValue("regexInput", this.regexInput);
        si.AddValue("regexPattern", this.regexPattern);
        si.AddValue("timeoutTicks", this.matchTimeout.Ticks);
    }
    #endif // !SILVERLIGHT
 
    private void Init() {
        Init("", "", TimeSpan.FromTicks(-1));
    }
 
    private void Init(string input, string pattern, TimeSpan timeout) {
        this.regexInput = input;
        this.regexPattern = pattern;
        this.matchTimeout = timeout;
    }
 
    #if SILVERLIGHT && !FEATURE_NETCORE
    internal string Pattern {
    #else
    public string Pattern {
    #endif
    #if SILVERLIGHT
        [SecurityCritical]
    #else  // SILVERLIGHT
        [PermissionSet(SecurityAction.LinkDemand, Unrestricted=true)]
    #endif  // SILVERLIGHT
        get { return regexPattern; }
    }
 
    #if SILVERLIGHT && !FEATURE_NETCORE
    internal string Input {
    #else
    public string Input {
    #endif
    #if SILVERLIGHT
        [SecurityCritical]
    #else  // SILVERLIGHT
        [PermissionSet(SecurityAction.LinkDemand, Unrestricted=true)]
    #endif  // SILVERLIGHT
        get { return regexInput; }
    }
 
    #if SILVERLIGHT && !FEATURE_NETCORE
    internal TimeSpan MatchTimeout {
    #else
    public TimeSpan MatchTimeout {
    #endif
    #if SILVERLIGHT
        [SecurityCritical]
    #else  // SILVERLIGHT
        [PermissionSet(SecurityAction.LinkDemand, Unrestricted=true)]
    #endif  // SILVERLIGHT
        get { return matchTimeout; }
    }
} // public class RegexMatchTimeoutException
 
 
} // namespace System.Text.RegularExpressions
 
// file RegexMatchTimeoutException.cs