| 
/* 
 | 
* Licensed to the Apache Software Foundation (ASF) under one 
 | 
* or more contributor license agreements.  See the NOTICE file 
 | 
* distributed with this work for additional information 
 | 
* regarding copyright ownership.  The ASF licenses this file 
 | 
* to you under the Apache License, Version 2.0 (the 
 | 
* "License"); you may not use this file except in compliance 
 | 
* with the License.  You may obtain a copy of the License at 
 | 
* 
 | 
*   http://www.apache.org/licenses/LICENSE-2.0 
 | 
* 
 | 
* Unless required by applicable law or agreed to in writing, 
 | 
* software distributed under the License is distributed on an 
 | 
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 | 
* KIND, either express or implied.  See the License for the 
 | 
* specific language governing permissions and limitations 
 | 
* under the License. 
 | 
*/ 
 | 
  
 | 
  
 | 
/** 
 | 
 * AUTO-GENERATED FILE. DO NOT MODIFY. 
 | 
 */ 
 | 
  
 | 
/* 
 | 
* Licensed to the Apache Software Foundation (ASF) under one 
 | 
* or more contributor license agreements.  See the NOTICE file 
 | 
* distributed with this work for additional information 
 | 
* regarding copyright ownership.  The ASF licenses this file 
 | 
* to you under the Apache License, Version 2.0 (the 
 | 
* "License"); you may not use this file except in compliance 
 | 
* with the License.  You may obtain a copy of the License at 
 | 
* 
 | 
*   http://www.apache.org/licenses/LICENSE-2.0 
 | 
* 
 | 
* Unless required by applicable law or agreed to in writing, 
 | 
* software distributed under the License is distributed on an 
 | 
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 | 
* KIND, either express or implied.  See the License for the 
 | 
* specific language governing permissions and limitations 
 | 
* under the License. 
 | 
*/ 
 | 
import { createHashMap, isObject, map, isString } from 'zrender/lib/core/util.js'; 
 | 
var uidBase = 0; 
 | 
var OrdinalMeta = /** @class */function () { 
 | 
  function OrdinalMeta(opt) { 
 | 
    this.categories = opt.categories || []; 
 | 
    this._needCollect = opt.needCollect; 
 | 
    this._deduplication = opt.deduplication; 
 | 
    this.uid = ++uidBase; 
 | 
  } 
 | 
  OrdinalMeta.createByAxisModel = function (axisModel) { 
 | 
    var option = axisModel.option; 
 | 
    var data = option.data; 
 | 
    var categories = data && map(data, getName); 
 | 
    return new OrdinalMeta({ 
 | 
      categories: categories, 
 | 
      needCollect: !categories, 
 | 
      // deduplication is default in axis. 
 | 
      deduplication: option.dedplication !== false 
 | 
    }); 
 | 
  }; 
 | 
  ; 
 | 
  OrdinalMeta.prototype.getOrdinal = function (category) { 
 | 
    // @ts-ignore 
 | 
    return this._getOrCreateMap().get(category); 
 | 
  }; 
 | 
  /** 
 | 
   * @return The ordinal. If not found, return NaN. 
 | 
   */ 
 | 
  OrdinalMeta.prototype.parseAndCollect = function (category) { 
 | 
    var index; 
 | 
    var needCollect = this._needCollect; 
 | 
    // The value of category dim can be the index of the given category set. 
 | 
    // This feature is only supported when !needCollect, because we should 
 | 
    // consider a common case: a value is 2017, which is a number but is 
 | 
    // expected to be tread as a category. This case usually happen in dataset, 
 | 
    // where it happent to be no need of the index feature. 
 | 
    if (!isString(category) && !needCollect) { 
 | 
      return category; 
 | 
    } 
 | 
    // Optimize for the scenario: 
 | 
    // category is ['2012-01-01', '2012-01-02', ...], where the input 
 | 
    // data has been ensured not duplicate and is large data. 
 | 
    // Notice, if a dataset dimension provide categroies, usually echarts 
 | 
    // should remove duplication except user tell echarts dont do that 
 | 
    // (set axis.deduplication = false), because echarts do not know whether 
 | 
    // the values in the category dimension has duplication (consider the 
 | 
    // parallel-aqi example) 
 | 
    if (needCollect && !this._deduplication) { 
 | 
      index = this.categories.length; 
 | 
      this.categories[index] = category; 
 | 
      return index; 
 | 
    } 
 | 
    var map = this._getOrCreateMap(); 
 | 
    // @ts-ignore 
 | 
    index = map.get(category); 
 | 
    if (index == null) { 
 | 
      if (needCollect) { 
 | 
        index = this.categories.length; 
 | 
        this.categories[index] = category; 
 | 
        // @ts-ignore 
 | 
        map.set(category, index); 
 | 
      } else { 
 | 
        index = NaN; 
 | 
      } 
 | 
    } 
 | 
    return index; 
 | 
  }; 
 | 
  // Consider big data, do not create map until needed. 
 | 
  OrdinalMeta.prototype._getOrCreateMap = function () { 
 | 
    return this._map || (this._map = createHashMap(this.categories)); 
 | 
  }; 
 | 
  return OrdinalMeta; 
 | 
}(); 
 | 
function getName(obj) { 
 | 
  if (isObject(obj) && obj.value != null) { 
 | 
    return obj.value; 
 | 
  } else { 
 | 
    return obj + ''; 
 | 
  } 
 | 
} 
 | 
export default OrdinalMeta; 
 |