| /** |
| * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/> |
| * Build: `lodash modularize modern exports="node" -o ./modern/` |
| * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/> |
| * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE> |
| * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors |
| * Available under MIT license <http://lodash.com/license> |
| */ |
| var cachePush = require('./cachePush'), |
| getObject = require('./getObject'), |
| releaseObject = require('./releaseObject'); |
| |
| /** |
| * Creates a cache object to optimize linear searches of large arrays. |
| * |
| * @private |
| * @param {Array} [array=[]] The array to search. |
| * @returns {null|Object} Returns the cache object or `null` if caching should not be used. |
| */ |
| function createCache(array) { |
| var index = -1, |
| length = array.length, |
| first = array[0], |
| mid = array[(length / 2) | 0], |
| last = array[length - 1]; |
| |
| if (first && typeof first == 'object' && |
| mid && typeof mid == 'object' && last && typeof last == 'object') { |
| return false; |
| } |
| var cache = getObject(); |
| cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false; |
| |
| var result = getObject(); |
| result.array = array; |
| result.cache = cache; |
| result.push = cachePush; |
| |
| while (++index < length) { |
| result.push(array[index]); |
| } |
| return result; |
| } |
| |
| module.exports = createCache; |