// // OracleTimeSpan.cs // // Part of the Mono class libraries at // mcs/class/System.Data.OracleClient/System.Data.OracleClient // // Assembly: System.Data.OracleClient.dll // Namespace: System.Data.OracleClient // // Author: Tim Coleman // // Copyright (C) Tim Coleman, 2003 // // Licensed under the MIT/X11 License. // using System; using System.Data.SqlTypes; namespace System.Data.OracleClient { public struct OracleTimeSpan : IComparable, INullable { #region Fields public static readonly OracleTimeSpan MaxValue = new OracleTimeSpan (TimeSpan.MaxValue); public static readonly OracleTimeSpan MinValue = new OracleTimeSpan (TimeSpan.MinValue); public static readonly OracleTimeSpan Null = new OracleTimeSpan (); bool notNull; TimeSpan value; #endregion // Fields #region Constructors public OracleTimeSpan (long ticks) : this (new TimeSpan (ticks)) { } public OracleTimeSpan (OracleTimeSpan from) { if (from.IsNull) throw new NullReferenceException (); value = from.value; notNull = true; } public OracleTimeSpan (TimeSpan ts) { value = ts; notNull = true; } public OracleTimeSpan (int hours, int minutes, int seconds) : this (new TimeSpan (hours, minutes, seconds)) { } public OracleTimeSpan (int days, int hours, int minutes, int seconds) : this (new TimeSpan (days, hours, minutes, seconds)) { } public OracleTimeSpan (int days, int hours, int minutes, int seconds, int milliseconds) : this (new TimeSpan (days, hours, minutes, seconds, milliseconds)) { } #endregion // Constructors #region Properties public int Days { get { return Value.Days; } } public int Hours { get { return Value.Hours; } } public bool IsNull { get { return !notNull; } } public int Milliseconds { get { return Value.Milliseconds; } } public int Minutes { get { return Value.Minutes; } } public int Seconds { get { return Value.Seconds; } } public TimeSpan Value { get { if (IsNull) throw CreateValueNullException (); return value; } } #endregion // Properties #region Methods public int CompareTo (object obj) { OracleTimeSpan o = (OracleTimeSpan) obj; if (obj == null) throw new NullReferenceException ("Object reference not set to an instance of an object"); else if (!(obj is OracleTimeSpan)) throw new ArgumentException ("Value is not a System.Data.OracleClient.OracleTimeSpan", obj.ToString ()); else if (o.IsNull && this.IsNull) return 0; else if (o.IsNull && !(this.IsNull)) return 1; else return value.CompareTo (o.Value); } public override bool Equals (object value) { if (value is OracleTimeSpan) { OracleTimeSpan t = (OracleTimeSpan) value; if (!(this.IsNull) && !(t.IsNull)) return this.value == t.value; else throw new InvalidOperationException ("The value is null"); } return false; } public static OracleBoolean Equals (OracleTimeSpan x, OracleTimeSpan y) { if (x.IsNull || y.IsNull) return OracleBoolean.Null; return new OracleBoolean (x.Value == y.Value); } [MonoTODO] public override int GetHashCode () { throw new NotImplementedException (); } public static OracleBoolean GreaterThan (OracleTimeSpan x, OracleTimeSpan y) { if (x.IsNull || y.IsNull) return OracleBoolean.Null; return (x.Value > y.Value); } public static OracleBoolean GreaterThanOrEqual (OracleTimeSpan x, OracleTimeSpan y) { if (x.IsNull || y.IsNull) return OracleBoolean.Null; return (x.Value >= y.Value); } public static OracleBoolean LessThan (OracleTimeSpan x, OracleTimeSpan y) { if (x.IsNull || y.IsNull) return OracleBoolean.Null; return (x.Value < y.Value); } public static OracleBoolean LessThanOrEqual (OracleTimeSpan x, OracleTimeSpan y) { if (x.IsNull || y.IsNull) return OracleBoolean.Null; return (x.Value <= y.Value); } public static OracleBoolean NotEquals (OracleTimeSpan x, OracleTimeSpan y) { if (x.IsNull || y.IsNull) return OracleBoolean.Null; return (x.Value != y.Value); } public static OracleTimeSpan Parse (string s) { return new OracleTimeSpan (TimeSpan.Parse (s)); } public override string ToString () { if (IsNull) return "Null"; return value.ToString (); } static Exception CreateValueNullException () { return new InvalidOperationException ("The value is Null"); } #endregion // Methods #region Operators and Type Conversions public static OracleBoolean operator == (OracleTimeSpan x, OracleTimeSpan y) { return Equals (x, y); } public static OracleBoolean operator > (OracleTimeSpan x, OracleTimeSpan y) { return GreaterThan (x, y); } public static OracleBoolean operator >= (OracleTimeSpan x, OracleTimeSpan y) { return GreaterThanOrEqual (x, y); } public static OracleBoolean operator != (OracleTimeSpan x, OracleTimeSpan y) { return NotEquals (x, y); } public static OracleBoolean operator < (OracleTimeSpan x, OracleTimeSpan y) { return LessThan (x, y); } public static OracleBoolean operator <= (OracleTimeSpan x, OracleTimeSpan y) { return LessThan (x, y); } public static explicit operator TimeSpan (OracleTimeSpan x) { return x.Value; } public static explicit operator OracleTimeSpan (string x) { return Parse (x); } #endregion // Operators and Type Conversions } }