code: public void reduce( AppendableVec nv ) {
      if( this == nv ) return;    // Trivially done
  
      // Combine arrays of elements-per-chunk
      long e1[] = nv._espc;       // Shorter array of longs?
      byte t1[] = nv._chunkTypes;
      if( e1.length > _espc.length ) {
        e1 = _espc;               // Keep the shorter one in e1
        t1 = _chunkTypes;
        _espc = nv._espc;         // Keep longer in the object
        _chunkTypes = nv._chunkTypes;
      }
      for( int i=0; i<e1.length; i++ ){ // Copy non-zero elements over
        assert _chunkTypes[i] == 0 || t1[i] == 0;
        if( e1[i] != 0 && _espc[i]==0 )
          _espc[i] = e1[i];
        _chunkTypes[i] |= t1[i];
      }
      _naCnt += nv._naCnt;
      _strCnt += nv._strCnt;
      Utils.add(_timCnt,nv._timCnt);
      _totalCnt += nv._totalCnt;
    }
docs: Called single-threaded from the M/R framework.