Пример #1
0
        // if x more specific than y then return -1
        public int Compare(LambdaSignature x, LambdaSignature y)
        {
            if (x.RequiredArgsCount > y.RequiredArgsCount)
            {
                // more arguments is more specific
                return(-1);
            }

            if (x.RequiredArgsCount < y.RequiredArgsCount)
            {
                // more arguments is more specific
                return(1);
            }

            for (var i = 0; i < x.RequiredArgsCount; ++i)
            {
                var type1 = x.Parameters[i].Specializer;
                var type2 = y.Parameters[i].Specializer;

                var result = Runtime.CompareClass(type1, type2);

                switch (result)
                {
                case CompareClassResult.NotComparable:
                {
                    // implies both are not null
                    // anything will do but the value must be reproducible.
                    return(Runtime.Compare(type1.GetHashCode(), type2.GetHashCode()));
                }

                case CompareClassResult.Less:
                {
                    // more specific must be on top
                    return(-1);
                }

                case CompareClassResult.Greater:
                {
                    // less specific must be on bottom
                    return(1);
                }

                //case CompareClassResult.Equal:
                default:
                {
                    // next slot
                    break;
                }
                }
            }

            return(0);
        }
Пример #2
0
 object IApply.Apply(object[] args)
 {
     return(Runtime.Compare(args[0], args[1]));
 }