コード例 #1
0
        internal static bool AreParametersEqual(OpaqueDataDictionary parameters0, OpaqueDataDictionary parameters1, OpaqueDataDictionary defaultValues)
        {
            Debug.Assert(defaultValues != null, "defaultValues must not be empty.");
            Debug.Assert(EmptyParameters != null && EmptyParameters.Count == 0);

            // Same reference or both null?
            if (parameters0 == parameters1)
            {
                return(true);
            }

            if (parameters0 == null)
            {
                parameters0 = EmptyParameters;
            }
            if (parameters1 == null)
            {
                parameters1 = EmptyParameters;
            }

            // Are both dictionaries empty?
            if (parameters0.Count == 0 && parameters1.Count == 0)
            {
                return(true);
            }

            // Compare the values with the second dictionary or
            // the default values.
            if (parameters0.Count < parameters1.Count)
            {
                var dummy = parameters0;
                parameters0 = parameters1;
                parameters1 = dummy;
            }

            // Compare parameters0 with parameters1 or defaultValues.
            foreach (var pair in parameters0)
            {
                object value0 = pair.Value;

                // Search for matching parameter.
                if (!parameters1.TryGetValue(pair.Key, out object value1) && !defaultValues.TryGetValue(pair.Key, out value1))
                {
                    return(false);
                }

                if (!AreEqual(value0, value1))
                {
                    return(false);
                }
            }

            // Compare parameters which are only in parameters1 with defaultValues.
            foreach (var pair in parameters1)
            {
                if (parameters0.ContainsKey(pair.Key))
                {
                    continue;
                }

                if (!defaultValues.TryGetValue(pair.Key, out object defaultValue))
                {
                    return(false);
                }

                if (!AreEqual(pair.Value, defaultValue))
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #2
0
        internal static bool AreParametersEqual(OpaqueDataDictionary parameters0, OpaqueDataDictionary parameters1)
        {
            // Same reference or both null?
            if (parameters0 == parameters1)
                return true;

            // Are both dictionaries are empty?
            if ((parameters0 == null || parameters0.Count == 0) && (parameters1 == null || parameters1.Count == 0))
                return true;

            // Is one dictionary empty?
            if (parameters0 == null || parameters1 == null)
                return false;

            // Is number of parameters different?
            // (This assumes that default values are always set the same way, i.e.
            // either parameters with default values are set in both dictionaries
            // or omitted in both dictionaries!)
            if (parameters0.Count != parameters1.Count)
                return false;

            // Compare parameter by parameter.
            foreach (var pair in parameters0)
            {
                object value0 = pair.Value;
                object value1;

                if (!parameters1.TryGetValue(pair.Key, out value1))
                    return false;

                // Are values equal or both null?
                if (Equals(value0, value1))
                    continue;

                // Is one value null?
                if (value0 == null || value1 == null)
                    return false;

                // Values are of different type: Compare string representation.
                if (ConvertToString(value0) != ConvertToString(value1))
                    return false;
            }

            return true;
        }
コード例 #3
0
ファイル: PipelineBuildEvent.cs プロジェクト: Zodge/MonoGame
        internal static bool AreParametersEqual(OpaqueDataDictionary parameters0, OpaqueDataDictionary parameters1, OpaqueDataDictionary defaultValues)
        {
            Debug.Assert(defaultValues != null, "defaultValues must not be empty.");
            Debug.Assert(EmptyParameters != null && EmptyParameters.Count == 0);

            // Same reference or both null?
            if (parameters0 == parameters1)
                return true;

            if (parameters0 == null)
                parameters0 = EmptyParameters;
            if (parameters1 == null)
                parameters1 = EmptyParameters;

            // Are both dictionaries empty?
            if (parameters0.Count == 0 && parameters1.Count == 0)
                return true;

            // Compare the values with the second dictionary or
            // the default values.
            if (parameters0.Count < parameters1.Count)
            {
                var dummy = parameters0;
                parameters0 = parameters1;
                parameters1 = dummy;
            }

            // Compare parameters0 with parameters1 or defaultValues.
            foreach (var pair in parameters0)
            {
                object value0 = pair.Value;
                object value1;

                // Search for matching parameter.
                if (!parameters1.TryGetValue(pair.Key, out value1) && !defaultValues.TryGetValue(pair.Key, out value1))
                    return false;

                if (!AreEqual(value0, value1))
                    return false;
            }

            // Compare parameters which are only in parameters1 with defaultValues.
            foreach (var pair in parameters1)
            {
                if (parameters0.ContainsKey(pair.Key))
                    continue;

                object defaultValue;
                if (!defaultValues.TryGetValue(pair.Key, out defaultValue))
                    return false;

                if (!AreEqual(pair.Value, defaultValue))
                    return false;
            }

            return true;
        }
コード例 #4
0
        internal static bool AreParametersEqual(OpaqueDataDictionary parameters0, OpaqueDataDictionary parameters1)
        {
            // Same reference or both null?
            if (parameters0 == parameters1)
            {
                return(true);
            }

            // Are both dictionaries are empty?
            if ((parameters0 == null || parameters0.Count == 0) && (parameters1 == null || parameters1.Count == 0))
            {
                return(true);
            }

            // Is one dictionary empty?
            if (parameters0 == null || parameters1 == null)
            {
                return(false);
            }

            // Is number of parameters different?
            // (This assumes that default values are always set the same way, i.e.
            // either parameters with default values are set in both dictionaries
            // or omitted in both dictionaries!)
            if (parameters0.Count != parameters1.Count)
            {
                return(false);
            }

            // Compare parameter by parameter.
            foreach (var pair in parameters0)
            {
                object value0 = pair.Value;
                object value1;

                if (!parameters1.TryGetValue(pair.Key, out value1))
                {
                    return(false);
                }

                // Are values equal or both null?
                if (Equals(value0, value1))
                {
                    continue;
                }

                // Is one value null?
                if (value0 == null || value1 == null)
                {
                    return(false);
                }

                // Values are of different type: Compare string representation.
                if (ConvertToString(value0) != ConvertToString(value1))
                {
                    return(false);
                }
            }

            return(true);
        }