| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| part of dart_ui; |
| |
| class _HashEnd { const _HashEnd(); } |
| const _HashEnd _hashEnd = const _HashEnd(); |
| |
| /// Combine up to twenty values' hashCodes into one value. |
| /// |
| /// If you only need to handle one value's hashCode, then just refer to its |
| /// [hashCode] getter directly. |
| /// |
| /// If you need to combine an arbitrary number of values from a List or other |
| /// Iterable, use [hashList]. The output of hashList can be used as one of the |
| /// arguments to this function. |
| /// |
| /// For example: |
| /// |
| /// int hashCode => hashValues(foo, bar, hashList(quux), baz); |
| int hashValues( |
| Object arg01, Object arg02, [ Object arg03 = _hashEnd, |
| Object arg04 = _hashEnd, Object arg05 = _hashEnd, Object arg06 = _hashEnd, |
| Object arg07 = _hashEnd, Object arg08 = _hashEnd, Object arg09 = _hashEnd, |
| Object arg10 = _hashEnd, Object arg11 = _hashEnd, Object arg12 = _hashEnd, |
| Object arg13 = _hashEnd, Object arg14 = _hashEnd, Object arg15 = _hashEnd, |
| Object arg16 = _hashEnd, Object arg17 = _hashEnd, Object arg18 = _hashEnd, |
| Object arg19 = _hashEnd, Object arg20 = _hashEnd ]) { |
| int result = 373; |
| assert(arg01 is! Iterable); |
| result = 37 * result + arg01.hashCode; |
| assert(arg02 is! Iterable); |
| result = 37 * result + arg02.hashCode; |
| if (arg03 != _hashEnd) { |
| assert(arg03 is! Iterable); |
| result = 37 * result + arg03.hashCode; |
| if (arg04 != _hashEnd) { |
| assert(arg04 is! Iterable); |
| result = 37 * result + arg04.hashCode; |
| if (arg05 != _hashEnd) { |
| assert(arg05 is! Iterable); |
| result = 37 * result + arg05.hashCode; |
| if (arg06 != _hashEnd) { |
| assert(arg06 is! Iterable); |
| result = 37 * result + arg06.hashCode; |
| if (arg07 != _hashEnd) { |
| assert(arg07 is! Iterable); |
| result = 37 * result + arg07.hashCode; |
| if (arg08 != _hashEnd) { |
| assert(arg08 is! Iterable); |
| result = 37 * result + arg08.hashCode; |
| if (arg09 != _hashEnd) { |
| assert(arg09 is! Iterable); |
| result = 37 * result + arg09.hashCode; |
| if (arg10 != _hashEnd) { |
| assert(arg10 is! Iterable); |
| result = 37 * result + arg10.hashCode; |
| if (arg11 != _hashEnd) { |
| assert(arg11 is! Iterable); |
| result = 37 * result + arg11.hashCode; |
| if (arg12 != _hashEnd) { |
| assert(arg12 is! Iterable); |
| result = 37 * result + arg12.hashCode; |
| if (arg13 != _hashEnd) { |
| assert(arg13 is! Iterable); |
| result = 37 * result + arg13.hashCode; |
| if (arg14 != _hashEnd) { |
| assert(arg14 is! Iterable); |
| result = 37 * result + arg14.hashCode; |
| if (arg15 != _hashEnd) { |
| assert(arg15 is! Iterable); |
| result = 37 * result + arg15.hashCode; |
| if (arg16 != _hashEnd) { |
| assert(arg16 is! Iterable); |
| result = 37 * result + arg16.hashCode; |
| if (arg17 != _hashEnd) { |
| assert(arg17 is! Iterable); |
| result = 37 * result + arg17.hashCode; |
| if (arg18 != _hashEnd) { |
| assert(arg18 is! Iterable); |
| result = 37 * result + arg18.hashCode; |
| if (arg19 != _hashEnd) { |
| assert(arg19 is! Iterable); |
| result = 37 * result + arg19.hashCode; |
| if (arg20 != _hashEnd) { |
| assert(arg20 is! Iterable); |
| result = 37 * result + arg20.hashCode; |
| // I can see my house from here! |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| return result; |
| } |
| |
| /// Combine the hashCodes of an arbitrary number of values from an Iterable into |
| /// one value. This function will return the same value if given "null" as if |
| /// given an empty list. |
| int hashList(Iterable<Object> args) { |
| int result = 373; |
| if (args != null) { |
| for (Object arg in args) { |
| assert(arg is! Iterable); |
| result = 37 * result + arg.hashCode; |
| } |
| } |
| return result; |
| } |