Пример #1
0
        public int CompareTo(IVariantData value)
        {
            TypedArray rhsValue = ((TypedArray)value);

            if (Value.Length != rhsValue.Value.Length)
            {
                return(Value.Length.CompareTo(rhsValue.Value.Length));
            }
            else if (ElementType != rhsValue.ElementType)
            {
                return(ElementType.CompareTo(rhsValue.ElementType));
            }
            else
            {
                CompareDelegate comparer = null;

                switch (ElementType)
                {
                case VariantBase.EnumType.Float:
                    comparer = delegate(object lhs, object rhs) { return(((float)lhs).CompareTo((float)rhs)); };
                    break;

                case VariantBase.EnumType.Double:
                    comparer = delegate(object lhs, object rhs) { return(((double)lhs).CompareTo((double)rhs)); };
                    break;

                case VariantBase.EnumType.Boolean:
                    comparer = delegate(object lhs, object rhs) { return(((bool)lhs).CompareTo((bool)rhs)); };
                    break;

                case VariantBase.EnumType.String:
                    comparer = delegate(object lhs, object rhs) { return(((string)lhs).CompareTo((string)rhs)); };
                    break;

                case VariantBase.EnumType.Int32:
                    comparer = delegate(object lhs, object rhs) { return(((Int32)lhs).CompareTo((Int32)rhs)); };
                    break;

                case VariantBase.EnumType.UInt32:
                    comparer = delegate(object lhs, object rhs) { return(((UInt32)lhs).CompareTo((UInt32)rhs)); };
                    break;

                case VariantBase.EnumType.Int64:
                    comparer = delegate(object lhs, object rhs) { return(((Int64)lhs).CompareTo((Int64)rhs)); };
                    break;

                case VariantBase.EnumType.UInt64:
                    comparer = delegate(object lhs, object rhs) { return(((UInt64)lhs).CompareTo((UInt64)rhs)); };
                    break;

                case VariantBase.EnumType.Time:
                    comparer = delegate(object lhs, object rhs) { return(((TimeSpan)lhs).CompareTo((TimeSpan)rhs)); };
                    break;

                case VariantBase.EnumType.DateTime:
                    comparer = delegate(object lhs, object rhs) { return(((DateTime)lhs).CompareTo((DateTime)rhs)); };
                    break;

                default:
                    throw new VariantException("Case exhaustion: " + ElementType);
                }

                for (int i = 0; i < Value.Length; ++i)
                {
                    int cmp = comparer(Value[i], rhsValue.Value[i]);
                    if (cmp != 0)
                    {
                        return(cmp);
                    }
                }
            }
            return(0);
        }