artdaq_node_server  v1_00_07
 All Classes Namespaces Files Variables Pages
_baseIsEqualDeep.js
1 var Stack = require('./_Stack'),
2  equalArrays = require('./_equalArrays'),
3  equalByTag = require('./_equalByTag'),
4  equalObjects = require('./_equalObjects'),
5  getTag = require('./_getTag'),
6  isArray = require('./isArray'),
7  isBuffer = require('./isBuffer'),
8  isTypedArray = require('./isTypedArray');
9 
11 var COMPARE_PARTIAL_FLAG = 1;
12 
14 var argsTag = '[object Arguments]',
15  arrayTag = '[object Array]',
16  objectTag = '[object Object]';
17 
19 var objectProto = Object.prototype;
20 
22 var hasOwnProperty = objectProto.hasOwnProperty;
23 
38 function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
39  var objIsArr = isArray(object),
40  othIsArr = isArray(other),
41  objTag = objIsArr ? arrayTag : getTag(object),
42  othTag = othIsArr ? arrayTag : getTag(other);
43 
44  objTag = objTag == argsTag ? objectTag : objTag;
45  othTag = othTag == argsTag ? objectTag : othTag;
46 
47  var objIsObj = objTag == objectTag,
48  othIsObj = othTag == objectTag,
49  isSameTag = objTag == othTag;
50 
51  if (isSameTag && isBuffer(object)) {
52  if (!isBuffer(other)) {
53  return false;
54  }
55  objIsArr = true;
56  objIsObj = false;
57  }
58  if (isSameTag && !objIsObj) {
59  stack || (stack = new Stack);
60  return (objIsArr || isTypedArray(object))
61  ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
62  : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
63  }
64  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
65  var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
66  othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
67 
68  if (objIsWrapped || othIsWrapped) {
69  var objUnwrapped = objIsWrapped ? object.value() : object,
70  othUnwrapped = othIsWrapped ? other.value() : other;
71 
72  stack || (stack = new Stack);
73  return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
74  }
75  }
76  if (!isSameTag) {
77  return false;
78  }
79  stack || (stack = new Stack);
80  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
81 }
82 
83 module.exports = baseIsEqualDeep;