OpenSim.Region.ScriptEngine.Shared.LSL_Types.list.compare C# (CSharp) Method

compare() private static method

private static compare ( object left, object right, int ascending ) : int
left object
right object
ascending int
return int
            private static int compare(object left, object right, int ascending)
            {
                if (!left.GetType().Equals(right.GetType()))
                {
                    // unequal types are always "equal" for comparison purposes.
                    // this way, the bubble sort will never swap them, and we'll
                    // get that feathered effect we're looking for
                    return 0;
                }

                int ret = 0;

                if (left is key)
                {
                    key l = (key)left;
                    key r = (key)right;
                    ret = String.CompareOrdinal(l.value, r.value);
                }
                else if (left is LSLString)
                {
                    LSLString l = (LSLString)left;
                    LSLString r = (LSLString)right;
                    ret = String.CompareOrdinal(l.m_string, r.m_string);
                }
                else if (left is LSLInteger)
                {
                    LSLInteger l = (LSLInteger)left;
                    LSLInteger r = (LSLInteger)right;
                    ret = Math.Sign(l.value - r.value);
                }
                else if (left is LSLFloat)
                {
                    LSLFloat l = (LSLFloat)left;
                    LSLFloat r = (LSLFloat)right;
                    ret = Math.Sign(l.value - r.value);
                }
                else if (left is Vector3)
                {
                    Vector3 l = (Vector3)left;
                    Vector3 r = (Vector3)right;
                    ret = Math.Sign(Vector3.Mag(l) - Vector3.Mag(r));
                }
                else if (left is Quaternion)
                {
                    Quaternion l = (Quaternion)left;
                    Quaternion r = (Quaternion)right;
                    ret = Math.Sign(Quaternion.Mag(l) - Quaternion.Mag(r));
                }

                if (ascending == 0)
                {
                    ret = 0 - ret;
                }

                return ret;
            }