Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / DataOracleClient / System / Data / OracleClient / OracleMonthSpan.cs / 1 / OracleMonthSpan.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace System.Data.OracleClient { using System; using System.Data.SqlTypes; using System.Data.Common; using System.Diagnostics; using System.Globalization; using System.Runtime.InteropServices; using System.Text; //--------------------------------------------------------------------- // OracleMonthSpan // // This class implements support the Oracle 9i 'INTERVAL YEAR TO MONTH' // internal data type. // [StructLayout(LayoutKind.Sequential, Pack=1)] public struct OracleMonthSpan : IComparable, INullable { private int _value; private const int MaxMonth = 176556; private const int MinMonth = -176556; public static readonly OracleMonthSpan MaxValue = new OracleMonthSpan(MaxMonth); // 4172 BC - 9999 AD * 12 months/year public static readonly OracleMonthSpan MinValue = new OracleMonthSpan(MinMonth); // 4172 BC - 9999 AD * 12 months/year public static readonly OracleMonthSpan Null = new OracleMonthSpan(true); private const int NullValue = Int32.MaxValue; // Construct from nothing -- the value will be null internal OracleMonthSpan(bool isNull) { _value = NullValue; } // Construct from an integer number of months public OracleMonthSpan (int months) { _value = months; AssertValid(_value); } public OracleMonthSpan (Int32 years, Int32 months) { try { checked { _value = (years * 12) + months; } // Will assert below if invalid. } catch (System.OverflowException) { throw ADP.MonthOutOfRange(); } AssertValid(_value); } // Copy constructor public OracleMonthSpan (OracleMonthSpan from) { _value = from._value; } // (internal) construct from a row/parameter binding internal OracleMonthSpan (NativeBuffer buffer, int valueOffset) { _value = MarshalToInt32(buffer, valueOffset); } public bool IsNull { get { return (NullValue == _value); } } public int Value { get { if (IsNull) { throw ADP.DataIsNull(); } return _value; } } static private void AssertValid(int monthSpan) { if (monthSpan < MinMonth || monthSpan > MaxMonth) { throw ADP.MonthOutOfRange(); } } public int CompareTo(object obj) { if (obj.GetType() == typeof(OracleMonthSpan)) { OracleMonthSpan odt = (OracleMonthSpan)obj; // If both values are Null, consider them equal. // Otherwise, Null is less than anything. if (IsNull) { return odt.IsNull ? 0 : -1; } if (odt.IsNull) { return 1; } // Neither value is null, do the comparison. int result = _value.CompareTo(odt._value); return result; } throw ADP.WrongType(obj.GetType(), typeof(OracleMonthSpan)); } public override bool Equals(object value) { if (value is OracleMonthSpan) { return (this == (OracleMonthSpan)value).Value; } else { return false; } } public override int GetHashCode() { return IsNull ? 0 : _value.GetHashCode(); } static internal int MarshalToInt32( NativeBuffer buffer, int valueOffset) { byte[] ociValue = buffer.ReadBytes(valueOffset, 5); int years = (int)((long)( (int)ociValue[0] << 24 | (int)ociValue[1] << 16 | (int)ociValue[2] << 8 | (int)ociValue[3] ) - 0x80000000); int months = (int)ociValue[4] - 60; int result = (years * 12) + months; AssertValid(result); return result; } static internal int MarshalToNative(object value, NativeBuffer buffer, int offset) { int from; if ( value is OracleMonthSpan ) from = ((OracleMonthSpan)value)._value; else from = (int)value; byte[] ociValue = new byte[5]; int years = (int)((long)(from / 12) + 0x80000000); int months = from % 12; // DEVNOTE: undoubtedly, this is Intel byte order specific, but how // do I verify what Oracle needs on a non Intel machine? ociValue[0] = (byte)((years >> 24)); ociValue[1] = (byte)((years >> 16) & 0xff); ociValue[2] = (byte)((years >> 8) & 0xff); ociValue[3] = (byte)(years & 0xff); ociValue[4] = (byte)(months + 60); buffer.WriteBytes(offset, ociValue, 0, 5); return 5; } public static OracleMonthSpan Parse(string s) { int ms = Int32.Parse(s, CultureInfo.InvariantCulture); return new OracleMonthSpan(ms); } public override string ToString() { if (IsNull) { return ADP.NullString; } string retval = Value.ToString(CultureInfo.CurrentCulture); return retval; } public static OracleBoolean Equals(OracleMonthSpan x, OracleMonthSpan y) { // Alternative method for operator == return (x == y); } public static OracleBoolean GreaterThan(OracleMonthSpan x, OracleMonthSpan y) { // Alternative method for operator > return (x > y); } public static OracleBoolean GreaterThanOrEqual(OracleMonthSpan x, OracleMonthSpan y) { // Alternative method for operator >= return (x >= y); } public static OracleBoolean LessThan(OracleMonthSpan x, OracleMonthSpan y) { // Alternative method for operator < return (x < y); } public static OracleBoolean LessThanOrEqual(OracleMonthSpan x, OracleMonthSpan y) { // Alternative method for operator <= return (x <= y); } public static OracleBoolean NotEquals(OracleMonthSpan x, OracleMonthSpan y) { // Alternative method for operator != return (x != y); } public static explicit operator int(OracleMonthSpan x) { if (x.IsNull) { throw ADP.DataIsNull(); } return x.Value; } public static explicit operator OracleMonthSpan(string x) { return OracleMonthSpan.Parse(x); } public static OracleBoolean operator== (OracleMonthSpan x, OracleMonthSpan y) { return (x.IsNull || y.IsNull) ? OracleBoolean.Null : new OracleBoolean(x.CompareTo(y) == 0); } public static OracleBoolean operator> (OracleMonthSpan x, OracleMonthSpan y) { return (x.IsNull || y.IsNull) ? OracleBoolean.Null : new OracleBoolean(x.CompareTo(y) > 0); } public static OracleBoolean operator>= (OracleMonthSpan x, OracleMonthSpan y) { return (x.IsNull || y.IsNull) ? OracleBoolean.Null : new OracleBoolean(x.CompareTo(y) >= 0); } public static OracleBoolean operator< (OracleMonthSpan x, OracleMonthSpan y) { return (x.IsNull || y.IsNull) ? OracleBoolean.Null : new OracleBoolean(x.CompareTo(y) < 0); } public static OracleBoolean operator<= (OracleMonthSpan x, OracleMonthSpan y) { return (x.IsNull || y.IsNull) ? OracleBoolean.Null : new OracleBoolean(x.CompareTo(y) <= 0); } public static OracleBoolean operator!= (OracleMonthSpan x, OracleMonthSpan y) { return (x.IsNull || y.IsNull) ? OracleBoolean.Null : new OracleBoolean(x.CompareTo(y) != 0); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace System.Data.OracleClient { using System; using System.Data.SqlTypes; using System.Data.Common; using System.Diagnostics; using System.Globalization; using System.Runtime.InteropServices; using System.Text; //--------------------------------------------------------------------- // OracleMonthSpan // // This class implements support the Oracle 9i 'INTERVAL YEAR TO MONTH' // internal data type. // [StructLayout(LayoutKind.Sequential, Pack=1)] public struct OracleMonthSpan : IComparable, INullable { private int _value; private const int MaxMonth = 176556; private const int MinMonth = -176556; public static readonly OracleMonthSpan MaxValue = new OracleMonthSpan(MaxMonth); // 4172 BC - 9999 AD * 12 months/year public static readonly OracleMonthSpan MinValue = new OracleMonthSpan(MinMonth); // 4172 BC - 9999 AD * 12 months/year public static readonly OracleMonthSpan Null = new OracleMonthSpan(true); private const int NullValue = Int32.MaxValue; // Construct from nothing -- the value will be null internal OracleMonthSpan(bool isNull) { _value = NullValue; } // Construct from an integer number of months public OracleMonthSpan (int months) { _value = months; AssertValid(_value); } public OracleMonthSpan (Int32 years, Int32 months) { try { checked { _value = (years * 12) + months; } // Will assert below if invalid. } catch (System.OverflowException) { throw ADP.MonthOutOfRange(); } AssertValid(_value); } // Copy constructor public OracleMonthSpan (OracleMonthSpan from) { _value = from._value; } // (internal) construct from a row/parameter binding internal OracleMonthSpan (NativeBuffer buffer, int valueOffset) { _value = MarshalToInt32(buffer, valueOffset); } public bool IsNull { get { return (NullValue == _value); } } public int Value { get { if (IsNull) { throw ADP.DataIsNull(); } return _value; } } static private void AssertValid(int monthSpan) { if (monthSpan < MinMonth || monthSpan > MaxMonth) { throw ADP.MonthOutOfRange(); } } public int CompareTo(object obj) { if (obj.GetType() == typeof(OracleMonthSpan)) { OracleMonthSpan odt = (OracleMonthSpan)obj; // If both values are Null, consider them equal. // Otherwise, Null is less than anything. if (IsNull) { return odt.IsNull ? 0 : -1; } if (odt.IsNull) { return 1; } // Neither value is null, do the comparison. int result = _value.CompareTo(odt._value); return result; } throw ADP.WrongType(obj.GetType(), typeof(OracleMonthSpan)); } public override bool Equals(object value) { if (value is OracleMonthSpan) { return (this == (OracleMonthSpan)value).Value; } else { return false; } } public override int GetHashCode() { return IsNull ? 0 : _value.GetHashCode(); } static internal int MarshalToInt32( NativeBuffer buffer, int valueOffset) { byte[] ociValue = buffer.ReadBytes(valueOffset, 5); int years = (int)((long)( (int)ociValue[0] << 24 | (int)ociValue[1] << 16 | (int)ociValue[2] << 8 | (int)ociValue[3] ) - 0x80000000); int months = (int)ociValue[4] - 60; int result = (years * 12) + months; AssertValid(result); return result; } static internal int MarshalToNative(object value, NativeBuffer buffer, int offset) { int from; if ( value is OracleMonthSpan ) from = ((OracleMonthSpan)value)._value; else from = (int)value; byte[] ociValue = new byte[5]; int years = (int)((long)(from / 12) + 0x80000000); int months = from % 12; // DEVNOTE: undoubtedly, this is Intel byte order specific, but how // do I verify what Oracle needs on a non Intel machine? ociValue[0] = (byte)((years >> 24)); ociValue[1] = (byte)((years >> 16) & 0xff); ociValue[2] = (byte)((years >> 8) & 0xff); ociValue[3] = (byte)(years & 0xff); ociValue[4] = (byte)(months + 60); buffer.WriteBytes(offset, ociValue, 0, 5); return 5; } public static OracleMonthSpan Parse(string s) { int ms = Int32.Parse(s, CultureInfo.InvariantCulture); return new OracleMonthSpan(ms); } public override string ToString() { if (IsNull) { return ADP.NullString; } string retval = Value.ToString(CultureInfo.CurrentCulture); return retval; } public static OracleBoolean Equals(OracleMonthSpan x, OracleMonthSpan y) { // Alternative method for operator == return (x == y); } public static OracleBoolean GreaterThan(OracleMonthSpan x, OracleMonthSpan y) { // Alternative method for operator > return (x > y); } public static OracleBoolean GreaterThanOrEqual(OracleMonthSpan x, OracleMonthSpan y) { // Alternative method for operator >= return (x >= y); } public static OracleBoolean LessThan(OracleMonthSpan x, OracleMonthSpan y) { // Alternative method for operator < return (x < y); } public static OracleBoolean LessThanOrEqual(OracleMonthSpan x, OracleMonthSpan y) { // Alternative method for operator <= return (x <= y); } public static OracleBoolean NotEquals(OracleMonthSpan x, OracleMonthSpan y) { // Alternative method for operator != return (x != y); } public static explicit operator int(OracleMonthSpan x) { if (x.IsNull) { throw ADP.DataIsNull(); } return x.Value; } public static explicit operator OracleMonthSpan(string x) { return OracleMonthSpan.Parse(x); } public static OracleBoolean operator== (OracleMonthSpan x, OracleMonthSpan y) { return (x.IsNull || y.IsNull) ? OracleBoolean.Null : new OracleBoolean(x.CompareTo(y) == 0); } public static OracleBoolean operator> (OracleMonthSpan x, OracleMonthSpan y) { return (x.IsNull || y.IsNull) ? OracleBoolean.Null : new OracleBoolean(x.CompareTo(y) > 0); } public static OracleBoolean operator>= (OracleMonthSpan x, OracleMonthSpan y) { return (x.IsNull || y.IsNull) ? OracleBoolean.Null : new OracleBoolean(x.CompareTo(y) >= 0); } public static OracleBoolean operator< (OracleMonthSpan x, OracleMonthSpan y) { return (x.IsNull || y.IsNull) ? OracleBoolean.Null : new OracleBoolean(x.CompareTo(y) < 0); } public static OracleBoolean operator<= (OracleMonthSpan x, OracleMonthSpan y) { return (x.IsNull || y.IsNull) ? OracleBoolean.Null : new OracleBoolean(x.CompareTo(y) <= 0); } public static OracleBoolean operator!= (OracleMonthSpan x, OracleMonthSpan y) { return (x.IsNull || y.IsNull) ? OracleBoolean.Null : new OracleBoolean(x.CompareTo(y) != 0); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HttpRequest.cs
- WindowsMenu.cs
- XmlHierarchicalEnumerable.cs
- __Filters.cs
- TypeUsageBuilder.cs
- RangeValuePatternIdentifiers.cs
- UserControlFileEditor.cs
- CursorConverter.cs
- ResourceReader.cs
- StyleTypedPropertyAttribute.cs
- HtmlHead.cs
- CompareValidator.cs
- ViewStateModeByIdAttribute.cs
- WebSysDisplayNameAttribute.cs
- ListViewHitTestInfo.cs
- WindowsStartMenu.cs
- DocumentViewerAutomationPeer.cs
- FileLevelControlBuilderAttribute.cs
- QueryContinueDragEventArgs.cs
- ColorPalette.cs
- DashStyle.cs
- HwndSubclass.cs
- Configuration.cs
- FixedSOMTextRun.cs
- RelationshipConstraintValidator.cs
- DbMetaDataFactory.cs
- PolyLineSegmentFigureLogic.cs
- Selection.cs
- ToolStripManager.cs
- ProjectionNode.cs
- AdRotator.cs
- GridErrorDlg.cs
- InvokeWebServiceDesigner.cs
- IntSecurity.cs
- X509ServiceCertificateAuthenticationElement.cs
- Thickness.cs
- XmlReader.cs
- PolicyValidationException.cs
- Byte.cs
- Script.cs
- PersonalizableAttribute.cs
- FrugalMap.cs
- CodeCompileUnit.cs
- GlyphsSerializer.cs
- RequestCacheEntry.cs
- Visual3D.cs
- WebConfigurationHostFileChange.cs
- ElementHostPropertyMap.cs
- CriticalHandle.cs
- EndpointInstanceProvider.cs
- ColumnHeader.cs
- TextElementEnumerator.cs
- SliderAutomationPeer.cs
- HostingEnvironmentException.cs
- DataGridViewUtilities.cs
- String.cs
- DbgUtil.cs
- DataGridViewDataConnection.cs
- NativeMethods.cs
- StateDesigner.CommentLayoutGlyph.cs
- FrameworkContentElement.cs
- ApplicationInfo.cs
- CreateUserWizardStep.cs
- RightsManagementPermission.cs
- Focus.cs
- AppManager.cs
- SmiRequestExecutor.cs
- DirectoryNotFoundException.cs
- XmlAnyAttributeAttribute.cs
- TypeUsageBuilder.cs
- FullTextBreakpoint.cs
- SimpleHandlerBuildProvider.cs
- AxisAngleRotation3D.cs
- RegionData.cs
- DtcInterfaces.cs
- XmlSubtreeReader.cs
- SourceLineInfo.cs
- MasterPageParser.cs
- NCryptNative.cs
- MsmqIntegrationValidationBehavior.cs
- DataGridViewToolTip.cs
- InstancePersistenceException.cs
- ClientSession.cs
- SystemUnicastIPAddressInformation.cs
- CompiledXpathExpr.cs
- SQLInt16Storage.cs
- GridEntryCollection.cs
- _AuthenticationState.cs
- XmlWriter.cs
- assertwrapper.cs
- Deflater.cs
- IntranetCredentialPolicy.cs
- InstanceOwnerException.cs
- WebPartVerb.cs
- StringSorter.cs
- DataBoundControl.cs
- Internal.cs
- MarkerProperties.cs
- RectKeyFrameCollection.cs
- Set.cs