code: function (removing, adding) {
        var removeCnt, addCnt, hasDelta;
  
        if ('number' === typeof removing) {
          removeCnt = removing;
        } else if (removing) {
          removeCnt = _emberMetalProperty_get.get(removing, 'length');
        } else {
          removeCnt = removing = -1;
        }
  
        if ('number' === typeof adding) {
          addCnt = adding;
        } else if (adding) {
          addCnt = _emberMetalProperty_get.get(adding, 'length');
        } else {
          addCnt = adding = -1;
        }
  
        hasDelta = addCnt < 0 || removeCnt < 0 || addCnt - removeCnt !== 0;
  
        if (removing === -1) {
          removing = null;
        }
  
        if (adding === -1) {
          adding = null;
        }
  
        _emberMetalEvents.sendEvent(this, '@enumerable:change', [this, removing, adding]);
  
        if (hasDelta) {
          _emberMetalProperty_events.propertyDidChange(this, 'length');
        }
  
        _emberMetalProperty_events.propertyDidChange(this, '[]');
  
        return this;
      }
docs: Invoke this method when the contents of your enumerable has changed.
  This will notify any observers watching for content changes. If you are
  implementing an ordered enumerable (such as an array), also pass the
  start and end values where the content changed so that it can be used to
  notify range observers.
  @method enumerableContentDidChange
  @param {Ember.Enumerable|Number} removing An enumerable of the objects to
  be removed or the number of items to be removed.
  @param {Ember.Enumerable|Number} adding  An enumerable of the objects to
  be added or the number of items to be added.
  @chainable
  @private